前言
嗨,大家好,老掘友们、新掘友们大家又见面了。近期在掘金中看到一句很喜欢的话,分享给大家“创作学习持续成长”。作为IT行业的从业者,我们更应该将学习过程中遇到的问题和困难记录下来,方便自己查阅,也能帮助其他开发者少走弯路。好了,步入正题。本文将介绍Spring Boot快速接入钉钉群机器人,使使用着能够快速上手开发。
产生背景
科技向实,万物生长。随着科技的进步,很多的办公软件已经涌入到我们的工作生活中。近期在和产品、业务沟通需求中,有某些业务场景,需要在特定条件下触发之后,及时为业务推送消息。当然重新开发是费时费力的,时间也是不允许的,经过不同方案的探讨和比对,最终选择了使用钉钉群智能机器人的方式来快速实现业务场景。主要适用场景:企业内部有较多系统支撑着公司的核心业务流程,CRM系统、交易系统、监控报警系统等等。通过钉钉的自定义机器人,可以将这些系统事件同步到钉钉的聊天群。
快速开始
了解钉钉机器人
在使用一个新的产品和技术之前,首先要了解它的作用和功能,以下是本次使用的开放平台和开放文档的地址,点击直达。
通过简单了解之后,钉钉机器人是独立存在的一个应用类型,可以开箱即用,也可以进行二次开发,无需和微应用或者群等场景进行强制绑定。
钉钉机器人支持基础消息、互动卡片消息,其中基础消息又包含:文本、链接消息、ActionCard、FeedCard类型、Markdown类型等。一个群组中支持使用多个不同类型的机器人。
新建群
由于本次接入的是钉钉群聊机器人,因此首先需要建立一个三人的群组。登录钉钉之后,点击+发起群聊。
选择三位好友之后,点击创建发起群聊。
可以在看到群组已经创建成功了,那么下一步就是选择添加群聊机器人了。
添加机器人
首先点击群设置,进入到群组管理设置页面
向下拉取,选择智能群助手页面,
进入智能群助手之后页面如下,可以看到添加机器人选择
进入创建机器人页面,可以最多创建10个自定义机器人,在触发机器人之后,机器人会吧消息自动推送到群中。
可以看到有很多已经集成的机器人在列表中,当然这次是我们自己创建机器人,因此选择自定义机器人。如下图中:
使用钉钉机器人API,可以将任何你需要的服务消息推送到钉钉,也可以看到预览的消息,将是接入机器人之后的样子。
下面就开始创建自己的群组机器人了,主要包含:机器人名称、基础的安全设置包含自定义关键词、自定义标签、指定ip地址等相关安全设置。本文将使用自定义关键词,触发关键词之后,自动推送群组消息。
填写完机器人名称,设置好关键字词之后,点击阅读同意,点击完成即创建完成自定义机器人。
记录api地址,下面就开始编程啦,完善自己的机器人喽。
群组中可以看到“大家好!我是 测试钉钉机器人 机器人,很高兴为你们服务。”机器人添加成功了。
开发自定义机器人
在我们使用自定义机器人时,需要注意限制频率。官方描述为:每个机器人每分钟最多发送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类型支持参数
首先我们测试发送文本文档详细。钉钉机器人支持的参数如下:
| 参数 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:text。 |
| content | String | 是 | 消息内容。 |
| atMobiles | Array | 否 | 被@人的手机号。 |
| atUserIds | Array | 否 | 被@人的用户userid。 |
| isAtAll | Boolean | 否 | 是否@所有人。 |
代码
代码如下,主要使用到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());
}
执行结果
点击运行之后,群组中已经收到钉钉机器人发送的消息。如下图。
钉钉机器人发送 Link
Link类型支持参数
首先我们测试发送Link文档详细。钉钉机器人支持的参数如下:
| 参数 | 参数类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:link。 |
| title | String | 是 | 消息标题。 |
| text | String | 是 | 消息内容。如果太长只会部分展示。 |
| messageUrl | String | 是 | 点击消息跳转的URL,打开方式如下:- 移动端,在钉钉客户端内打开 |
| picUrl | String | 否 | 图片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());
}
执行结果
执行结果如下图,点击其中的链接之后,会自动调转到掘金首页中。
钉钉机器人发送 Markdown
Markdown类型支持参数
首先我们测试发送Markdown文档详细。钉钉机器人支持的参数如下:
| 参数 | 类型 | 是否必填 | 说明 |
|---|---|---|---|
| msgtype | String | 是 | 消息类型,此时固定为:markdown。 |
| title | String | 是 | 首屏会话透出的展示内容。 |
| text | String | 是 | markdown格式的消息。 |
| atMobiles | Array | 否 | 被@人的手机号 |
| atUserIds | Array | 否 | 被@人的用户userid |
| isAtAll | Boolean | 否 | 是否@所有人。 |
Markdown支持标签
目前markdown语法支持标签如下:
标题
标题
# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题
文字加粗、斜体
文字加粗、斜体
**bold**
*italic*
链接和图片
链接
[this is a link](http://name.com)
图片

引用
>
有序和无序列表
无序列表
- 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" +
"> \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类型的机器人消息。
测试机器人整体截图,三种类型的机器人消息都发送成功。
结语
好了,以上就是Spring Boot快速接入钉钉群机器人的详细介绍,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。
作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。
我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿。