钉钉消息推送()

记录一下java实现消息推送

  1. 首先添加依赖
XML 复制代码
 <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>
  1. 配置钉钉推送application.yml文件
TypeScript 复制代码
dingding:
  agentId: 25702
  appKey: dingwsjy7bu
  appSecret: eFROKkCe5JQvYOuru0ZXKzSyaBL9RAI-o6KTilfmVn3STg
  messageServerUrl: https://oapi.dingtalk.com/topapi/message
  tokenServerUrl: https://oapi.dingtalk.com/
  getbymobileServerUrl: https://oapi.dingtalk.com/topapi/v2
  secret: SECc10440b6571aa687b056488d93eb418443ac8d89615489d9a0b
  accessToken: 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;
}
  1. 创建一个单独的service和实现类
java 复制代码
public interface DingMessageService {


    /**
     * 发送钉钉群
     * @param markdown
     */
    void sendCrowdMessage(OapiRobotSendRequest.Markdown markdown);
}

实现类

java 复制代码
@Slf4j
@Service
public class DingMessageServiceImpl implements DingMessageService {

    /**
     * DingDing配置
     */
    @Autowired
    private DingConfig dingConfig;



    @Async("threadPool")
    @Override
    public 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());
        }
    }


}
  1. 需要直接注入调用即可
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 的值

相关推荐
二哈赛车手1 分钟前
新人笔记---实现简易版的rag的bm25检索(利用ES),以及RAG上传时的ES与向量数据库双写
java·数据库·笔记·spring·elasticsearch·ai
winner88814 分钟前
从零吃透C++命名空间、std、#include、string、vector
java·开发语言·c++
计算机安禾12 分钟前
【Linux从入门到精通】第49篇:服务器故障排查终极指南——思路决定出路
linux·运维·服务器
AI人工智能+电脑小能手13 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
古月-一个C++方向的小白14 分钟前
Linux——初识文件
linux·运维·服务器
bzmK1DTbd22 分钟前
SOLID原则在Java中的实践:单一职责与开闭原则
java·开发语言·开闭原则
winner888127 分钟前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
北山有鸟31 分钟前
编译香橙派内核
linux·运维·服务器
直奔標竿37 分钟前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
小此方39 分钟前
Re:Linux系统篇(八)权限篇 ·三:深度解析从 umask 位运算到粘滞位的“权力锁”
linux·运维·服务器