钉钉消息推送()

devtools/2025/1/21 4:57:16/

记录一下java实现消息推送

1. 首先添加依赖

 <dependencies><dependency><groupId>com.aliyun</groupId><artifactId>alibaba-dingtalk-service-sdk</artifactId><version>2.0.0</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.11</version></dependency>
</dependencies>

2. 配置钉钉推送application.yml文件

dingding:agentId: 25702appKey: dingwsjy7buappSecret: eFROKkCe5JQvYOuru0ZXKzSyaBL9RAI-o6KTilfmVn3STgmessageServerUrl: https://oapi.dingtalk.com/topapi/messagetokenServerUrl: https://oapi.dingtalk.com/getbymobileServerUrl: https://oapi.dingtalk.com/topapi/v2secret: SECc10440b6571aa687b056488d93eb418443ac8d89615489d9a0baccessToken: 11da3106cd3ebc2e117e0d2e4cd4e91801eb4a481ec6bb2e

创建一个读取这些配置的config类型,如下

java">/*** 读取钉钉相关配置** @author lkx*/
@Component
@ConfigurationProperties(prefix = "dingding")
@Data
public class DingConfig
{private String agentId;private String appKey;private String appSecret;private String messageServerUrl;private String tokenServerUrl;private String getbymobileServerUrl;private String secret;private String accessToken;
}

3. 创建一个单独的service和实现类

java">public interface DingMessageService {/*** 发送钉钉群* @param markdown*/void sendCrowdMessage(OapiRobotSendRequest.Markdown markdown);
}

实现类

java">@Slf4j
@Service
public class DingMessageServiceImpl implements DingMessageService {/*** DingDing配置*/@Autowiredprivate DingConfig dingConfig;@Async("threadPool")@Overridepublic void sendCrowdMessage(OapiRobotSendRequest.Markdown markdown) {try {Long timestamp = System.currentTimeMillis();String stringToSign = timestamp + "\n" + dingConfig.getSecret();Mac mac = Mac.getInstance("HmacSHA256");mac.init(new SecretKeySpec(dingConfig.getSecret().getBytes("UTF-8"), "HmacSHA256"));byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");String serverUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + dingConfig.getAccessToken() + "&timestamp=" + timestamp + "&sign=" + sign;DingTalkClient client = new DefaultDingTalkClient(serverUrl);OapiRobotSendRequest request = new OapiRobotSendRequest();request.setMsgtype("text");OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();text.setContent("告警");request.setText(text);OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();at.setIsAtAll(true);request.setAt(at);request.setMsgtype("link");OapiRobotSendRequest.Link link = new OapiRobotSendRequest.Link();link.setMessageUrl("https://www.dingtalk.com/");link.setPicUrl("");request.setLink(link);request.setMsgtype("markdown");request.setMarkdown(markdown);OapiRobotSendResponse response = client.execute(request);} catch (Exception e) {log.error("钉钉发送群消息异常:" + e.getMessage());}}}

4. 需要直接注入调用即可

java">                //推送钉钉OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();markdown.setTitle("物料车电量告警");StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("### **警告** \n\n").append("物料车电量告警\n\n").append("当前有"+size+"辆物料车电池电量低于"+batteryLevel+"%"+",请及时充电\n\n").append("告警时间:").append(DateUtils.getTime());markdown.setText(stringBuilder.toString());dingMessageService.sendCrowdMessage(markdown);

附:yml文件中 secret 和 accessToken 获取方法

首先拉人组个群,点击群设置,添加小机器人

然后选择自定义

选择加签,里面的值就是 secret

然后点击完成,出现下图,access_token 后面的就是 accessToken 的值


http://www.ppmy.cn/devtools/152266.html

相关文章

基于Springboot实现旅游网站系统开发

项目介绍 在介绍文章之前呢&#xff0c;小伙伴们需要掌握关于咱们前后端知识点&#xff0c;我整理了几个课程&#xff0c;可以去学习&#xff1a; 课程1-java和vue前后端分离项目实战 课程2-HTML5入门级开发 课程3-vue入门级开发教程 课程4-CSS入门级开发 里边的老师也很敬业&…

CV 图像处理基础笔记大全(超全版哦~)!!!

一、图像的数字化表示 像素 数字图像由众多像素组成&#xff0c;是图像的基本构成单位。在灰度图像中&#xff0c;一个像素用一个数值表示其亮度&#xff0c;通常 8 位存储&#xff0c;取值范围 0 - 255&#xff0c;0 为纯黑&#xff0c;255 为纯白。例如&#xff0c;一幅简单的…

Django框架:python web开发

1.环境搭建&#xff1a; &#xff08;a&#xff09;开发环境&#xff1a;pycharm &#xff08;b&#xff09;虚拟环境&#xff08;可有可无&#xff0c;优点&#xff1a;使用虚拟环境可以把使用的包自动生成一个文件&#xff0c;其他人需要使用时可以直接选择导入包&#xff…

SpringBoot整合junit

SpringBoot 整合 junit 特别简单&#xff0c;分为以下三步完成: 1在测试类上添加 SpringBootTest 注解2使用 Autowired 注入要测试的资源3定义测试方法进行测试 1.实验准备&#xff1a; 创建一个名为 springboot_junit_test 的 SpringBoot 工程&#xff0c;工程目录结构如下…

如何修改React 项目版本

npx create-react-app react-project-name在项目根目录运行以下命令&#xff0c;卸载当前的 React 和 React-DOM&#xff1a; npm uninstall react react-dom重新安装 React 和 React-DOM 指定版本&#xff1a; npm install react18.2.0 react-dom18.2.0确认 package.json 中…

SDL2:arm64下编译使用 -- SDL2多媒体库使用音频实例

更多内容&#xff1a;XiaoJ的知识星球 SDL2&#xff1a;Android-arm64端编译使用 2. SDL2&#xff1a;Android-arm64端编译使用2.1 安装和配置NDK2.2 下载编译SDL22.3 SDL2使用示例&#xff1a;Audio2.4 Android设备运行 2. SDL2&#xff1a;Android-arm64端编译使用 在Linux系…

Android-Gradle-自动化多渠道打包

所谓自动执行加固&#xff0c;无非就是几行命令&#xff0c;360加固保提供了一套命令行进行加固 特别提醒&#xff0c;此处360配置可选项的增强服务有bug&#xff0c;已经跟官方沟通&#xff0c;他们需要在下个版本修复&#xff0c;当前存在bug的版本3.2.2.3&#xff08;2020-0…

《初始Linux:多平台兼容的强者,无缝衔接各类设备的桥梁 》

对于新手而言&#xff0c;Linux 虽然看似神秘&#xff0c;但只要迈出第一步&#xff0c;你会发现它其实充满了乐趣和挑战。在接下来的内容中&#xff0c;我将带你一步步揭开 Linux 的神秘面纱&#xff0c;从基础概念到实际操作&#xff0c;帮助你轻松入门&#xff0c;开启属于你…