钉钉机器人自定义关键词匹配规则失效了?消息为什么发不出去?

文章导读
大多数情况下,这是因为消息内容里没有包含设定的关键词,或者机器人安全设置被改成了“加签”但代码没跟着改。
📋 目录
  1. 快速验证:使用 curl 命令测试
  2. 代码示例:Python 发送带关键词消息
  3. 为什么失效
  4. 分步处理
  5. 怎么验证是否生效
  6. 常见坑
A A

大多数情况下,这是因为消息内容里没有包含设定的关键词,或者机器人安全设置被改成了“加签”但代码没跟着改。

先说结论:钉钉自定义机器人的安全设置是“三选一”机制,如果选了关键词,发送的消息正文里必须包含该关键词,否则会被拦截。

  • 先确认:登录钉钉 PC 端查看群机器人安全设置当前选的是“关键词”、“IP 白名单”还是“加签”。
  • 先处理:确保发送的 JSON payload 中 text 或 markdown 内容里完整包含设定的关键词。
  • 再验证:发送测试消息,检查 HTTP 响应状态码及钉钉群内是否实际收到消息。

快速验证:使用 curl 命令测试

在本地终端使用 curl 命令可以直接验证 webhook 和关键词配置,无需编写代码:

钉钉机器人自定义关键词匹配规则失效了?消息为什么发不出去?
curl "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d "{\"msgtype\":\"text\",\"text\":{\"content\":\"关键词:测试消息\"}}"

YOUR_TOKEN 替换为你的实际 accessToken,将“关键词”替换为后台设置的具体词。如果返回 errcode: 0 且群内收到消息,说明配置无误。

代码示例:Python 发送带关键词消息

以下是 Python 请求示例,注意如何在内容中动态插入关键词:

钉钉机器人自定义关键词匹配规则失效了?消息为什么发不出去?
import requests
import json

webhook = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
keyword = "报警"  # 必须与后台设置完全一致
content = f"{keyword}:服务器 CPU 使用率超过 90%"

headers = {"Content-Type": "application/json"}
data = {
    "msgtype": "text",
    "text": {
        "content": content
    }
}

response = requests.post(webhook, headers=headers, data=json.dumps(data))
print(response.json())

为什么失效

钉钉开放平台为了防范恶意调用,要求自定义机器人 webhook 必须配置安全设置。系统提供了三种互斥的验证方式:关键词、IP 白名单、加签。

钉钉机器人自定义关键词匹配规则失效了?消息为什么发不出去?

当你选择“关键词”时,钉钉服务器接收到请求后,会解析消息内容。如果内容字符串中不包含你预设的关键词,服务器会直接拒绝发送,即使你的 HTTP 请求本身是成功的。很多开发者容易忽略的是,安全设置在后台修改后,代码端如果没有同步调整(比如从关键词改成了加签,但代码还在发纯文本),消息就会发不出去。

分步处理

  1. 核对安全设置类型
    在钉钉群机器人设置页面,确认安全设置选项。如果是“关键词”,记下具体的词;如果是“加签”,需要拿到 Secret。
  2. 检查请求内容
    查看你的代码中构造的 JSON 数据。如果是关键词模式,确保 text 字段或 markdown 字段的内容里完整包含设定的关键词。关键词是 substring 匹配,不需要完全相等,但必须连续且字符一致。
  3. 检查请求头与地址
    确认 webhook URL 没有多余空格。如果是加签模式,需要在请求参数或 headers 中正确携带 timestamp 和 sign,关键词模式则不需要。
  4. 隔离测试
    建议在测试群聊中关闭安全设置进行验证,生产群请勿随意关闭。如果能发送,说明就是安全验证环节的问题。

怎么验证是否生效

发送消息后,通过以下两点判断是否成功:

  • 业务响应码:重点检查返回 JSON 中的 errcode 是否为 0,而非仅看 HTTP 状态码。HTTP 200 仅表示请求到达,不代表业务逻辑成功。
  • 错误信息:如果 errcode 非 0,通常会提示具体的错误原因,如“关键词不匹配”。
  • 群消息表现:最直接的标准是钉钉群内是否出现了机器人头像和消息内容。

常见坑

  • 关键词匹配规则:关键词必须完全匹配,注意不要混入空格或特殊不可见字符。中文字符不存在大小写敏感问题,但英文关键词区分大小写。
  • 内容长度限制:消息内容过长可能会被截断,导致关键词被切掉,从而匹配失败。
  • 频率限制:机器人发送消息有频率限制,短时间内大量发送会被限流,表现为偶尔发不出去,这与关键词无关,但现象相似。
  • 混合使用验证:后台只能选一种安全设置。不要试图同时满足关键词和加签,代码只需匹配当前后台选中的那一种。