钉钉通知
本文讲实现Java代码调用钉钉机器人API,发送指定告警消息的效果,以满足用户对于系统的实时监控。
API:https://open.dingtalk.com/document/orgapp/custom-robots-send-group-messages
每个机器人每分钟最多发送20条消息到群里,如果超过20条,会限流10分钟。
重要
如果有大量发消息的场景(譬如系统监控报警)可以将这些信息进行整合,通过markdown消息以摘要的形式发送到群
1.创建钉钉机器人
创建告警群聊
就拉一个普通群聊就可以
护士站对接群普通群群成员4人设置群身份
image.png
创建机器人
●
群设置选择机器人
群设置消息免打扰群管理泊舟群权限相关设置群主标签普通群群类型普通群无组织归属,推荐升级为内部群等其他类型,功能更丰富,安全更有保障.机器人AI实时翻译清空聊天记录退出群聊解散该群
image.png
机器人管理小钉钉钉官方机器人,提供丰富的技能已开启的技能投票提醒日程提醒添加机器人十多款丰富的精选机器人
image.png
●
选择自定义机器人
极狐GITLABTRAVISJIRA极狐GITLABGITHUB基于GIT的代码托管服基于ROR的开源代码出色的项目与事务跟出色的项目与事务跟托管软件踪工具踪工具务自定义TRELLO通过WEBHOOK接入自实时的卡片墙,管理定义服务任何事情企业机器人阿里云开-阿里云开发者社区发者社区训练营训练营BOT平三勇阿里云开发者
image.png
●
定义机器人相关信息,重点关注关键词
取个名护士站告警小瓦力机器人名字:护士站对接群添加到群组:异常消息关键词,完全是用户自定义,只要你在发送消息中有这些关键词,就可以发送到群里安全设置自定义关键词说明文档告警这里我模拟了四个失败异常限流
image.png
保存Webhook
1.添加机器人Y2.设置WEBHOOK,点击设置说明查看如何配置以使机器人生效HTTPS://OAPI.DINGTALK.COM/ROBOT/SEND?ACCESS TOKWEBHOOK:复制*请保管好此WEBHOOK地址,不要公布在外部网站上,泄露有安全风险使用WEBHOOK 地址,向钉群推送消息非常重要,是发送必须的参数完成设置说明
image.png
2.PostMan测试发送API
基于官方提供的API,我们可以做下述测试
官方请求示例
请求示例(HTTP)
●
下面的token需要替换成webhook中的地址
请求正文
●
下面消息类型支持多种,通过msgtype声明你要哪种
●
at,标识群里@哪些人,如果isAtAll就标识@群里所有人,@atMobiles标识指定手机号,其余参数同理
测试@所有人
SENDPOSTAUTHORIZATIONPRE-REQUEST SCRIPTSETTINGSCOOKIESBODYHEADERS(8)TESTSPARAMSX-WWW-FORM-URLENCODEDGRAPHQLFORM-DATAJSONBEAUTIFYNONEBINARYRAW323"AT":"ISATALL":"TRUE",4"ATUSERIDS":["17600477102","USER002"],"ATMOBILES":["17600477102","18XXX"]567"MSGTYPE":"TEXT",8//文本消息9"TEXT":10"CONTENT":"测试预警消息告警通知"子1112
image.png
琦舟护士站对接群HI JX WU YAYEIT ZIT护士站告警小瓦力机器人测试预警消息告警通知@所有人
image.png
测试@指定人
HTIPS//OAPLLINGTALKCON/OBOTJSENDRACCESS.FOKENE8765208F3EOD6AACC137D1525E4D962161C301FICBACA17BC12ABE7SENDPOSTPRE-REQUEST SCRIPTSETTINGSAUTHORIZATIONBODYHEADERS(8)COOKIESTESTSPARAMSFORM-DATAJSONX-WWW-FORM-URLENCODEDBEAUTIFYGRAPHQLBINARYRAWNONE'AT":'3456780"FALSE"."ISATA11IDS":["17600477102","USER002"],"ATUSERIDS["17600477102"18XXX"]"ATMOBILES子"MSGTYPE":"TEXT",//文本消息890NNTEXT":"CONTENT":"测试预警消息告警通知"子
image.png
护士站告警小瓦力机器人09:19测试预警消息告警通知@泊舟收到回复
image.png
测试卡片消息
燕HTTSAVEHTPS/0APLDINGTAKCON/_ONOVSEND了B2T1C8AC4JOKEN-8520AF360D53E0D5AACC1370152564DSB211C8AC4FO5A170C128BE77SENDPOSTCOOKIESPARAMSHEADERS(8PRE-REQUEST SCRIPTTESTSSETTINGSBODYAUTHORIZATIONJSONBEAUTIFYFORM-DATAGRAPHQLBINARYX-WWW-FORM-URLENCODEDNONERAW"ISATALL":"FALSE","ATUSERIDS":["17600477102","USER002"],"ATMOBILES":["17600477102","18XX"]595,,"MSGTYPE":"ACTIONCARD",78"ACTIONCARD":9."TITLE":"我-20-年前想打造一向苹果咖啡厅,而它正是-APPLE-的前身",10ANIN 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/"1920
image.png
护士站告警小瓦力09:26机器人咨询定制定制专属钉钉专有云服务系统集成服务云化咨询星身定制工作合皮肤与欢迎雨,自宠为企业设立南全属于自己的独立数据张托打专家技术国队,为企业统一出租织有爱规划爱上战略,钉钉专家捏以面向业务晚状和发展目标的战略义晓天背景,提丹员工白尾感移动办公应用,个入口打送企业所服务器私机房,让企业数据与公有效调料,分析,规划,帮助差悦实现云奖完全限离有应用化升最告警乔布斯20年前想打造的苹果咖啡厅APPLESTORE的设计正从原来满满的科技感走向生活化,而其生活化的走向其实可以追溯到20年前苹果一个建立咖啡馆的告警计划内容不错不感兴趣
image.png
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代码消息@泊舟收到回复
image.png
4.工作中到底怎么用
上面我们完成了简单的告警通知,实际工作中也是这么来做,但是会做一点点优化
●
将上述代码封装成一个工具类,如:DingTalkMessageUtil
●
将token保存在nacos中,与代码解耦
●
在有异常日志、慢SQL等关键场景中调用此工具类,将消息发送到群,让开发人员及时感知并处理
5.失败原因分析
●
看看你发送消息中,是不是没有自己定义的关键词
●
看看你消息的接收方,是不是userId或手机号不对