钉钉消息推送()

server/2025/1/17 5:08:13/

记录一下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/server/159002.html

相关文章

MyBatis递归查询层级关系的树

之前做递归的时候写了那么多java代码发现根本不需要&#xff0c;直接sql就能搞定&#xff0c;直接上代码。 数据&#xff1a;根据parentId查出id&#xff0c;然后把id赋值给parentId&#xff0c;在查处原本parentId下面有哪些级别的数据。 实体类&#xff1a;这里关键是id&a…

Windows Subsystem for Linux (WSL) 中安装 Redis

在 Windows Subsystem for Linux (WSL) 中安装 Redis 是一个常见的开发环境设置过程。以下是详细步骤&#xff0c;适用于 Ubuntu 或其他基于 Debian 的 Linux 发行版。 ✅ 步骤 1&#xff1a;打开 WSL 终端 首先&#xff0c;确保你已经在 Windows 上启用了 WSL&#xff0c;并安…

centos7.6 安装nacos 2.0.4与恢复nacos的mysql

1 安装目录 useradd adminmkdir -p /home/admin/nacos2 下载 wget https://github.com/alibaba/nacos/releases/download/2.0.4/nacos-server-2.0.4.zip?spm5238cd80.1f77ca18.0.0.4d31e37ewdt6EW&filenacos-server-2.0.4.zip cp nacos-server-2.0.4.zip /home/admin/ un…

C语言:-三子棋游戏代码:分支-循环-数组-函数集合

思路分析&#xff1a; 1、写菜单 2、菜单之后进入游戏的操作 3、写函数 实现游戏 3.1、初始化棋盘函数&#xff0c;使数组元素都为空格 3.2、打印棋盘 棋盘的大概样子 3.3、玩家出棋 3.3.1、限制玩家要下的坐标位置 3.3.2、判断玩家要下的位置是否由棋子 3.4、电脑出棋 3.4.1、…

3d 可视化库 vister部署笔记

目录 vister 开源地址: python版本: 在python3.10以上版本安装 viser, 测试ok的案例: 立方体mesh选中 SMPL-X可视化 ok 推理代码: vister 开源地址: GitHub - nerfstudio-project/viser: Web-based 3D visualization + Python python版本: 在python3.10以上版本…

备战蓝桥杯:树的存储与遍历(dfs和bfs)

树的概念 树的逻辑结构是树形结构&#xff0c;和我们之前的线性结构又不太一样了&#xff0c;是一种一对多的关系 树的结点分为根节点&#xff0c;叶子结点&#xff08;没有分支的结点&#xff09; 以及分支结点 从上往下看&#xff0c;每个结点都有0个或多个后继 从下往上…

Lesson 109 A good idea

Lesson 109 A good idea 词汇 idea n. 主意&#xff0c;想法 复数&#xff1a;ideas 用法&#xff1a;口语&#xff1a;Good idea! 好主意&#xff01;       Big idea! 高见&#xff01;好主意&#xff01;       Great idea! 好主意       Bad idea! 坏主…

leetcode79.单词搜索

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相…