0
点赞
收藏
分享

微信扫一扫

SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送 2.0版本

天悦哥 2022-12-03 阅读 204


​​SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送1.0版本​​

 

开发环境说明

  • JDK1.8
  • springboot版本: 2.0.3.RELEASE

 

快速入门

​​V2.0快速使用文档​​

 

2.X版本使用文档

jar包依赖

<dependency>
<groupId>com.github.answerail</groupId>
<artifactId>dingtalk-spring-boot-starter</artifactId>
<version>2.0.4-RELEASE</version>
</dependency>

<!-- 2.0.1及之前版本需引入 -->
<!--
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.10.0</version>
</dependency>
-->

 

配置文件

spring:
dingtalk:
token-id: c60d4824e0ba4a30544e81212256789331d68b0085ed1a5b2279715741355fbc
project-id: ${spring.application.name}
title: 预警通知
secret: APC3eb471b2761851d6ddd1abcndf2d97be21447d8818f1231c5ed61234as52d1w0
# xml方式配置, 注解方式不需要配置
dinger-locations: classpath*:dinger/*.xml

​​token-id获取方式​​: token-id的值就是机器人的Webhook地址中access_token的值。

 

启动类设置

@SpringBootApplication
@MapperScan(basePackages = "com.jaemon.dt.mapper")
// 标识Dinger层扫描路径
@DingerScan(basePackages = "com.jaemon.dt.dinger")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);

}
}

  • @DingerScan: 标识Dinger层扫描路径

 

Dinger层

注解方式

public interface OrderDinger {

@DingerText(value = "订单号${orderNum}下单成功啦, 下单金额${amt}", phones = {"13520200906"})
DingTalkResult orderSuccess(
@Parameter("orderNum") String orderNo,
@Parameter("amt") BigDecimal amt
);

@DingerMarkdown(
value = "#### 下单失败啦 @13520200906\n - 订单号: ${orderNo}\n - 标识: ${flag}\n - 数量: ${num}",
title = "下单结果反馈",
phones = {"13520200906"},
tokenId = @DingerTokenId(
value = "c60d4824e0ba4a30544e81212256789331d68b0085ed1a5b2279715741355fbc",
secret = "APC3eb471b2761851d6ddd1abcndf2d97be21447d8818f1231c5ed61234as52d1w0")
)
DingTalkResult orderFailed(String orderNo, int num, boolean flag);
}

  • @Keyword: 标识关键词,用于根据关键词信息快速定位请求日志(主要用于发送钉钉消息异常时的日志定位);
  • @Parameter: 如果消息体中使用的参数变量和定义的入参名称不一致,可使用该注解进行个性化设置参数变量名称;
  • @DingerClose: 用于关闭 XXXDinger.java 或者指定其中的一个至多个方法;
  • 作用于Dinger类上,关闭Dinger类中所有方法通知;
  • 作用于方法上, 关闭当前方法通知;
  • @Dinger: 用于指定 @DingerScan 指定路径之外的 XXXDinger.java 文件

 

xml方式

配置文件新增dinger-locations路径配置

spring:
dingtalk:
dinger-locations: classpath*:dinger/*.xml

如: resources/dinger/OrderDinger.xml

OrderDinger.java接口层

public interface OrderDinger {
DingTalkResult orderSuccess(
@Parameter("orderNum") String orderNo,
@Parameter("amt") BigDecimal amt
);

DingTalkResult orderFailed(String orderNo, int num, boolean flag);
}

OrderDinger.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE dinger SYSTEM "dingtalk-dinger.dtd">
<!DOCTYPE dinger PUBLIC "-//AnswerAIL//DTD Dinger 2.0//EN" "dingtalk-dinger.dtd">

<dinger namespace="com.jaemon.dt.dinger.OrderDinger">

<message id="orderSuccess" type="TEXT">
<body>
<!-- <type>text</type> -->
<content>
订单号${orderNum}下单成功啦, 下单金额${amt}
</content>

<phones atAll="true" />
</body>

<!-- 配置消息体使用的钉钉机器人信息 -->
<configuration async="false">
<token-id
secret="APC3eb471b2761851d6ddd1abcndf2d97be21447d8818f1231c5ed61234as52d1w0"
decrypt-key="MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeSpqEVuq2NVNDu2lJb">iH178Wn85rI+Mlguimxml79o5/w/CVGEjVWULfJog
</token-id>
<!-- 是否异步发送 -->
<!-- <async-execute>true</async-execute> -->
</configuration>
</message>


<message id="orderFailed" type="MARKDOWN">
<body>
<!-- <type>markdown</type> -->
<content title="下单结果反馈">
#### 下单失败啦 @13520200906
- 订单号: ${orderNo}
- 标识: ${flag}
- 数量: ${num}
</content>

<!-- markdown不支持@全部, 只支持@指定用户 -->
<phones>
<!-- 指定的phone的用户必须在tokenId群中 -->
<phone value="13520200906" />
</phones>
</body>
</message>
</dinger>

​​XXXDinger.xml 配置模板文档​​

 

验证

@Slf4j
@RestController
public class TestController {
@Autowired
private OrderDinger orderDinger;

@GetMapping("/notify")
public void notify() {
DingTalkResult result = orderDinger.orderSuccess("20200906", BigDecimal.valueOf(10000));
log.info(JSON.toJSONString(result));

result = orderDinger.orderFailed("20200906", 10, false);
log.info(JSON.toJSONString(result));
}
}

 

收到消息格式

钉钉收到的orderSuccess通知消息

  • 订单号20200906下单成功啦, 下单金额1000@所有人

钉钉收到的orderFailed通知消息

下单失败啦 @XXX

  • 订单号: 20200906
  • 标识: false
  • 数量: 10


举报

相关推荐

0 条评论