【Spring Boot 快速入门】二十五、详细介绍Spring Boot快速接入钉钉群机器人

1,504 阅读8分钟

前言

  嗨,大家好,老掘友们、新掘友们大家又见面了。近期在掘金中看到一句很喜欢的话,分享给大家“创作学习持续成长”。作为IT行业的从业者,我们更应该将学习过程中遇到的问题和困难记录下来,方便自己查阅,也能帮助其他开发者少走弯路。好了,步入正题。本文将介绍Spring Boot快速接入钉钉群机器人,使使用着能够快速上手开发。

产生背景

  科技向实,万物生长。随着科技的进步,很多的办公软件已经涌入到我们的工作生活中。近期在和产品、业务沟通需求中,有某些业务场景,需要在特定条件下触发之后,及时为业务推送消息。当然重新开发是费时费力的,时间也是不允许的,经过不同方案的探讨和比对,最终选择了使用钉钉群智能机器人的方式来快速实现业务场景。主要适用场景:企业内部有较多系统支撑着公司的核心业务流程,CRM系统、交易系统、监控报警系统等等。通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群。

快速开始

了解钉钉机器人

  在使用一个新的产品和技术之前,首先要了解它的作用和功能,以下是本次使用的开放平台和开放文档的地址,点击直达。

钉钉开放平台

钉钉开放平台机器人开放文档

图片.png   通过简单了解之后,钉钉机器人是独立存在的一个应用类型,可以开箱即用,也可以进行二次开发,无需和微应用或者群等场景进行强制绑定。   钉钉机器人支持基础消息、互动卡片消息,其中基础消息又包含:文本、链接消息、ActionCard、FeedCard类型、Markdown类型等。一个群组中支持使用多个不同类型的机器人。

新建群

  由于本次接入的是钉钉群聊机器人,因此首先需要建立一个三人的群组。登录钉钉之后,点击+发起群聊。

图片.png 选择三位好友之后,点击创建发起群聊。

图片.png 可以在看到群组已经创建成功了,那么下一步就是选择添加群聊机器人了。

图片.png

添加机器人

  首先点击群设置,进入到群组管理设置页面

图片.png   向下拉取,选择智能群助手页面,

图片.png   进入智能群助手之后页面如下,可以看到添加机器人选择

图片.png    进入创建机器人页面,可以最多创建10个自定义机器人,在触发机器人之后,机器人会吧消息自动推送到群中。

图片.png   可以看到有很多已经集成的机器人在列表中,当然这次是我们自己创建机器人,因此选择自定义机器人。如下图中: 图片.png

  使用钉钉机器人API,可以将任何你需要的服务消息推送到钉钉,也可以看到预览的消息,将是接入机器人之后的样子。

图片.png   下面就开始创建自己的群组机器人了,主要包含:机器人名称、基础的安全设置包含自定义关键词、自定义标签、指定ip地址等相关安全设置。本文将使用自定义关键词,触发关键词之后,自动推送群组消息。

图片.png   填写完机器人名称,设置好关键字词之后,点击阅读同意,点击完成即创建完成自定义机器人。 图片.png   记录api地址,下面就开始编程啦,完善自己的机器人喽。 图片.png   群组中可以看到“大家好!我是 测试钉钉机器人 机器人,很高兴为你们服务。”机器人添加成功了。 图片.png

开发自定义机器人

  在我们使用自定义机器人时,需要注意限制频率。官方描述为:每个机器人每分钟最多发送20条消息到群里,如果超过20条,会限流10分钟。 合理使用机器人。   本次文章将以:Text类型、Link类型、Markdown类型三个类型方式为大家介绍。首先创建Java项目,并引入钉钉机器人的依赖:


<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibaba-dingtalk-service-sdk</artifactId>
    <version>2.0.0</version>
</dependency>

钉钉机器人发送 Text

Text类型支持参数

  首先我们测试发送文本文档详细。钉钉机器人支持的参数如下:

参数参数类型是否必填说明
msgtypeString消息类型,此时固定为:text。
contentString消息内容。
atMobilesArray被@人的手机号。
atUserIdsArray被@人的用户userid。
isAtAllBoolean是否@所有人。

代码

  代码如下,主要使用到DingTalkClient、OapiRobotSendRequest、OapiRobotSendRequest.Text、OapiRobotSendRequest.At和OapiRobotSendResponse。具体介绍如下。


public static void main(String[] args) throws Exception{
    //创建钉钉请求客户端
    DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=b976a03228b51e2f3a9**************************ce8ffa6b690d");
    //创建机器人请求
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    //指定机器人发送消息类型 为text
    request.setMsgtype("text");
    //创建发送文本内容信息
    OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
    //设置文本内容
    text.setContent("测试机器人  掘金--代码不止,掘金不停!\n" +
            "作者:小阿杰 \n" +
            "主页链接:https://juejin.cn/user/2040300414187416");
    request.setText(text);
    OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
    //通过手机号指定艾特的用户
    at.setAtMobiles(Arrays.asList("1888888*****"));
    // isAtAll是否艾特全部,true 为艾特全部
    at.setIsAtAll(true);
    //指定艾特的用户人信息
    at.setAtUserIds(Arrays.asList("109929","32099"));
    request.setAt(at);
    OapiRobotSendResponse response = client.execute(request);
    log.info("钉钉消息返回结果为:{}",response.isSuccess());
}

