SpringBoot接入钉钉自定义机器人预警通知
作者:Sibylsf 发布时间:2022-07-23 00:29:45
标签:SpringBoot,钉钉机器人,预警
1、使用pom安装依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.8</version>
</dependency>
2、发送机器人消息规则
钉钉公开API
https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
3、钉钉消息发送代码
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONSerializer;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.util.*;
/**
* @Author: yansf
* @Description:钉钉消息发送工具类
* @Date: 10:44 AM 2019/6/12
* @Modified By:
*/
@Slf4j
public class DingDingMsgSendUtils {
/**
* 处理发送的钉钉消息
*
* @param accessToken
* @param textMsg
*/
private static void dealDingDingMsgSend(String accessToken, String textMsg) {
HttpClient httpclient = HttpClients.createDefault();
String WEBHOOK_TOKEN = "https://oapi.dingtalk.com/robot/send?access_token=" + accessToken;
HttpPost httppost = new HttpPost(WEBHOOK_TOKEN);
httppost.addHeader("Content-Type", "application/json; charset=utf-8");
StringEntity se = new StringEntity(textMsg, "utf-8");
httppost.setEntity(se);
try {
HttpResponse response = httpclient.execute(httppost);
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
String result = EntityUtils.toString(response.getEntity(), "utf-8");
log.info("【发送钉钉群消息】消息响应结果:" + JSON.toJSONString(result));
}
} catch (Exception e) {
log.error("【发送钉钉群消息】error:" + e.getMessage(), e);
}
}
/**
* 发送钉钉群消息
*
* @param accessToken
* @param content
*/
public static void sendDingDingGroupMsg(String accessToken, String content) {
String textMsg = "{ \"msgtype\": \"text\", \"text\": {\"content\": \"" + content + "\"}}";
dealDingDingMsgSend(accessToken, textMsg);
}
/**
* 发送钉钉群消息(可以艾特人)
*
* @param accessToken 群机器人accessToken
* @param content 发送内容
* @param atPhone 艾特人电话,如:176********,156********,
*/
public static void sendDingDingGroupMsg(String accessToken, String content, String atPhone) {
content = content.replace("\"", "'");
String textMsg = "";
// String textMsg = "{\n" +
// " \"msgtype\": \"text\", \n" +
// " \"text\": {\n" +
// " \"content\": \"" + content + "\"\n" +
// " }, \n" +
// " \"at\": {\n" +
// " \"atMobiles\": [\n" +
// " " + atPhone +
// " ], \n" +
// " \"isAtAll\": false\n" +
// " }\n" +
// "}";
MsgDto msgDto = new MsgDto();
msgDto.setMsgtype("text");
TextDto textDto = new TextDto();
textDto.setContent(content);
msgDto.setText(textDto);
AtDto atDto = new AtDto();
atDto.setIsAtAll(false);
List<String> result = Arrays.asList(atPhone.split(","));
atDto.setAtMobiles(result);
msgDto.setAt(atDto);
textMsg = JSONSerializer.toJSON(msgDto).toString();
System.out.println(textMsg);
dealDingDingMsgSend(accessToken, textMsg);
}
public static void main(String[] args) {
try {
int s = Integer.parseInt("df12");
// System.out.println(1 / 0);
} catch (Exception e) {
//e.printStackTrace();
sendDingDingGroupMsg(DingTokenEnum.SEND_SMS_BY_DEVELOPER_TOKEN.getToken(), "【JAVA系统消息】钉钉消息推送测试,by:闫淑芳..." + e, DingMsgPhoneEnum.DEVELOPER_PHONE_yansf.getPhone());
}
}
}
import lombok.Getter;
/**
* @Author: yansf
* @Description:钉钉消息接收用户,配置钉钉绑定的电话即可
* @Date: 10:44 AM 2019/6/12
* @Modified By:
*/
@Getter
public enum DingMsgPhoneEnum {
GENERAL_PURPOSE("176*****983", "bug不存在的"),
DEVELOPER_PHONE_yansf("176*****983", "yansf"),
DEVELOPER_PHONE_all("176*****983,176*****982,176*****981,176*****980", "all"),
PRODUCT_PERSONNEL_PHONE("", "产品人员"),
DATA_ANALYST_PHONE("", "数据分析人员");
private String phone;
private String name;
DingMsgPhoneEnum(String phone, String name) {
this.phone = phone;
this.name = name;
}
}
import lombok.Getter;
/**
* @Author: yansf
* @Description:钉钉消息群机器人access_token
* @Date: 10:45 AM 2019/6/12
* @Modified By:
*/
@Getter
public enum DingTokenEnum {
SEND_SMS_BY_DEVELOPER_TOKEN("此处自己申请token", "系统消息通知,技术专用");
private String token;
private String name;
DingTokenEnum(String token, String name) {
this.token = token;
this.name = name;
}
}
import lombok.Data;
import java.util.List;
/**
* @Author: yansf
* @Description:
* @Date:Creat in 2:13 PM 2019/6/12
* @Modified By:
*/
@Data
public class AtDto {
private List<String> atMobiles;
private Boolean isAtAll = false;
}
import lombok.Data;
/**
* @Author: yansf
* @Description:
* @Date:Creat in 2:13 PM 2019/6/12
* @Modified By:
*/
@Data
public class MsgDto {
private String msgtype;
private TextDto text;
private AtDto at;
}
import lombok.Data;
/**
* @Author: yansf
* @Description:
* @Date:Creat in 2:13 PM 2019/6/12
* @Modified By:
*/
@Data
public class TextDto {
private String content;
}
异常捕获
try{
//todo
} catch (Exception ex) {
DingDingMsgSendUtils.sendDingDingGroupMsg(DingTokenEnum.SEND_SMS_BY_DEVELOPER_TOKEN.getToken(), "***异常," + profile + "环境,errorMsg=" + ex, DingMsgPhoneEnum.DEVELOPER_PHONE_yansf.getPhone());
}
profile配置
@Value("${spring.profiles.active}") private String profile;
4、 结果演示
来源:https://blog.csdn.net/Sibylsf/article/details/91980783


