超火的钉钉自定义机器人原来是这么设置的

在这里插入图片描述

企业内部有较多系统支撑着公司的核心业务流程,譬如CRM系统、交易系统、监控报警系统等等。通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群

接入自定义机器人很简单,大概以下几步

  1. 点击群设置选择智能群助手
  2. 点击添加机器人最右边按钮选择自定义
  3. 点击添加后设置机器人对应属性

下面会详细介绍其中的步骤,尤其是设置机器人属性这一块。文末介绍了如何优化 markdown 消息类型的样式


自定义机器人


首先,我们要先创建对应的群聊,一般而言钉钉机器人创建可以分为三种方式

  1. 直接创建在开发相关人员大群里,优缺点也比较明显。优点是如果你没注意到的报警信息,有的是人告诉你;缺点就是如果机器人消息较多,就存在一种信息轰炸
  2. 每一种类型创建独立的群聊,比如 Jenkins 项目部署以及是否成功通知独立通知,Sonar 扫描报告结果独立通知,把需要关注的人员放到其关心的群聊中
  3. 最后一种也是快刀斩乱麻,把消息通知的机器人都放在一个群聊中,把相关人员都拉入

微信搜索【源码兴趣圈】,关注龙台,回复【资料】领取涵盖 GO、Netty、SpringCLoud Alibaba、Seata、开发规范、面试宝典、数据结构等电子书 or 视频学习资料!

目前我们公司使用的是第2种情况,Jenkins、Sonar、报警等通知都是独立的


创建自定义机器人

点击群设置选择智能群助手

点击添加机器人最右边按钮选择自定义

点击添加按钮即可创建钉钉自定义机器人

这一块也是创建机器人需要动脑子设置的地方,其中的参数一一介绍

机器人名字:

就是机器人的名字呗,写啥名它就叫啥


添加到群组:

指示把当前正在创建的机器人添加到哪个群聊中,一般默认都是创建到本群聊。当然,不支持添加多群聊


安全设置:

  1. 自定义关键字

    • 最多可以设置10个关键词,消息中至少包含其中1个关键词才可以发送成功

    • 例如:添加了一个自定义关键词:监控报警

    • 则这个机器人所发送的消息,必须包含 监控报警 这个词,才能发送成功

  2. 加签

    • 把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)
    • 具体加签算法参考钉钉开放平台
  3. 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
    }
}

相关参数、参数类型、是否必须以及说明如下:

参数参数类型必须说明
msgtypeString消息类型,此时固定为:text
contentString消息内容
atMobilesArray被@人的手机号(在content里添加@人的手机号)
isAtAllBoolean是否@所有人

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"
    }
}
参数参数类型必须说明
msgtypeString消息类型,此时固定为:link
titleString消息标题
textString消息内容。如果太长只会部分展示
messageUrlString点击消息跳转的URL
picUrlString图片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
      }
 }
参数类型必选说明
msgtypeString此消息类型为固定markdown
titleString首屏会话透出的展示内容
textStringmarkdown格式的消息
atMobilesArray被@人的手机号(在text内容里要有@手机号)
isAtAllBoolean是否@所有人
标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

引用
> 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": "<font color=\'#FFA500\'>[通知] </font>代码质量检测报告 \n\n --- \n\n <font color=\'#778899\' size=2>项目名称:测试 markdown 样式项目</font> \n\n <font color=\'#708090\' size=2>项目地址:[点击跳转详情](https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq)</font> \n\n <font color=\'#708090\' size=2>检测分支:master</font> \n\n <font color=\'#708090\' size=2>bug数量:</font><font color=\'#FF0000\' size=2>3</font> \n\n <font color=\'#708090\' size=2>相关人员:@15601166691</font> \n\n --- \n\n  **播报时间:2020-12-20 13:55:00**"
     },
     "at": {
          "atMobiles": [
              "15601166691"
          ],
          "isAtAll": false
      }
}

结言


文章从零到一创建了自定义机器人,分别介绍了不同的消息类型,最后基于 html 代码优化了 markdown 类型消息的样式

小伙伴的喜欢就是对我最大的支持, 如果读了文章有所收获, 希望能够 点赞、评论、关注三连!

参考文章:钉钉开放平台


推荐阅读:

  1. 【强烈推荐】1w 字,18 张图,彻底说清 springboot starter
  2. 【强烈推荐】谨慎使用 JDK 8 新特性并行流 ParallelStream
  3. 【强烈推荐】一文快速掌握 Redisson 如何实现分布式锁原理
  4. 【大厂面试真题】JDK 线程池中如何不超最大线程数快速消费任务
  5. 【大厂面试真题】JDK 线程池如何保证核心线程不被销毁

作者麻花,坐标帝都 Java 后端研发,励志成为架构师的一枚处女座程序员,专注高并发、框架底层源码、分布式等知识分享

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值