当前位置: 首页 > article >正文

钉钉消息推送()

记录一下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: 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类型,如下

/**
 * 读取钉钉相关配置
 *
 * @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和实现类

public interface DingMessageService {


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

实现类

@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());
        }
    }


}

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

                //推送钉钉
                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.kler.cn/a/509044.html

相关文章:

  • 【爬虫】使用 Scrapy 框架爬取豆瓣电影 Top 250 数据的完整教程
  • 2024年度个人成长与技术洞察总结
  • 【机器学习:三十二、强化学习:理论与应用】
  • 重拾Python学习,先从把python删除开始。。。
  • C#表达式和运算符
  • 算法面试准备 - 手撕系列第七期 - MLP(利用FashionMNIST数据集)
  • 数据结构——队列和栈(介绍、类型、Java手搓实现循环队列)
  • RV1126+FFMPEG推流项目(5)VI和VENC模块绑定,并且开启线程采集
  • 【Django开发】django美多商城项目完整开发4.0第12篇:商品部分,表结构【附代码文档】
  • 动手学大数据-1大数据体系介绍与 SQL 处理流程
  • 58,【8】BUUCTF [PwnThyBytes 2019]Baby_SQL1
  • Python 调整 Excel 中的行列顺序
  • 【漫话机器学习系列】053.梯度爆炸(Exploding Gradient Problem)
  • Day30上 - ChromaDB 向量数据库
  • 基于springboot+vue的食物营养分析与推荐网站的设计与实现
  • 性能测试实时监听工具Influx+Grafana
  • Banana Pi BPI-RV2 RISC-V路由开发板采用矽昌通信SF2H8898芯片
  • Web开发 -前端部分-CSS-2
  • 搜广推实习面经三
  • 机器学习之决策树(DecisionTree)
  • AD域学习笔记
  • 基于C语言的通讯录实现
  • Kotlin语言的数据库交互
  • UI自动化测试:异常截图和page_source
  • 模拟练习题
  • BilibiliPotPlayer插件的登录第二天失效,无法看高清视频,要删掉浏览器上的cookie