超火的钉钉群聊机器人原来这么设置的
作者 l 马称
来源 l 源码兴趣圈(ID:machencoding)
企业内部有较多系统支撑着公司的核心业务流程,譬如 CRM系统、交易系统、监控报警系统 等等。通过钉钉的自定义机器人,可以将这些 系统事件同步到钉钉群聊
接入自定义机器人很简单,大概以下几步
点击群设置选择智能群助手 点击添加机器人最右边按钮选择自定义 点击添加后设置机器人对应属性
下面会详细介绍其中的步骤,尤其是 设置机器人属性这一块
自定义机器人
首先,我们要先创建对应的群聊,一般而言钉钉机器人创建可以分为三种方式
直接创建在开发相关人员大群里,优缺点也比较明显。优点是 如果你没注意到的报警信息,有的是人告诉你;缺点就是如果机器人消息较多,就存在一种信息轰炸 每一种类型创建独立的群聊,比如 Jenkins 项目部署以及是否成功通知独立通知,Sonar 扫描报告结果独立通知,把需要 关注的人员放到其关心的群聊中 最后一种也是快刀斩乱麻,把消息通知的机器人都放在一个群聊中,把相关人员都拉入
目前我们公司使用的是第2种情况,Jenkins、Sonar、报警等通知都是独立的
创建自定义机器人
点击群设置选择智能群助手
点击添加机器人最右边按钮选择自定义
点击添加按钮即可创建钉钉自定义机器人
这一块也是创建机器人需要动脑子设置的地方,其中的参数一一介绍
机器人名字:
就是机器人的名字呗,写啥名它就叫啥
添加到群组:
指示把当前正在创建的机器人添加到哪个群聊中,一般默认都是创建到本群聊。当然,不支持添加多群聊
安全设置:
自定义关键字
最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功
例如:添加了一个自定义关键词:监控报警
则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功
加签
把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集) 具体加签算法参考钉钉开放平台 IP地址(段)
设定后,只有来自IP地址范围内的请求才会被正常处理。支持两种设置方式:IP、IP段,暂不支持IPv6地址白名单 具体设置方式参考钉钉开放平台
因为公司内部使用,webhook 地址不会泄漏,所以我一般使用都是自定义关键字耍。设置完成后创建自定义机器人
如果机密、安全性较强,建议设置加签或者 IP 地址段的形式
设置完成会进入到一个创建成功页面,最为重要的 webhook 地址一定要保存好,不要发布在外部网站上,泄漏有安全风险。如果不小心 webhook 泄漏了,也可以通过 重置 webhook 的机制避免问题
wenhook 也是我们向钉钉自定义机器人发送消息的机制,下面会详细说明
忘记介绍了最个性化的一步,那就是钉钉的自定义机器人可以设置头像,想想 彭于晏、吴彦祖 亦或者 范冰冰、林允儿 头像给你发消息,一顿激动...
测试机器人
因为是测试使用,所以设置的自定义关键词,如果消息中包含 消息、通知 即可发送成功,耍一耍试试
因为是测试,发送一条 text 类型消息,简单点。网址 url 直接设置为自己创建机器人的 webhook 地址
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "发送消息:我就是我, 是不一样的烟火"}}'
请求会有调用成功与否通知结果,查看返回code是0, 证明发送成功
{"errcode":0,"errmsg":"ok"}
继而查看钉钉机器人,发送消息成功
消息发送支持不同客户端调用,PHP、Go、Python、Java 等,只要能发起网络调用都可以
消息类型
text 类型
text 支持发送简单的文本,以及对应 @ 相关人员功能,对于我这种样式至上的人来说,是不会选择的
{
"msgtype": "text",
"text": {
"content": "我就是我, 是不一样的烟火@156xxxx8827"
},
"at": {
"atMobiles": [
"156xxxx8827",
"189xxxx8325"
],
"isAtAll": false
}
}
相关参数、参数类型、是否必须以及说明如下:
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
msgtype | String | 是 | 消息类型,此时固定为:text |
content | String | 是 | 消息内容 |
atMobiles | Array | 否 | 被@人的手机号(在content里添加@人的手机号) |
isAtAll | Boolean | 否 | 是否@所有人 |
link 类型
link 类型更像是一种文章转发或是报告地址通知,比如说:通过抓取某网站排名前五名的文章或视频地址,通过钉钉发送
接下来就通过postman 测试
{
"msgtype": "link",
"link": {
"text": "这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林",
"title": "时代的火车向前开",
"picUrl": "",
"messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"
}
}
参数 | 参数类型 | 必须 | 说明 |
---|---|---|---|
msgtype | String | 是 | 消息类型,此时固定为:link |
title | String | 是 | 消息标题 |
text | String | 是 | 消息内容。如果太长只会部分展示 |
messageUrl | String | 是 | 点击消息跳转的URL |
picUrl | String | 否 | 图片URL |
url 就是我们钉钉机器人上的 webhook 地址
效果图如下:
markdown 类型
这个需要着重介绍,因为 markdown 类型是我使用最多的格式。不仅样式美观,而且其功能也强大
下面这些请求体消息就完全按照开放平台走了,如果发现发送不成功,可以添加消息关键字
{
"msgtype": "markdown",
"markdown": {
"title":"杭州天气",
"text": "#### 杭州天气 @150XXXXXXXX \n> 9度,西北风1级,空气良89,相对温度73%\n> ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n> ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"
},
"at": {
"atMobiles": [
"150XXXXXXXX"
],
"isAtAll": false
}
}
参数 | 类型 | 必选 | 说明 |
---|---|---|---|
msgtype | String | 是 | 此消息类型为固定markdown |
title | String | 是 | 首屏会话透出的展示内容 |
text | String | 是 | markdown格式的消息 |
atMobiles | Array | 否 | 被@人的手机号(在text内容里要有@手机号) |
isAtAll | Boolean | 否 | 是否@所有人 |
标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
引用
> A man who stands for nothing will fall for anything.
文字加粗、斜体
**bold**
*italic*
链接
[this is a link](http://name.com)
图片
![](http://name.com/pic.jpg)
无序列表
- item1
- item2
有序列表
1. item1
2. item2
钉钉自定义机器人支持的样式远不止这些,下面会详细说明
还有一点就是markdown类型的消息,换行符 \n 有时不好使,需要两个换行符 \n\n 才可以,大家注意下就行
......
ActionCard、FeedCard 类型作者用到的不多,自行参考钉钉开放平台吧
markdown 个性化样式
官网展示的markdown样式只是基本样式,而我们如果按照默认的样式展示,未免有点太过单调。比如,以下方消息体为例
{
"msgtype": "markdown",
"markdown": {
"title":"代码质量检测报告",
"text": "### 代码质量检测报告 \n\n 项目名称:测试markdown样式项目 \n\n 项目地址:[点击跳转详情](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq) \n\n 检测分支:master \n\n bug数量:3 \n\n 相关人员:@马称 \n\n **播报时间:2020-12-20 13:55:00**"
}
}
最早玩钉钉自定义机器人,真的有被丑到,虽然功能是完整无缺,但是强迫症的我还是发现了另一种途径
通过 html 代码更改了下样式,效果看着好看了不少
{
"msgtype": "markdown",
"markdown": {
"title":"代码质量检测报告",
"text": "[通知] 代码质量检测报告 \n\n --- \n\n 项目名称:测试 markdown 样式项目 \n\n 项目地址:[点击跳转详情](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq) \n\n 检测分支:master \n\n bug数量:3 \n\n 相关人员:@15601166691 \n\n --- \n\n **播报时间:2020-12-20 13:55:00**"
},
"at": {
"atMobiles": [
"15601166691"
],
"isAtAll": false
}
}
结言
文章从零到一创建了自定义机器人,分别介绍了不同的消息类型,最后基于 html 代码优化了 markdown 类型消息的样式
小伙伴的喜欢就是对我最大的支持, 如果读了文章有所收获, 希望能够 点赞、评论、关注三连!
参考文章:
钉钉开放平台:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
END
有热门推荐?
1. Java 项目权威排名:Nacos 未上版,Gradle 排名第二,Maven 排名 28
最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:点“在看”,关注公众号并回复 Java 领取,更多内容陆续奉上。
文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)