钉钉机器人显示发送成功但群内未显示,通常是因为机器人被移出群聊、安全设置不匹配或内容触发风控拦截。建议优先检查群内机器人状态和 Webhook 安全配置,再验证消息内容是否合规。
先说结论:接口返回成功仅代表请求到达钉钉服务器,不代表消息一定投递到群聊,需排查群状态与安全策略。
- 先确认:机器人是否仍在群成员列表中,Webhook 地址是否复制完整。
- 先处理:核对安全设置(关键词、签名、IP 白名单)是否与请求参数一致。
- 再验证:使用简单文本测试发送,排除内容风控导致的 silent drop。
快速处理思路
由于钉钉机器人通过 HTTP Webhook 通信,没有本地命令可直接修复,建议按以下逻辑快速止损:
1. 检查群聊设置,确认机器人未被管理员移除或禁用。
2. 核对代码中的 Webhook URL,确保 access_token 没有过期或复制错误。
3. 临时关闭安全设置中的关键词或签名验证,测试是否为配置 mismatch 导致。
为什么会这样
接口返回 HTTP 200 且 errcode 为 0 仅表示钉钉网关接收了请求,后续投递受群状态和内容策略控制。
钉钉机器人消息流程分为“接入鉴权”和“消息投递”两个阶段。当安全设置(如关键词匹配、签名校验)未通过时,部分场景下接口可能仍返回成功但拦截消息,或者机器人已被移出群聊导致投递目标不存在。此外,消息内容若包含敏感词或格式不符合规范,可能触发内容安全策略被静默过滤,不会返回明确错误码。
分步处理
按以下顺序排查,每步操作后观察群内变化:
步骤 1:检查机器人状态
进入钉钉群设置,查看“智能群助手”列表。确认目标机器人是否在列表中且状态正常。若机器人缺失,需重新添加并获取新的 Webhook 地址。
步骤 2:核对安全设置
登录钉钉开放平台或群机器人设置页面,查看当前安全策略:
- 关键词:消息内容必须包含设置的关键词,否则拦截。
- 签名:请求需携带 timestamp 和 sign 参数,使用 HMAC-SHA256 算法计算。
- IP 白名单:发送请求的服务器 IP 必须在白名单内。
若不确定配置,可暂时改为“自定义关键词”并设置一个简单词(如“测试”),在消息体中包含该词。
步骤 3:检查请求参数
确认代码中发送的 JSON 格式正确。例如 text 类型消息需包含 msgtype 和 text 字段:
{"msgtype": "text", "text": {"content": "测试消息"}}
若使用签名安全设置,确保 URL 中拼接了 timestamp 和 sign 参数,且签名算法与文档一致。
步骤 4:排查频率限制
若短时间内发送大量消息,可能触发频控。建议增加发送间隔,或合并消息内容。
怎么验证是否生效
完成上述调整后,通过以下方式验证:
1. 手动触发一次测试消息发送,观察群内是否在 1-2 秒内出现消息。
2. 查看应用服务器日志,确认接口响应 body 中 errcode 为 0 且 errmsg 为 ok。
3. 若仍无消息,更换一个全新的群和机器人进行测试,排除特定群配置问题。
常见坑
1. Webhook 地址复制时多带了空格或换行符,导致 token 无效。
2. 签名计算时使用了错误的编码格式,必须使用 UTF-8 编码。
3. 关键词匹配是严格包含关系,消息内容必须完整包含设置的关键词。
4. 服务器出口 IP 变动后,未更新 IP 白名单配置。
常见问题
接口返回 errcode 0 但群里没消息,是 Bug 吗?
不是 Bug,通常是内容风控或安全策略拦截。接口成功仅代表请求被接收,后续投递受群规则和content 安全策略影响,建议检查内容是否含敏感词。
签名验证失败会返回错误码吗?
通常会返回错误码。若签名校验不通过,钉钉接口一般会返回具体的 error code,但若配置混乱可能导致静默失败,建议优先检查签名算法实现。
机器人被移出群聊后 Webhook 会失效吗?
会失效。机器人被移除后,原有的 Webhook 地址无法再向该群发送消息,需重新添加机器人并获取新地址。
参考来源
1. 钉钉开放平台 - 自定义机器人接入文档
2. 钉钉开放平台 - 消息发送频率与安全设置说明