钉钉机器人消息发送失败通常是因为内容未正确转义为合法 JSON 格式,或触发了安全关键词拦截。适用场景为通过 Webhook 发送文本或 Markdown 消息,风险边界在于特殊字符未处理会导致 HTTP 400 错误。
先说结论:核心问题是 payload 不符合 JSON 规范或命中安全策略。
- 先确认内容是否包含双引号换行符
- 先处理特殊字符转义
- 再验证 HTTP 返回码
快速处理思路
优先使用编程语言自带的 JSON 库构建消息体,避免手动拼接字符串。大多数发送失败源于手动拼接时遗漏了转义字符,导致服务端解析 JSON 失败。
为什么会这样
钉钉自定义机器人接口强制要求请求体为 UTF-8 编码的合法 JSON 字符串。特殊字符如双引号、反斜杠、换行符在 JSON 中有特定含义,直接放入文本内容会破坏结构。
分步处理
第一步检查消息内容中是否包含双引号、反斜杠或换行符。第二步使用代码库进行序列化处理,例如 Python 的 json.dumps 或 Java 的 Jackson 库。第三步检查机器人安全设置,确认是否开启了关键词过滤或 IP 白名单。
怎么验证是否生效
发送请求后检查 HTTP 状态码是否为 200,且响应 body 中 errcode 字段为 0。若返回 400 或 errcode 非 0,查看 errmsg 提示的具体错误信息。
常见坑
Markdown 格式消息中混用特殊符号可能导致渲染失败。安全关键词匹配是包含匹配,内容中意外包含敏感词也会拦截发送。部分 emoji 表情在不同客户端显示不一致,但不影响发送。
常见问题
消息内容支持 emoji 吗
支持。钉钉机器人消息内容支持 UTF-8 编码的 emoji 表情,但需确保传输编码正确。
关键词过滤怎么配置
在机器人管理后台设置安全设置,选择关键词模式并添加至少一个关键词,消息内容必须包含该关键词才能发送成功。
消息长度有限制吗
有限制。文本内容长度通常限制在 20KB 以内,具体以开放平台最新文档为准,超长会被截断或拒绝。
参考来源
钉钉开放平台 - 自定义机器人接入 https://open.dingtalk.com/document/robots/custom-robot-access