在钉钉自定义机器人 webhook 请求体中添加 at 参数即可实现@特定成员,需确保传入的手机号与成员钉钉账号一致。适用于群聊自定义机器人场景,风险在于手机号不匹配会导致@失效。
先说结论:钉钉自定义机器人通过在发送消息的 JSON 数据中配置 at 字段来实现@功能,支持手机号或用户 ID 匹配。
- 适合:企业内部群自定义 webhook 机器人,需要定向通知责任人的场景。
- 先准备:获取机器人 webhook 地址、安全设置(签名或 IP 白名单)、待@成员的钉钉绑定手机号。
- 验收:发送测试消息后,在钉钉客户端确认目标成员名字是否变蓝且收到强提醒。
命令速用版
使用 curl 命令可直接测试 webhook 连通性及@配置,替换以下参数即可执行:
curl 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "text",
"text": { "content": "测试消息@某人" },
"at": {
"mobiles": ["13800000000"],
"isAtAll": false
}
}'为什么会这样
钉钉机器人协议规定消息发送必须显式声明@对象,系统不会自动解析文本中的@符号。
自定义机器人本质是 HTTP 回调,服务端无法直接读取群成员列表,因此需要通过 at 参数传入明确的身份标识(手机号或用户 ID)。如果仅是在文本内容中写"@张三”,钉钉服务端不会将其识别为提醒指令,只会当作普通文本显示。
分步处理
按照以下步骤配置 webhook 请求体,确保参数结构正确:
- 获取机器人地址:在钉钉群设置中添加自定义机器人,复制 webhook 地址,记录 access_token。
- 配置安全设置:若开启“加签”,需计算时间戳和签名,将
timestamp和sign拼接到 webhook URL 中。 - 构造 JSON payload:在请求体根级别添加
at对象,填入mobiles数组或userIds数组。 - 发送 HTTP POST 请求:设置 Header 为
Content-Type: application/json,body 为构造好的 JSON。
怎么验证是否生效
发送消息后,观察钉钉客户端消息表现及通知栏状态。
- 视觉检查:被@的成员名字在消息气泡中显示为蓝色高亮。
- 提醒检查:被@成员的钉钉客户端会收到“特别关注”或普通消息提醒(取决于其设置),且 DING 列表可能有记录。
- 接口响应:HTTP 请求返回
errcode为 0,表示消息发送成功,但不代表@一定生效,需结合客户端表现确认。
常见坑
- 手机号不匹配:传入的手机号必须是成员在当前钉钉企业组织中绑定的手机号,隐藏手机号会导致@失败。
- 签名过期:若使用加签模式,时间戳误差不能超过 1 小时,否则接口返回安全校验失败。
- 频率限制:机器人发送消息有频率限制(通常为每分钟 20 条),高频发送会导致接口限流,@功能随之失效。
- 参数位置错误:
at参数必须与msgtype同级,放在text对象内部会导致配置不生效。
常见问题
支持@所有人吗?
支持,将 at 对象中的 isAtAll 参数设置为 true 即可,此时无需填写 mobiles 列表。
手机号隐藏了怎么@?
若成员隐藏了手机号,需使用 userIds 参数传入成员的钉钉用户 ID,或通过企业管理员查询绑定关系。
为什么返回成功但没人收到提醒?
检查成员是否开启了消息免打扰,或确认传入的手机号是否为该成员在当前组织内的主绑手机号。