n8n 集成飞书机器人:Webhook 签名与 Crypto 节点配置实战
在自动化流程中,向飞书推送消息时,开启签名校验是保障安全的关键。很多开发者在 n8n 中直接使用标准的 HMAC 逻辑会失败,因为飞书的签名算法比较特殊。本文将拆解如何在 n8n 中正确配置 Crypto 节点来完成签名,并实现稳定的消息推送。
飞书侧准备
首先需要在飞书群聊中添加自定义机器人。进入群组设置 -> 群机器人 -> 添加自定义机器人。获取 Webhook 地址后,务必开启'签名校验'功能,复制生成的密钥。
注意:自定义机器人仅限当前群聊使用,频率限制为单租户单机器人 100 次/分钟。发送请求体大小不能超过 20 KB。
n8n 核心配置
1. 生成时间戳
飞书要求签名中的时间戳必须是当前 Unix 时间戳(秒级)。我们使用 Edit Fields 节点来生成。
{{ Math.round(new Date().getTime() / 1000) }}
2. 计算签名(关键步骤)
这是最容易出错的地方。飞书的签名算法并非标准的 hmac(key, message),而是将 timestamp 和 secret 拼接作为 Key,空字符串作为 Message。
在 Crypto 节点中配置如下:
- Action: hmac
- Type: SHA256
- Value: (留空)
- Secret:
={{ $json.timestamp + '\n' + '你的飞书密钥' }} - Encoding: base64
这里利用了 n8n 的表达式引擎,动态拼接了时间戳和换行符。标准 HMAC 用法通常是 key=secret, msg=data,但飞书文档示例显示第一个参数 key 变成了 timestamp 和 secret 的拼接(用换行符),第二个参数 msg 为空。
3. 发送请求
最后通过 HTTP Request 节点调用 Webhook。Payload 需要包含 timestamp 和 sign 字段。
{
"timestamp": "{{ $json.timestamp }}",
"sign": "{{ $json.sign }}",
"msg_type": "text",
"content": {
"text"


