钉钉群聊机器人
通过钉钉群自定义机器人(Webhook)将告警推送到钉钉群,新人可按步骤直接完成配置。
概述
钉钉群聊机器人通知媒介,用于把夜莺产生的告警事件通过钉钉群自定义机器人(Webhook)推送到指定的钉钉群。
- 适用场景:希望告警以 Markdown 消息形式发到钉钉群,并支持 @ 指定成员。
- 你需要准备:一个钉钉群,以及对该群有"添加机器人"权限。
- 整个配置分三步:①在钉钉群里添加机器人 → ②在夜莺新建钉钉通知媒介 → ③在通知规则里填入 access_token。
如果你已经熟悉钉钉开放平台的"企业内部应用"机制,并且需要把告警发到单聊或者支持告警截图,请参考 钉钉应用。本文只讲最常用、最简单的群机器人方式。
第一步:在钉钉群里添加自定义机器人
-
在目标钉钉群中:群设置 → 智能群助手 → 添加机器人 → 自定义(自定义机器人)。
-
设置机器人名称(例如
夜莺告警)和头像,点击"下一步"。 -
安全设置(至少选一种,推荐"自定义关键词", 夜莺当前只支持这两种):
方式 说明 适用场景 自定义关键词 机器人只接受包含指定关键词的消息,最多 10 个 推荐,最简单。建议填写告警规则名称里一定会出现的词,比如 告警或n9eIP 白名单 只接受指定 IP 段发来的请求 适合部署在固定公网出口的场景 -
勾选"我已阅读并同意《机器人服务及免责条款》",点击"完成"。
-
在弹出的页面中复制 Webhook 地址,形如:
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx其中
access_token=后面那一串就是后面夜莺里要填的 Access Token,先保存好。
钉钉官方限制:单个机器人每分钟最多发送 20 条消息,超过会被限流。如果告警量非常大,建议把告警拆分到多个群/多个机器人,或者在通知规则里配置合理的收敛策略。
第二步:在夜莺新建钉钉通知媒介
-
登录夜莺 → 左侧菜单 通知 → 通知媒介,进入通知媒介列表页。
-
在左侧的媒介类型面板中点击 钉钉,进入新建页面(对应 URL
/notification-channels/add?ident=dingtalk)。
-
填写基础信息并保存,绝大部分字段系统已经预置好,只需要改一下"名称":

区块 字段 是否需要改 说明 基础配置 名称 需要 例如 钉钉群机器人,在通知规则里选媒介时看到的就是这个名字基础配置 启用 保持开启 关闭后该媒介不会被发送 变量配置 联系方式 可不填 用于 @ 指定用户,选择后会把用户的"手机号"注入到消息体中(需要在"用户管理"里给用户配置手机号) 变量配置 参数配置 保持默认,不要删 已预置 access_token、bot_name两个参数,真正的 Token 在第三步通知规则里填HTTP 配置 URL 保持默认 https://oapi.dingtalk.com/robot/sendHTTP 配置 请求方法 POST钉钉 Webhook 只接受 POST HTTP 配置 请求头 Content-Type: application/json默认已填好 -
继续向下可以看到"请求参数"和"请求体",这两段是钉钉发送的核心逻辑,保持默认即可:

-
请求参数 里预置了
access_token = {{$params.access_token}},表示真正的 Token 来自于通知规则里填的access_token参数; -
请求体 已预置成钉钉 Markdown 消息格式:
{ "msgtype": "markdown", "markdown": { "title": "{{$tpl.title}}", "text": "{{$tpl.content}}\n{{batchContactsAts $sendtos}}" }, "at": { "atMobiles": {{batchContactsJsonMarshal $sendtos}} } }其中
{{$tpl.title}}、{{$tpl.content}}来自"消息模板"里名为Dingtalk的模板,{{$sendtos}}是需要 @ 的联系方式列表(一般是手机号)。
-
-
点击左下角 保存,一条类型为"钉钉"的通知媒介就建好了。
说明:夜莺 v8 已经不再像旧版那样在媒介本身存 Token,同一个钉钉媒介可以被多个群/多个机器人复用,每个通知规则填自己的
access_token就行。
第三步:在通知规则里填入 access_token
钉钉机器人的 Webhook 地址里带的那段 access_token,在通知规则里填:
-
左侧菜单 通知 → 通知规则 → 新增(或编辑已有规则)。
-
在"通知配置"区域:

- 通知媒介:选择你刚才创建的钉钉媒介;
- 消息模板:选择
Dingtalk(系统自带,如果没有,请到"消息模板"里导入默认模板); - Access Token:粘贴第一步从钉钉拿到的 Token(只填
access_token=后面那一串,不要带 URL); - Bot Name:可选,填一个方便自己辨识的名字,比如
夜莺监控; - 适用级别 / 适用时段 / 适用标签:按需过滤要推送的事件。
-
保存后,点击"通知测试"即可发送一条测试消息,正常情况下钉钉群里会立刻收到一条 Markdown 告警。
一个钉钉媒介 + 多个机器人
如果不同业务线希望推送到不同的群,无需新建媒介,只要在"通知规则"里新增一条规则、填写不同的 access_token 即可。
常见问题
Q1:提示"keywords not in content"(关键词不匹配)?
A:钉钉机器人启用了"自定义关键词"安全策略,但告警标题/内容里没有出现任一关键词。解决办法:把你配的关键词放到告警规则名称里,或在钉钉机器人里增加更宽松的关键词(如 告警)。
Q2:提示"sign not match"(签名错误)?
A:钉钉机器人选了"加签"模式,而夜莺默认发送不带 sign/timestamp 参数。建议改用"自定义关键词"方式;如果一定要用加签,请在通知规则的 access_token 里直接填完整的带签名的 URL(以 https://oapi.dingtalk.com/robot/send?access_token=xxx×tamp=yyy&sign=zzz 形式),或在夜莺消息模板中手工拼接签名(进阶用法)。
Q3:收到消息但 @ 没生效?
A:钉钉只会根据消息里 atMobiles 的手机号判断是否 @,且该手机号必须是群里成员。请在夜莺"用户管理"里给相关用户配置好手机号,并在通知媒介的"变量配置 → 联系方式"中选择对应的用户字段。
Q4:消息太多被限流?
A:钉钉官方限制单机器人 20 条/分钟。建议:
- 开启告警收敛/告警聚合;
- 按业务拆分到多个群;
- 仅把一级/二级告警发到钉钉,三级告警改用邮件等异步渠道。
Q5:想直接在 access_token 字段里填完整 URL 行吗?
A:可以。系统对 access_token 的取值做了兼容——如果填写的值以 http:// 或 https:// 开头,会当作完整 Webhook 地址直接发送;否则会拼成 https://oapi.dingtalk.com/robot/send?access_token=<你填的值>。