在钉钉群通过机器人发送信息

在第三方API接口对接中,需要及时获取第三方接口请求结果情况,所以在代码中融合钉钉机器人,对请求的异常结果及时发送通知。

  1. 自定义机器人参考链接
  2. 通用响应参数-封装API的错误码
public interface IErrorCode {long getCode();String getMessage();
}
  1. 通用响应参数-状态码
/*** 〈 通用响应参数-状态码 〉** @since JDK1.8* 版本 @version 1.0*/
public enum ResultCode implements IErrorCode {SUCCESS(2000, "操作成功"),FAILED(5000, "操作失败"),VALIDATE_FAILED(4040, "参数检验失败"),UNAUTHORIZED(4010, "暂未登录或token已经过期"),FORBIDDEN(4030, "没有相关权限");private long code;private String message;ResultCode(long code, String message) {this.code = code;this.message = message;}public long getCode() {return code;}public String getMessage() {return message;}
}
  1. 通过返回类定义
@Data
@ApiModel(description = "通用响应参数")
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class CommonResult {@ApiModelProperty(value = "返回码")private long resultCode;@ApiModelProperty(value = "返回信息")private String message;@ApiModelProperty(value = "返回结果集")private Object data;private CommonResult(long resultCode, String message) {this.resultCode = resultCode;this.message = message;}/*** 成功返回结果*/public static CommonResult success() {return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());}/*** 失败返回结果*/public static CommonResult failed() {return new CommonResult(ResultCode.FAILED.getCode(), ResultCode.FAILED.getMessage());}/*** 未授权访问返回结果* @return*/public static CommonResult unauthorized(){return new CommonResult(ResultCode.UNAUTHORIZED.getCode(),ResultCode.UNAUTHORIZED.getMessage());}/*** 参数校验失败返回结果* @return*/public static CommonResult validateFailed(){return new CommonResult(ResultCode.VALIDATE_FAILED.getCode(),ResultCode.VALIDATE_FAILED.getMessage());}/*** 没有授权返回结果* @return*/public static CommonResult forbidden(){return new CommonResult(ResultCode.FORBIDDEN.getCode(),ResultCode.FORBIDDEN.getMessage());}/*** 失败返回结果** @param errorCode 错误码*/public static CommonResult common(IErrorCode errorCode) {return new CommonResult(errorCode.getCode(), errorCode.getMessage());}
}
  1. 在钉钉群可以通过手机号码@指定人员
/*** 日志接受者,需要在text中包含才可以@* @param mobiles 手机号码集合* @return*/private String phone(List<String> mobiles){StringBuffer stringBuffer = new StringBuffer();for (String mobile : mobiles) {stringBuffer.append(" @"+mobile);}return stringBuffer.toString();}
  1. 关于钉钉群机器人配置的通用参数