执行结果

  点击运行之后,群组中已经收到钉钉机器人发送的消息。如下图。 图片.png

图片.png

钉钉机器人发送 Link

Link类型支持参数

  首先我们测试发送Link文档详细。钉钉机器人支持的参数如下:

参数参数类型是否必填说明
msgtypeString消息类型,此时固定为:link。
titleString消息标题。
textString消息内容。如果太长只会部分展示。
messageUrlString点击消息跳转的URL,打开方式如下:- 移动端,在钉钉客户端内打开
picUrlString图片URL。

代码及详细介绍

  钉钉机器人发送 Link的详细描述见代码中即可。


public static void main(String[] args) throws Exception{
    //创建钉钉请求客户端
    DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=b976a03228b51e2f3a92a30b7bd60f7****************ce8ffa6b690d");
    //创建机器人请求
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    //指定机器人发送消息类型 为link
    request.setMsgtype("link");
    OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();
    //设置跳转链接
    link.setMessageUrl("https://juejin.cn/");
    //设置图片连接
    link.setPicUrl("https://lf3-cdn-tos.bytescm.com/obj/static/xitu_juejin_web/e08da34488b114bd4c665ba2fa520a31.svg");
    //设置标题
    link.setTitle("掘金--代码不止,掘金不停");
    //设置描述
    link.setText("测试机器人--作者小阿杰,测试机器人。主页链接:https://juejin.cn/user/2040300414187416");
    request.setLink(link);
    OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
    //通过手机号指定艾特的用户
    at.setAtMobiles(Arrays.asList("1888888*****"));
    // isAtAll是否艾特全部,true 为艾特全部
    at.setIsAtAll(true);
    //指定艾特的用户人信息
    at.setAtUserIds(Arrays.asList("666666","888888"));
    request.setAt(at);
    OapiRobotSendResponse response = client.execute(request);
    log.info("钉钉消息返回结果为:{}",response.isSuccess());
}

执行结果

  执行结果如下图,点击其中的链接之后,会自动调转到掘金首页中。 图片.png

钉钉机器人发送 Markdown

Markdown类型支持参数

  首先我们测试发送Markdown文档详细。钉钉机器人支持的参数如下:

参数类型是否必填说明
msgtypeString消息类型,此时固定为:markdown。
titleString首屏会话透出的展示内容。
textStringmarkdown格式的消息。
atMobilesArray被@人的手机号
atUserIdsArray被@人的用户userid
isAtAllBoolean是否@所有人。

Markdown支持标签

  目前markdown语法支持标签如下:

标题

标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

文字加粗、斜体
文字加粗、斜体
**bold**
*italic*
链接和图片
链接
[this is a link](http://name.com)

图片
![](http://name.com/pic.jpg)


引用
>
有序和无序列表
无序列表
- item1
- item2

有序列表
1. item1
2. item2

代码及详细介绍

  Markdown文档详细的介绍及使用方法如下:


public static void main(String[] args) throws Exception{
    //创建钉钉请求客户端
    DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=b976a03228b51e2f3a92a30b7bd60f7****************ce8ffa6b690d");
    //创建机器人请求
    OapiRobotSendRequest request = new OapiRobotSendRequest();
    //指定机器人发送消息类型 为Markdown
    request.setMsgtype("markdown");
    OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
    //设置标题
    markdown.setTitle("掘金--代码不止,掘金不停");
    //设置内容  支持Markdown标签
    markdown.setText("#### 测试机器人 \n" +
            "## 掘金--代码不止,掘金不停\n"+
            "> 作者:小阿杰\n\n" +
            "> ![签约](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5e9e005411d4469ba4a5a782ac746d9a~tplv-k3u1fbpfcp-zoom-1.image)\n"  +
            "> ###### 主页链接:https://juejin.cn/user/2040300414187416 \n");
    request.setMarkdown(markdown);
    OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
    //通过手机号指定艾特的用户
    at.setAtMobiles(Arrays.asList("1888888*****"));
    // isAtAll是否艾特全部,true 为艾特全部
    at.setIsAtAll(true);
    //指定艾特的用户人信息
    at.setAtUserIds(Arrays.asList("666666","888888"));
    request.setAt(at);
    OapiRobotSendResponse response = client.execute(request);
    log.info("钉钉消息返回结果为:{}",response.isSuccess());
}

执行结果

  如下图是markdown类型的机器人消息。 图片.png

  测试机器人整体截图,三种类型的机器人消息都发送成功。

图片.png

结语

  好了,以上就是Spring Boot快速接入钉钉群机器人的详细介绍,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。

我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