钉钉机器人开启关键词安全设置后,发送的消息内容必须包含至少一个设定的关键词,否则接口会返回失败,适合用于防止机器人被滥用或误调用。
先说结论:关键词匹配是钉钉自定义机器人的一种基础安全过滤机制,开启后消息体必须命中关键词才能送达。
- 先判断:确认业务代码中发送的消息内容是否固定包含特定标识。
- 优先做:在机器人设置页面添加关键词,并同步更新发送逻辑。
- 再验证:通过接口发送测试消息,确认群内是否收到且接口返回成功。
快速处理思路
配置主要在钉钉群管理后台完成,代码侧需配合调整消息内容。核心流程如下:
- 进入钉钉群设置,找到已添加的自定义机器人。
- 点击机器人头像或设置入口,进入“安全设置”页面。
- 勾选“关键词”选项,添加至少一个关键词并保存。
- 修改你的发送程序,确保消息正文中包含该关键词。
为什么会这样
钉钉自定义机器人通过 Webhook 地址接收消息,如果不加限制,任何拿到该地址的人都能向群内发送消息。关键词匹配是一种简单的身份验证方式,相当于约定一个“暗号”。只有当 POST 请求的内容中包含这个“暗号”时,钉钉服务器才会放行消息,否则直接拦截并返回错误。这种机制主要用于防止 Webhook 地址泄露后导致的垃圾信息骚扰。
分步处理
1. 确认当前安全设置状态
在钉钉 PC 端或移动端进入群聊,点击右上角设置,找到“智能群助手”或机器人列表。查看目标机器人的安全设置状态,确认是否已开启关键词匹配。如果未开启,建议根据业务敏感度选择开启关键词或签名验证。
2. 设置关键词
在安全设置页面选择“关键词”,输入框内填入你希望消息中包含的文字。官方限制最多可设置 10 个关键词,具体以页面提示为准。建议设置具有业务特征的词,例如“报警”、“通知”、“部署完成”。
3. 修改发送代码
找到调用 Webhook 的代码位置,检查 message 内容。确保发送的 JSON payload 中的 text 或 markdown 内容里完整包含设定的关键词。例如关键词设为“监控”,则消息内容必须包含“监控”二字。
以下是包含关键词的请求示例:
cURL 示例:
curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "text",
"text": {
"content": "【监控】服务器 CPU 使用率超过 90%"
}
}'Python 示例:
import requests
import json
url = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
headers = {'Content-Type': 'application/json'}
# 确保 content 中包含设置的关键词,例如"监控"
data = {
"msgtype": "text",
"text": {
"content": "【监控】服务器 CPU 使用率超过 90%"
}
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.text)4. 保存配置
点击保存后,设置立即生效。此时旧的不含关键词的消息发送请求将会失败,需确保代码已同步更新后再保存,以免中断正常通知。
怎么验证是否生效
1. 接口响应检查
发送一条包含关键词的测试消息,检查 HTTP 响应状态码。成功时通常返回 200 且 body 中包含 errcode 为 0 的 JSON 数据。若未包含关键词,接口会返回错误码(如 310002 等),提示关键词不匹配。
错误响应示例:
{
"errcode": 310002,
"errmsg": "keyword not match"
}2. 群消息观察
直接观察钉钉群内是否收到测试消息。如果配置生效且内容匹配,消息会正常显示;如果内容不匹配,群内无消息,但发送端会收到接口报错。
3. 日志确认
查看应用服务器的发送日志,确认是否有因关键词匹配失败导致的重试或报错记录。
常见坑
1. 关键词过于简单
避免设置单个常用字(如“了”、“的”),这可能导致安全机制形同虚设,也无法有效过滤误发。
2. 大小写敏感问题
关键词匹配严格区分大小写。如果设定了"Error",发送"error"可能无法命中。建议统一使用英文大写或中文关键词以减少此类问题。
3. 修改后未同步代码
在后台修改关键词后,如果忘记更新发送代码中的内容,会导致所有通知发送失败。建议先在测试群验证后再同步到生产环境。
4. 内容长度限制
钉钉机器人消息内容本身有长度限制,关键词会占用字符空间。虽然关键词本身不长,但需注意整体消息不要超出平台限制,否则即使关键词匹配也会发送失败。
参考来源
- 钉钉开放平台 - 自定义机器人接入文档,URL: https://open.dingtalk.com/document/robots/custom-robot-access
- 钉钉开放平台 - 安全设置说明,URL: https://open.dingtalk.com/document/robots/security-settings