Loading...
墨滴

四千岁

2021/05/15  阅读:298  主题:默认主题

搞一个只会推送消息的钉钉机器人

搞一个 钉钉机器人。

为什么说要搞一个钉钉机器人,而不是开发一个钉钉机器人呢,因为我这次介绍的这个钉钉机器人添加起来太简单了,算不上开发编程的技巧。

我们这次添加的钉钉机器人只有一个功能,就是通过钉钉机器人往钉钉群里面发送消息,不会回答消息。不会像客服机器人一样回答你的提问。该机器人主要用于定时将关键信息推送到群里面,提醒群里面的人要注意什么事情。

1 添加钉钉机器人

打开电脑版的钉钉,点击左上角的头像,再点击机器人管理。 点击 自定义 机器人 点击添加 然后,把这个钉钉机器人添加到指定的钉钉群里面,并设置一个安全关键字 注意,保存Webhook接口地址,我们就是用这个地址推送消息的。 你最好看一下 钉钉官方的 设置说明[1]。 添加完成之后,群里面就会出现机器人了。 如果忘记了Webhook接口地址或者忘记你设置的安全关键字了,可以点击机器人设置来查看这些信息 更换机器人头像和查看Webhook地址: 查看你之前自己设置的安全关键字和删除机器人 经过上面的步骤之后,群里面的机器人就添加好了。

2 调用Webhook的http地址,往群里面发送消息

要知道,你刚刚拿到的Webhook地址就是一个普通的http接口地址,我们可以直接用Postman这个工具发送一个Post请求来试一下就知道了。

我们先来跟着钉钉自定义机器人官方文档[2]。发送一条消息再说,眼见为实。

官方文档教程如下截图: 在Linux服务器上面使用curl命令发送Post请求,钉钉官方教程如下: 我的演示如下: 代码如下:

curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx' \
 -H 'Content-Type: application/json' \
 -d '{"msgtype": "text","text": {"content":"我就是我, 是不一样的烟火+你自己设置的关键字"}}'

群里面收到的消息如下: 使用Postman发送post请求,如下: 假如你的请求报文字段content中没有包含你之前设置的安全关键字,Webhook接口会报错,报错信息如下: { "errcode": 310000, "errmsg": "keywords not in content, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]" }

报错截图如下:

2.1 请求报文:消息类型及数据格式

下面的这几种消息类型及数据格式,钉钉自定义机器人官方文档[3]上面都有,你们自己去看吧,非常简单。

  • text类型

  • markdown类型 钉钉机器人官方支持markdown的语法有以下几个:

如果是连接,消息发送成功之后 this is a link 这个四个单词的颜色会变成蓝色

上图这个蓝色字体是可以点击的,点击之后会跳转到指定的url

如果是图片,消息发送成功之后,会把你消息里面的图片的url对应的图片展示出来,类似下面这种:

  • link类型 这些你们自己去官网钉钉自定义机器人官方文档[4]上面研究吧。
  • 整体跳转ActionCard类型 这些你们自己去官网钉钉自定义机器人官方文档[5]上面研究吧。
  • FeedCard类型 这些你们自己去官网钉钉自定义机器人官方文档[6]上面研究吧。

2.1 消息类型的坑

  • 发送给钉钉的消息,如果想要换行,必须使用俩个\n,像这样\n\n,一个\n不会发生换行动作。
{
     "msgtype""markdown",
     "markdown": {
         "title":"严重注意_生产环境_连接HTTP接口超时",
         "text""# **严重注意_生产环境出错了** \n\n - 负责人: @185185185 @185185185 @185185185 \n\n - 接口名字:钉钉系统\n\n - 接口地址:http:test.dingding.com/error/\n\n  - 错误类型: socketExcetio\n\n  - 耗时:404毫秒 \n\n > Talk is cheap. Show me the code,go check 关键字."
     },
      "at": {
          "atMobiles": [
              "185185185","185185185","185185185"
          ],
          "atUserIds": [
              "张三","李四","王五"
          ],
          "isAtAll"false
      }
 }
  • markdown类型消息里面的text字段和atMobiles字段里面的手机号,必须是钉钉群里面成员的手机号,如果text字段和atMobiles字段里面的手机号不在钉钉群的成员列表里面,发送出去的消息会把手机号中间4位数字加密换成*好。如下截图

出现上图这种情况说明你发送的消息里面手机号写错了,或者这个人中途退群了。

3 JAVA代码

3.1 JAVA代码也比较简单就是普通的POST类型的HTTP接口调用

首先,你要使用Java代码将需要发送给钉钉机器人Webhook接口的请求json字符串拼出来,这个我就不讲了,你可以使用阿里巴巴的fastjson来拼装,也可以使用谷歌的Gson来拼装,也可以使用Jackson来拼装。

请求报文拼装好之后,就可以使用java代码来调用钉钉机器人Webhook的http接口了。

先看一下钉钉官方推荐的JAVA代码调用方式,我个人感觉很烂,很麻烦,我是没用钉钉官方的,用钉钉官方的JAR包,自己项目里面还得引用钉钉的jar包,我擦,坚决不用,不就是一个小小的POST请求嘛! 官方代码示例如下:

官方JAVA代码示例
官方JAVA代码示例

钉钉的官方JAR包下载地址为:[7]

看下钉钉官方JAR包里面的源码是怎么发送POST请求的:

DefaultDingTalkClient类的源码
DefaultDingTalkClient类的源码
WebV2Utils类的源码
WebV2Utils类的源码
WebV2Utils类的源码
WebV2Utils类的源码

钉钉官方自己的JAR包最终也是使用JDK自带的java.net.HttpURLConnection类来发送POST请的。

建议使用Apache的jar包commons-httpclient-3.1.jar来发送这个POST请求,这个网上百度一下一大堆,用就完了。步骤非常简单:1、先写一个方法,这个方法返回一个JSON字符串。2、把这个JSON字符串、钉钉机器人的Webhook接口地址,当作参数传进你写的第二个方法,第二个方法就是利用commons-httpclient-3.1.jar这个jar包来发送POST请求,并且解析钉钉机器人的Webhook接口的返回报文就行了。

参考资料

[1]

钉钉官方设置说明: https://developers.dingtalk.com/document/app/document-upgrade-notice#/serverapi2/qf2nxq

[2]

钉钉自定义机器人官方文档: https://developers.dingtalk.com/document/app/custom-robot-access

[3]

钉钉自定义机器人官方文档: https://developers.dingtalk.com/document/app/custom-robot-access

[4]

钉钉自定义机器人官方文档: https://developers.dingtalk.com/document/app/custom-robot-access

[5]

钉钉自定义机器人官方文档: https://developers.dingtalk.com/document/app/custom-robot-access

[6]

钉钉自定义机器人官方文档: https://developers.dingtalk.com/document/app/custom-robot-access

[7]

钉钉的官方JAR包下载地址: https://developers.dingtalk.com/document/resourcedownload/download-server-sdk

四千岁

2021/05/15  阅读:298  主题:默认主题

作者介绍

四千岁