钉钉自定义机器人新增安全设置后消息发送失败,最常见原因是请求未携带正确的签名参数或 Webhook 地址失效。若开启了“加签”安全设置,必须在请求头或参数中计算并传入 timestamp 和 sign 值,否则接口会返回签名错误。
先说结论:新增安全设置后失败通常是因为代码未同步更新签名逻辑或 Webhook 权限变更。
- 先确认:检查机器人安全设置是"IP 地址”、“加签”还是“自定义关键词”,不同设置对应不同校验规则。
- 先处理:若开启加签,需在代码中实现 HMAC-SHA256 签名算法,将 timestamp 和 sign 拼接到 Webhook URL 或请求体中。
- 再验证:使用 Postman 或 curl 发送带签名的请求,观察返回 errcode 是否为 0。
命令速用版
若需快速验证 Webhook 连通性与签名是否正确,可使用 curl 命令模拟发送请求。以下示例展示了带签名参数的请求格式,请替换实际的 Webhook URL、timestamp 和 sign 值。
curl -X POST -H "Content-Type: application/json;charset=utf-8" -d '{"msgtype":"text","text":{"content":"测试消息"}}' "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN×tamp=YOUR_TIMESTAMP&sign=YOUR_SIGN"
注意:Content-Type 必须包含 charset=utf-8,否则可能导致中文乱码或解析失败。
为什么会这样
安全设置本质是增加了请求合法性校验层,代码未适配新规则会导致拦截。
钉钉机器人安全设置包括 IP 地址、加签和自定义关键词。开启“加签”后,服务端会验证请求中的时间戳和签名哈希值,防止请求被篡改或重放。若代码仍沿用旧的空参数请求,服务端无法通过校验,直接返回 400 或 403 错误。此外,部分安全设置变更可能导致 Webhook URL 权限重置,硬编码的旧 URL 可能失效。
分步处理
按照以下顺序排查安全设置引发的发送失败问题,每一步完成后需立即验证结果。
1. 核对安全设置类型
登录钉钉群设置,查看机器人详情中的安全设置。若显示“加签”,需获取 Secret 值;若显示"IP 地址”,需确认服务器出口 IP 是否在白名单内。
2. 实现签名算法
使用 HMAC-SHA256 算法,将 timestamp 加上换行符和 Secret 进行加密。生成的 sign 值需进行 URL Encode 处理。确保 timestamp 为当前时间毫秒值,与服务端时间偏差不宜过大。
3. 检查 JSON 结构
确认请求体中 text 字段为对象而非字符串,at 字段需包含 atMobiles 或 isAtAll 属性。错误的数据类型会导致 40035 错误。
4. 更新 Webhook 地址
若安全设置修改后 Webhook 地址发生变化,需同步更新代码中的 URL 配置。避免使用过期或泄露的旧地址。
怎么验证是否生效
通过接口返回码和钉钉群消息表现确认修复结果。
查看 HTTP 响应状态码,成功应为 200。检查响应体中的 errcode 字段,值为 0 表示发送成功。若 errcode 非 0,根据 errmsg 提示调整。同时在钉钉群内观察是否收到消息卡片,确认无“静默失败”现象。
常见坑
开发者在适配安全设置时容易忽略编码格式和时间戳精度问题。
- 签名超时:timestamp 使用旧时间戳会导致签名失效,需每次请求生成新时间戳。
- 编码错误:请求头缺少 Content-Type: application/json;charset=utf-8 会导致中文乱码。
- 字段类型:isAtAll 必须为布尔值 false/true,字符串形式会导致解析失败。
- URL 泄露:Webhook URL 频繁变更或泄露可能导致被系统判定为异常而失效。
常见问题
返回 40035 错误是什么原因?
通常是 JSON 数据结构不符合规范,例如 text 字段写成了字符串而非对象,或 at 字段缺少必要属性。
开启加签后签名一直报错怎么办?
检查 Secret 是否复制完整,确认 timestamp 是否为当前毫秒时间戳,并验证 sign 是否经过了 URL 编码。
消息发送成功但用户没收到通知?
可能是@用户 ID 不存在于当前企业群,或用户设置了免打扰,需检查 userid 是否匹配企业维度。
参考来源
- 钉钉机器人消息发送失败常见原因有哪些?
- 钉钉机器人发送消息总失败?检查这 3 个 JSON 配置细节 (附 Postman 调试技巧)
- DingtalkChatbot 避坑指南:解决 90% 开发者会遇到的 5 个常见问题
- 自定义机器人发送群聊消息 - 钉钉开放平台