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


Posted in Java/Android onJuly 15, 2022

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接入钉钉自定义机器人预警通知

到此这篇关于SpringBoot接入钉钉自定义机器人预警通知的文章就介绍到这了,更多相关SpringBoot钉钉机器人预警内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Java/Android 相关文章推荐
Java Shutdown Hook场景使用及源码分析
Jun 15 Java/Android
elasticSearch-api的具体操作步骤讲解
Jun 28 Java/Android
java设计模式--建造者模式详解
Jul 21 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
Java面试题冲刺第十九天--数据库(4)
Aug 07 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Android Rxjava3 使用场景详解
Apr 07 Java/Android
零基础学java之循环语句的使用
Apr 10 Java/Android
Java死锁的排查
May 11 Java/Android
Java 轮询锁使用时遇到问题
May 11 Java/Android
多线程Spring通过@Scheduled实现定时任务
May 25 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
SpringBoot深入分析讲解监听器模式下
Jul 15 #Java/Android
tree shaking对打包体积优化及作用
Jul 07 #Java/Android
MyBatis在注解上使用动态SQL方式(@select使用if)
Jul 07 #Java/Android
一文了解Java动态代理的原理及实现
Jul 07 #Java/Android
Java实现字符串转为驼峰格式的方法详解
Jul 07 #Java/Android
Spring中bean集合注入的方法详解
java中如何截取字符串最后一位
Jul 07 #Java/Android
You might like
法压式咖啡之制作法
2021/03/03 冲泡冲煮
php截取html字符串及自动补全html标签的方法
2015/01/15 PHP
PHP实现导出带样式的Excel
2016/08/28 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
共享自己写一个框架DreamScript
2007/01/20 Javascript
My Desktop :) 桌面式代码
2008/12/29 Javascript
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
一段实现页面上的图片延时加载的js代码
2010/02/11 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
jQuery点击tr实现checkbox选中的方法
2013/03/19 Javascript
Node.js开发者必须了解的4个JS要点
2016/02/21 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
javascript 判断页面访问方式电脑或者移动端
2016/09/19 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
vue+element实现动态加载表单
2020/12/13 Vue.js
[43:14]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
2015/10/18 Python
详解python实现线程安全的单例模式
2018/03/05 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
python 字典 setdefault()和get()方法比较详解
2019/08/07 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
一个J2EE项目团队的主要人员组成是什么
2012/06/04 面试题
技能比武方案
2014/05/21 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
Python代码实现双链表
2022/05/25 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android