猜你喜欢
- 硬件环境:小米4Android版本:6.0咱们先看效果图:我把代码贴出来:AndroidMainfest.xml文件(需要新增camera权
- 今天在编译Java程序时遇到如下问题:No enclosing instance of type PrintListFromTailToHe
- 下面一段代码准确的介绍了java实现单链表逆序,具体内容就不做详解了,有需要的朋友可以直接拷贝了package com.ckw.miansh
- spring data jpa使用自定义repository实现类spring data jpa中使用JpaRepository等接口定义r
- 私有构造函数私有构造函数是一种特殊的实例构造函数。它通常用在只包含静态成员的类中。如果类具有一个或多个私有构造函数而没有公共构造函数,则其他
- 因为在Action的execute方法声明时就抛出了Exception异常,所以我们无需再execute方法中捕捉异常,仅需在struts.
- 这篇文章主要从以下几个方面来介绍。简单介绍下jersey,springboot,重点介绍如何整合springboot与jersey。什么是j
- 本文实例为大家分享了java库存管理系统的具体代码,供大家参考,具体内容如下模拟真实的库存管理逻辑,完成超市管理系统的日常功能实现。经过分析
- ☆代码示例:代码块语法遵循标准markdown代码,例如:package cas;import org.htmlparser.Node;im
- 本文章从头开始介绍Spring集成Redis的示例。Eclipse工程结构如下图为我的示例工程的结构图,采用Maven构建。其中需要集成Sp
- 用过新版本android 360手机助手都人都对 360中只在桌面显示一个小小悬浮窗口羡慕不已吧? 其实实现这种功能,主要有两步: 1.判断
- Java * 。具体有如下四步骤:通过实现 InvocationHandler 接口创建自己的调用处理器;通过为 Proxy 类指定 C
- 条码的应用已深入生活和工作的方方面面。在处理条码时,常需要和各种文档格式相结合。当需要在文档中插入、编辑或者删除条码时,可借助于一些专业的类
- 本文实例为大家分享了闪耀字体效果的具体代码,供大家参考,具体内容如下import android.content.Context;impor
- Spring Boot从天而降Spring Boot是企业级开发的整体整合解决方案,在现在企业项目开发中使用非常普遍,Spring Boot
- 前言:在工作中一次排查慢接口时,查到了一个函数耗时较长,最终定位到是通过 List 去重导致的。由于测试环境还有线上早期数据较少,这个接口的
- 本文实例讲述了Android编程之OpenGL绘图技巧。分享给大家供大家参考,具体如下:很久不用OpenGL ES绘图,怕自己忘记了,于是重
- 为什么使用Swagger 在实际开发中我们作为后端总是给前端或者其他系统提供接口,每次写完代码之后不可避
- 本文介绍在C#窗体编程时,如何设置不显示右上角的最小化最大化关闭按钮。可以通过this.ControlBox这个属性的值来控制。在Windo
- 方法如下:在窗体的Load事件注册滚动事件,并增加对应的方法private void FormSample_Load(object send