钉钉通知
本文讲实现Java代码调用钉钉机器人API,发送指定告警消息的效果,以满足用户对于系统的实时监控。
API:https://open.dingtalk.com/document/orgapp/custom-robots-send-group-messages
每个机器人每分钟最多发送20条消息到群里,如果超过20条,会限流10分钟。
重要
如果有大量发消息的场景(譬如系统监控报警)可以将这些信息进行整合,通过markdown消息以摘要的形式发送到群
1.创建钉钉机器人
创建告警群聊
就拉一个普通群聊就可以
护士站对接群
普通群
群成员4人
设置群身份
创建机器人
●群设置选择机器人
群设置
消息免打扰
群管理
泊舟
群权限相关设置
群主
标签
普通群
群类型
普通群无组织归属,推荐升级为内部群等其他类型,功能更丰富,
安全更有保障.
机器人
AI实时翻译
清空聊天记录
退出群聊
解散该群
机器人管理
小钉
钉钉官方机器人,提供丰富的技能
已开启的技能
投票提醒
日程提醒
添加机器人
十
多款丰富的精选机器人
●选择自定义机器人
极狐
GITLAB
TRAVIS
JIRA
极狐GITLAB
GITHUB
基于GIT的代码托管服
基于ROR的开源代码
出色的项目与事务跟
出色的项目与事务跟
托管软件
踪工具
踪工具
务
自定义
TRELLO
通过WEBHOOK接入自
实时的卡片墙,管理
定义服务
任何事情
企业机器人
阿里云开
-阿里云
开发者社区
发者社区
训练营
训练营BOT
平三勇
阿里云开发者
●定义机器人相关信息,重点关注关键词
取个名
护士站告警小瓦力
机器人名字:
护士站对接群
添加到群组:
异常消息关键词,完全是用户自定义,只要你在发送消息中有这些关键词,就可以发送到群里
安全设置
自定义关键词
说明文档
告警
这里我模拟了四个
失败
异常
限流
保存Webhook
1.添加机器人Y
2.设置WEBHOOK,点击设置说明查看如何配置以使机器人生效
HTTPS://OAPI.DINGTALK.COM/ROBOT/SEND?ACCESS TOK
WEBHOOK:
复制
*请保管好此WEBHOOK地址,不要公布在外部网站上,泄露有安全风险
使用WEBHOOK 地址,向钉群推送消息
非常重要,是发送必须的参数
完成
设置说明
2.PostMan测试发送API
基于官方提供的API,我们可以做下述测试
官方请求示例
请求示例(HTTP)
●下面的token需要替换成webhook中的地址
请求正文
●下面消息类型支持多种,通过msgtype声明你要哪种
●at,标识群里@哪些人,如果isAtAll就标识@群里所有人,@atMobiles标识指定手机号,其余参数同理
测试@所有人
SEND
POST
AUTHORIZATION
PRE-REQUEST SCRIPT
SETTINGS
COOKIES
BODY
HEADERS(8)
TESTS
PARAMS
X-WWW-FORM-URLENCODED
GRAPHQL
FORM-DATA
JSON
BEAUTIFY
NONE
BINARY
RAW
3
23
"AT":
"ISATALL":"TRUE",
4
"ATUSERIDS":["17600477102","USER002"],
"ATMOBILES":["17600477102","18XXX"]
5
6
7
"MSGTYPE":"TEXT",
8
//文本消息
9
"TEXT":
10
"CONTENT":"测试预警消息告警通知"
子
11
12
琦
舟
护士站对接群
HI JX WU YAYEIT ZIT
护士站告警小瓦力
机器人
测试预警消息告警通知@所有人
测试@指定人
HTIPS//OAPLLINGTALKCON/OBOTJSENDRACCESS.FOKENE8765208F3EOD6AACC137D1525E4D962161C301FICBACA17BC12ABE7
SEND
POST
PRE-REQUEST SCRIPT
SETTINGS
AUTHORIZATION
BODY
HEADERS(8)
COOKIES
TESTS
PARAMS
FORM-DATA
JSON
X-WWW-FORM-URLENCODED
BEAUTIFY
GRAPHQL
BINARY
RAW
NONE
'AT":'
3456780
"FALSE".
"ISATA11
IDS":["17600477102","USER002"],
"ATUSERIDS
["17600477102
"18XXX"]
"ATMOBILES
子
"MSGTYPE":"TEXT",
//文本消息
890NN
TEXT":
"CONTENT":"测试预警消息告警通知"
子
护士站告警小瓦力
机器人
09:19
测试预警消息告警通知
@泊舟
收到
回复
测试卡片消息
燕HTT
SAVE
HTPS/0APLDINGTAKCON/_ONOVSEND了B2T1C8AC4JOKEN-8520AF360D53E0D5AACC1370152564DSB211C8AC4FO5A170C128BE77
SEND
POST
COOKIES
PARAMS
HEADERS(8
PRE-REQUEST SCRIPT
TESTS
SETTINGS
BODY
AUTHORIZATION
JSON
BEAUTIFY
FORM-DATA
GRAPHQL
BINARY
X-WWW-FORM-URLENCODED
NONE
RAW
"ISATALL":"FALSE",
"ATUSERIDS":["17600477102","USER002"],
"ATMOBILES":["17600477102","18XX"]
5
9
5,
,"MSGTYPE":"ACTIONCARD",
7
8
"ACTIONCARD":
9
."TITLE":"我-20-年前想打造一向苹果咖啡厅,而它正是-APPLE-的前身",
10
ANIN APPLE STORE.的设计在从政采满调的科技感走向生活化,商共生消化的走向其交可以而调制,26,年商平果一个建立期呼行的吉弯计划"
"BTNORIENTATION":"O","O",
11
"BTNS":
12
子
13
"TITLE":"内容不错",
14
"ACTIONURL":"HTTPS://WWW.DINGTALK.COM/"
15
子
16
马
17
"TITLE":"不感兴趣",
18
,"ACTIONURL":"HTTPS://WWW.DINGTALK.COM/"
19
20
护士站告警小瓦力
09:26
机器人
咨询定制
定制专属钉钉
专有云服务
系统集成服务
云化咨询
星身定制工作合皮肤与欢迎雨,自宠
为企业设立南全属于自己的独立数据
张托打专家技术国队,为企业统一
出租织有爱规划爱上战略,钉钉专家
捏以面向业务晚状和发展目标的战略
义晓天背景,提丹员工白尾感
移动办公应用,个入口打送企业所
服务器私机房,让企业数据与公有效
调料,分析,规划,帮助差悦实现云
奖完全限离
有应用
化升最
告警乔布斯20年前想打造的苹果咖啡厅
APPLESTORE的设计正从原来满满的科技感走向生活
化,而其生活化的走向其实可以追溯到20年前苹果一
个建立咖啡馆的告警计划
内容不错
不感兴趣
3.编写发送代码
有了上述PostMan的测试,下面的java代码编写对于我们来说就很简单了
引入pom依赖
公司内网则直接下载好:https://open-dev.dingtalk.com/sdk/download/java
编写java代码
Java
运行代码复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import com.dingtalk.api.response.OapiRobotSendResponse;
import com.taobao.api.ApiException;
import java.util.Arrays;
public class DingTalk {
public static void main(String[] args) {
try {
// 1-初始化API调用Client
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/robot/send?access_token=87b520af3e0b6aacc137d1525e4d9b21f61c901f1c8ac4f05a17bc12a8e7f737");
// 2-初始化请求参数
OapiRobotSendRequest req = new OapiRobotSendRequest();
// 2-1 设置消息类型
req.setMsgtype("text");
// 2-2 设置消息@人
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
at.setAtMobiles(Arrays.asList("17600477102"));
req.setAt(at);
// 2-3 设置消息内容(必须匹配关键词),工作中这里就对应error日志
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
text.setContent("[告警]测试java代码消息");
req.setText(text);
// 3 消息发送
OapiRobotSendResponse rsp = client.execute(req, "");
System.out.println(rsp.getBody());
} catch (ApiException e) {
e.printStackTrace();
}
}
}
代码测试
2分钟前
护士站告警小瓦力
09:48
机器人
[告警]测试JAVA代码消息
@泊舟
收到
回复
4.工作中到底怎么用
上面我们完成了简单的告警通知,实际工作中也是这么来做,但是会做一点点优化
●将上述代码封装成一个工具类,如:DingTalkMessageUtil
●将token保存在nacos中,与代码解耦
●在有异常日志、慢SQL等关键场景中调用此工具类,将消息发送到群,让开发人员及时感知并处理
5.失败原因分析
●看看你发送消息中,是不是没有自己定义的关键词
●看看你消息的接收方,是不是userId或手机号不对
4 人点赞
4