钉钉机器人报警设置
创始人
2024-04-22 06:23:16

钉钉机器人报警设置

1. 钉钉机器人相关设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kMcD3TbA-1670856713399)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221212223824730.png)]

2. 添加机器人

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8PLHOhD-1670856713401)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221212224028100.png)]

3. 选择自定义机器人

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-My0CyJOP-1670856713404)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221212224147798.png)]

4. 选择一个安全标签

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WxgwCe3k-1670856713405)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221212224209899.png)]

5. 添加完生成一个webhook

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6NWyeS8E-1670856713407)(C:\Users\maido\AppData\Roaming\Typora\typora-user-images\image-20221212224250346.png)]

参考文档

6. java 代码

package com.cjpension.ppmshttpbaffle.aspect;import cn.hutool.core.date.DateUtil;
import cn.hutool.core.net.NetUtil;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;/*** @ClassName ExceptionLogAspect* @Description TODO* @Author maido* @Date 21:11 2022/12/12* @Version 1.0**/
@Slf4j
@Aspect
@Configuration
@Profile(value = {"dev", "test"})
public class ExceptionLogAspect {@Value("${spring.application.name}")private String appName;@Value("${spring.profiles.active}")private String profile;private static AtomicInteger indexAtomic = new AtomicInteger(0);public static List devList = new ArrayList<>();static {devList.add("2d5a9cdcf81fcee5217fc1f2e54fa195e49be806890dccff11c2adf80be624a1");devList.add("f8350591d9375c7d59327c9847d2dbd6f57b49f56ce29b5ba55fff9aa399cb7a");devList.add("c7ba03a7c91e28b6939b85c1d7a1df5fa710fd2050e0cdd9a59fa5553598e124");devList.add("12b3e0cde929b61a18dba4cba42a3a7faaeaf5100d3d12990f767e8a1912487e");devList.add("fb78ad45cc0eccdab32bfce839abac2020fd61e6837f28690ab6ca5494db1a5a");devList.add("33828b1bd0602eddadcc91c4e01d063777812a410d52c3df6a5a2c07b214299f");devList.add("0b44dc7e46b2c80cc84c5d49be75b9a9c1642bc1b73a9d144ce6ce6c176e2310");devList.add("5785eafe2cfbf3065bc3c0f827becacd0245ed520d978189f56beab9248b62e9");devList.add("0d0d145ccadee55f5ed4ca0b274c0b1e4d7019a195d284f3531f72b31c10f6c3");}/*** 轮训获取token*/public String getToken() {if (indexAtomic.get() >= devList.size()) {indexAtomic.set(0);}return (String) devList.get(indexAtomic.getAndIncrement());}/*** 切入点*/@Pointcut("within(@org.springframework.web.bind.annotation.RestController *) ||" +"within(@org.springframework.stereotype.Controller *)")public void log() {}@AfterThrowing(value = "log()", throwing = "e")public void sendErrorLog(JoinPoint joinPoint, Exception e) {if(isSkip(e)){return;}// 获取推送内容String content = buildMsg(e, joinPoint);// https://oapi.dingtalk.com/robot/send?access_token=d2b5318b162ddda8b366fc9e786090a7b58b30f8f79e72ea6612b7829a930257String result = HttpUtil.post("https://oapi.dingtalk.com/robot/send?access_token=" + getToken(),content);log.info("error log push to dingding result : {}" ,result);}/*** 是否跳过*/private boolean isSkip(Exception e) {List skipList = new ArrayList<>();String exceptionName = e.getClass().getName();if(skipList.contains(exceptionName)){return true;}return false;}private String buildMsg(Exception e,JoinPoint joinPoint) {StringBuilder sb = new StringBuilder("{ \"msgtype\":\"markdown\",\"markdown\":{\"title\":\"错误日志报警\",\"text\":\"");sb.append("错误日志通知").append("\n\n");sb.append("时间: ").append(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")).append("\n\n");sb.append("项目名称: ").append(appName).append("\n\n");sb.append("环境: ").append(profile).append("\n\n");sb.append("服务IP: ").append(NetUtil.getLocalhostStr()).append("\n\n");sb.append("请求方法名: ").append(joinPoint.getSignature().getDeclaringTypeName()).append(".").append(joinPoint.getSignature().getName()).append("\n\n");sb.append("请求参数: ").append(JSONObject.toJSONString(joinPoint.getArgs()).replace("}","").replace("{","").replace("[","").replace("]","").replace("\"","")).append("\n\n");sb.append("具体信息: ").append(e.getClass().getName()).append(" ");if (e.getStackTrace() != null) {StackTraceElement[] stackTraces = e.getStackTrace();sb.append(e.getMessage()).append("\n");int i = 0;for (StackTraceElement stackTrace : stackTraces) {//只打印00行的堆栈if (i < 20) {sb.append(stackTrace.toString()).append("\n");} else {break;}i++;}} else {sb.append(e.getMessage());}sb.append("\"},\"at\":{\"atMobiles\":[],\"isAtAll\":false}}");return sb.toString();}}

7. 消息类型及数据格式

7.1 text

{"at": {"atMobiles":["180xxxxxx"],"atUserIds":["user123"],"isAtAll": false},"text": {"content":"我就是我, @XXX 是不一样的烟火"},"msgtype":"text"
}
参数参数类型是否必填说明
msgtypeString消息类型,此时固定为:text。
contentString消息内容。
atMobilesArray被@人的手机号。注意 在content里添加@人的手机号,且只有在群内的成员才可被@,非群内成员手机号会被脱敏。
atUserIdsArray被@人的用户userid。注意 在content里添加@人的userid。
isAtAllBoolean是否@所有人。

7.2 link类型

{"msgtype": "link", "link": {"text": "这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林", "title": "时代的火车向前开", "picUrl": "", "messageUrl": "https://www.dingtalk.com/s?__biz=MzA4NjMwMTA2Ng==&mid=2650316842&idx=1&sn=60da3ea2b29f1dcc43a7c8e4a7c97a16&scene=2&srcid=09189AnRJEdIiWVaKltFzNTw&from=timeline&isappinstalled=0&key=&ascene=2&uin=&devicetype=android-23&version=26031933&nettype=WIFI"}
}
参数参数类型是否必填说明
msgtypeString消息类型,此时固定为:link。
titleString消息标题。
textString消息内容。如果太长只会部分展示。
messageUrlString点击消息跳转的URL,打开方式如下:移动端,在钉钉客户端内打开PC端默认侧边栏打开希望在外部浏览器打开,请参考消息链接说明
picUrlString图片URL。

image.png

7.3 markdown类型

{"msgtype": "markdown","markdown": {"title":"杭州天气","text": "#### 杭州天气 @150XXXXXXXX \n > 9度,西北风1级,空气良89,相对温度73%\n > ![screenshot](https://img.alicdn.com/tfs/TB1NwmBEL9TBuNjy1zbXXXpepXa-2400-1218.png)\n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"},"at": {"atMobiles": ["150XXXXXXXX"],"atUserIds": ["user123"],"isAtAll": false}}
参数类型是否必填说明
msgtypeString消息类型,此时固定为:markdown。
titleString首屏会话透出的展示内容。
textStringmarkdown格式的消息。
atMobilesArray被@人的手机号。注意 在text内容里要有@人的手机号,只有在群内的成员才可被@,非群内成员手机号会被脱敏。
atUserIdsArray被@人的用户userid。注意 在content里添加@人的userid。
isAtAllBoolean是否@所有人。

image.png

相关内容

热门资讯

北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...