@Data
@Component
@ConfigurationProperties(prefix = "dingtalk")
public class DingTalkProperties {/*** 数据请求url*/private String url;/*** token*/private String token;/*** 密钥,机器人安全设置页面,加签一栏下面显示的SEC开头的字符串。*/private String secret;/*** 项目民称,用于钉钉机器人发送信息的请求头*/private String projectName;private List<String> atMobiles;
}
  1. 发送数据URL
    private String sendUrl() throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {Long timestamp = System.currentTimeMillis();String stringToSign = timestamp + "\n" + dingTalkConfig.getSecret();Mac mac = Mac.getInstance("HmacSHA256");mac.init(new SecretKeySpec(dingTalkConfig.getSecret().getBytes("UTF-8"), "HmacSHA256"));byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");return dingTalkConfig.getUrl() + "?access_token=" + dingTalkConfig.getToken() + "&sign=" + sign + "&timestamp=" + timestamp;}
  1. 发送数据service层
    @Overridepublic void sendMessage(CommonResult data) {try {DingTalkClient client = new DefaultDingTalkClient(sendUrl());OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("markdown");OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();markdown.setTitle("接口异常通知");markdown.setText("#### " + dingTalkConfig.getProjectName() + " \n" +"> 日志处理人:" + phone(dingTalkConfig.getAtMobiles()) + "\n\n" +"> 异常原因:" + data.getMessage() + "\n\n" +"> ###### " + DateUtils.getThisTime() + "发布\n");request.setMarkdown(markdown);OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setAtMobiles(dingTalkConfig.getAtMobiles());// isAtAll类型如果不为Boolean,请升级至最新SDKat.setIsAtAll(false);request.setAt(at);OapiRobotSendResponse response = client.execute(request);} catch (Exception e) {log.error("发送信息错误,失败信息:{}", e.getMessage());}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringMVC零基础入门 - 概述、入门搭建、PostMan的使用(常见数据类型的传输)、REST风格编程

SpringMVC零基础入门 - 概述、入门搭建、PostMan的使用(常见数据类型的传输)、REST风格编程 SpringMVC是隶属于Spring框架的一部分&#xff0c;主要是用来进行Web开发&#xff0c;是对Servlet进行了封装SpringMVC是处于Web层的框架&#xff0c;所以其主要的作用就是用来接收前…

解决“win11无法识别U盘“问题

在15.6寸笔记本上插上U盘&#xff0c;有时候出现U盘无法识别的现象&#xff0c;出现这种问题的原因有许多&#xff0c;比如U盘的格式不被当前电脑支持、电脑的USB接口电压过低、没有安装U盘驱动等等。     若是U盘格式不支持&#xff0c;则把U盘改成电脑能够识别的格式&#…

字符串处理(将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加) C语言xdoj704

题目描述&#xff1a; 输入由数字和字符构成的字符串&#xff08;不包含空格&#xff09;&#xff0c;将字符串中符合十六进制数据格式的数字和字符按照其对应的十进制数值进行累加&#xff0c;并输出累加结果&#xff0c;如果字符串中不含有任何满足十六进制格式的字符&#x…

论AI自动生成游戏的局限性及其意义缺失

近年来&#xff0c;人工智能技术在游戏开发领域的应用日益广泛&#xff0c;包括智能NPC设计、游戏关卡生成、剧情编排等。然而&#xff0c;关于让AI完全自主地编写和设计整个游戏的讨论也日渐兴起。本文旨在探讨为何让AI自己来写游戏在当前阶段并无实质意义&#xff0c;主要从创…

LC旋转矩阵

LC 旋转矩阵 题目描述&#xff1a; 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 题目示例如下&#xff1a; 示例一&#xff1a; 给定 matrix [[1,2…

CES 2024丨引领变革,美格智能为智能终端带来生成式AI能力

作为电子行业的“风向标”&#xff0c;CES 2024&#xff08;国际消费电子展&#xff09;于1月9日至12日在美国拉斯维加斯举办。本届展会可谓是AI的盛宴&#xff0c;芯片、AI PC、智能家居、汽车科技、消费电子等领域与AI相关的前沿成果接连发布&#xff0c;引领人工智能领域的科…

6.2 声音编辑工具GoldWave5简介(8)

2&#xff0e;降噪 如果声卡的质量不太好&#xff0c;在录音的过程中免不了会掺杂一些杂音&#xff0c;比如&#xff1a;电流声、爆破声等&#xff0c;此时就需要进行降噪处理。 (1) 选择【效果】|【波波器】|【噪声减小】命令&#xff0c;打开“降噪”对话框。如图6-2-14所示…

webpack 是什么?

webpack 是一个开源的 JavaScript 模块打包工具。它是前端开发中常用的构建工具之一&#xff0c;主要用于将项目中的多个模块和文件打包成一个或多个静态资源文件&#xff08;通常是 JavaScript 文件&#xff09;&#xff0c;以便在浏览器中加载和运行。 webpack 的主要功能包…

Pandas实战100例 | 案例 27: 数据合并 - 使用 `merge`

案例 27: 数据合并 - 使用 merge 知识点讲解 在数据处理中&#xff0c;经常需要将来自不同来源的数据集合并在一起。Pandas 提供了 merge 函数&#xff0c;它类似于 SQL 中的 JOIN 操作&#xff0c;可以根据一个或多个键来合并两个 DataFrame。 内连接 (inner): 只合并两个 …

Shell编程自动化之Shell数学运算与条件测试

一、Shell数学运算 1.Shell常见的算术运算符号 序号算术运算符号意义1、-、*、/、%加、减、乘、除、取余2**幂运算3、–自增或自减4&&、||、&#xff01;与、或、非5、!相等、不相等&#xff0c;也可写成6、、-、*、/、%赋值运算符&#xff0c;a1相等于aa1 2.Shell常…

记录一下常用的工具类

1.通用返回类 import lombok.Data;Data public class CommonResult<T> {private Integer code;private String message;private T data;//成功通用返回public static CommonResult okResult(Object data){CommonResult commonResult new CommonResult(AppHttpCodeEnum.…

chromium通信系统-ipcz系统(十一)-mojo binding

关于mojo binding的官方文档为mojo docs。 由于比较复杂&#xff0c;这里只做简单源码分析。 我们知道要实现rpc&#xff0c;必须实现客户端和服务端。 mojo 实现了一套领域语言&#xff0c;通过领域语言描述接口和数据&#xff0c; 再通过特有编译器编译成c代码。 这个过程会…

C语言之字符串和指针

目录 用数组实现的字符串和用指针实现的字符串 █用数组实现的字符串str █用指针实现的字符串ptr 注意 用数组和指针实现字符串的不同点 字符串数组 用数组实现的字符串的数组——二维数组 用指针实现的字符串数组——指针数组 注意 字符串和指针有着紧密的联系&#…

程序设计语言的分类

编译与解释 编译型 将源代码转换成目标代码&#xff0c;通常源代码是高级语言代码&#xff0c;目标代码是机器语言代码&#xff0c;执行编译的计算机程序称为编译器。 eg:java 好处&#xff1a;对于相同的源代码编译产生的目标代码执行速度更快&#xff0c;目标代码不需要编译…

TikTok系列算法定位还原x-ss-stub

TikTok的x系列的算法比较有名,很多粉丝也问过,之前没有深入研究,本人工作量也比较大。 我们上次说到TikTok的x-ss-stub的算法就是ccmd5标准库算的,今天要讲细致点,表面这个结论本不是直接将数据md5那么来的,是经过一系列分析来的 上图是上次截图的,这次我们分析整个定位…

node(express.js创建项目)+连接mysql数据库

1.node npm的安装 2.express的安装 全局安装:npm install express -gnpm install -g express-generator// ps: 4.0版本把generator分离出来了&#xff0c;需要单独安装3.创建express项目 express 项目名称 cd 项目名称 npm install npm start4.项目中安装数据库 npm install…

flink中的row类型详解

在Apache Flink中&#xff0c;Row 是一个通用的数据结构&#xff0c;用于表示一行数据。它是 Flink Table API 和 Flink DataSet API 中的基本数据类型之一。Row 可以看作是一个类似于元组的结构&#xff0c;其中包含按顺序排列的字段。 Row 的字段可以是各种基本数据类型&…

C语言督学营(高级阶段)

文章目录 高级阶段19.C语言语法进阶1.条件运算符、逗号运算符(1)条件运算符 / 三目运算符   ? :(2)逗号运算符   , 2.自增自减运算符3.位运算符&#xff1a;按位或、按位异或、按位取反(1)逻辑与、按位与、左移、右移(2)有符号数右移 vs 无符号数右移(3)按位与、按位或、按位…

Docker学习与应用(五)-DockerFile

1、DockerFile 1&#xff09;DockerFile介绍 dockerfile是用来构建docker镜像的文件&#xff01;命令参数脚本&#xff01; 构建步骤&#xff1a; 1. 编写一个dockerfile文件 2. docker build 构建称为一个镜像 3. docker run运行镜像 4. docker push发布镜像&#xff08;D…

LC 83. 删除排序链表中的重复元素

83. 删除排序链表中的重复元素 难度 &#xff1a; 简单 题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 提示&#xff1a; 链表中节点数目在范围 [0, 300] 内-100 < Node.va…