n8n 对接飞书自定义机器人指南
在自动化运维或消息通知场景中,将 n8n 工作流与飞书自定义机器人结合非常常见。飞书官方文档提供了详细的 Webhook 配置说明,但在 n8n 中实现签名校验(Signature Verification)时,Crypto 节点的参数配置容易出错。本文重点梳理 n8n 中的签名计算逻辑、节点配置及完整工作流示例。
1. 飞书自定义机器人基础配置
自定义机器人仅限当前群聊使用,无需租户管理员审核,但安全性需自行保障。添加步骤如下:
- 邀请机器人进群:进入目标群组,点击右上角更多按钮选择设置,点击群机器人,添加自定义机器人并设置名称与头像。
- 获取 Webhook 地址:创建完成后复制 webhook 地址,格式通常为
https://open.feishu.cn/open-apis/bot/v2/hook/xxxx。请妥善保管,避免泄露。 - 测试调用:使用 curl 等工具发送 POST 请求测试连通性。
curl -X POST -H "Content-Type: application/json" \
-d '{"msg_type":"text","content":{"text":"request example"}}' \
https://open.feishu.cn/open-apis/bot/v2/hook/your_webhook_id
若返回 {"code":0,"msg":"success"} 则表示成功。注意请求体大小不超过 20KB,频率限制为单租户单机器人 100 次/分钟。
2. 安全设置与签名校验
为防止 Webhook 地址泄露后被恶意调用,建议开启签名校验。飞书的签名算法较为特殊,与普通 HMAC 用法不同:
- 标准 HMAC:通常
key=secret,msg=data。 - 飞书要求:
key = timestamp + "\n" + secret,msg = ""(空字符串)。
这意味着我们需要先将时间戳和密钥拼接成字符串,再作为密钥传入 HMAC-SHA256 算法,对空数据进行加密,最后进行 Base64 编码。
语言参考示例
Python 示例
import hashlib, base64, hmac
def gen_sign(timestamp, secret):
string_to_sign = '{}\n{}'.format(timestamp, secret)
hmac_code = hmac.new(string_to_sign.encode("utf-8"), digestmod=hashlib.sha256).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')
return sign
Java 示例
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
public {
String Exception {
timestamp + + secret;
Mac.getInstance();
mac.init( (stringToSign.getBytes(), ));
[] signData = mac.doFinal( []{});
(Base64.encodeBase64(signData));
}
}


