SpringBoot接入钉钉自定义机器人预警通知

作者:Sibylsf 时间:2022-07-23 00:29:45 

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

SpringBoot接入钉钉自定义机器人预警通知

SpringBoot接入钉钉自定义机器人预警通知

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、 结果演示

SpringBoot接入钉钉自定义机器人预警通知

来源:https://blog.csdn.net/Sibylsf/article/details/91980783

标签:SpringBoot,钉钉机器人,预警
0
投稿

猜你喜欢

  • Java中break、continue、return在for循环中的使用

    2023-03-21 23:36:05
  • java基础的详细了解第八天

    2023-11-08 10:47:47
  • SpringBoot接口如何对参数进行校验

    2021-08-30 17:25:00
  • 解决IDEA maven 项目修改代码不生效,mvn clean、install后才生效

    2022-06-19 12:17:06
  • C#开启线程的四种示例

    2022-06-01 13:04:37
  • 深入理解Spring AOP

    2023-02-09 15:14:40
  • Java中Optional类及orElse方法详解

    2022-07-12 03:21:36
  • 一文带你深入了解Java泛型

    2022-02-10 05:38:02
  • Android 中View.onDraw(Canvas canvas)的使用方法

    2022-11-16 16:40:48
  • Java Spring中Quartz调度器详解及实例

    2022-09-30 03:31:13
  • Java超详细讲解设计模式之一的工厂模式

    2023-03-26 21:08:04
  • Java实现文件上传到服务器本地并通过url访问的方法步骤

    2021-12-01 11:45:20
  • Java 蒙特卡洛算法求圆周率近似值实例详解

    2023-10-19 23:32:10
  • C#将Sql数据保存到Excel文件中的方法

    2023-11-11 08:34:26
  • 关于SpringMVC的异常处理机制详细解读

    2023-01-26 17:32:45
  • java实现死锁的示例代码

    2023-10-12 18:12:40
  • SpringBoot2零基础到精通之数据与页面响应

    2022-08-25 22:26:41
  • 实例解析如何正确使用Java数组

    2023-04-14 23:00:55
  • SpringBoot 如何实时刷新静态文件

    2023-11-02 13:27:09
  • Mybatis防止sql注入原理分析

    2023-08-09 22:54:44
  • asp之家 软件编程 m.aspxhome.com