V2.0版本新增支持以下功能
仅支持text和markdown格式
XXXDinger
内定义的所有消息体SpringBoot集成DingTalk钉钉机器人实现消息同步/异步预警推送 2.0版本
V1.0快速使用文档
<dependency>
<groupId>com.github.answerailgroupId>
<artifactId>dingtalk-spring-boot-starterartifactId>
<version>1.0.5-RELEASEversion>
dependency>
<dependency>
<groupId>com.squareup.okhttp3groupId>
<artifactId>okhttpartifactId>
<version>3.10.0version>
dependency>
spring:
dingtalk:
# 必填, 项目ID, 推荐值: ${spring.application.name}
project-id: ${spring.application.name}
# 必填
token-id: c60d4824e0ba4a30544e81212256789331d68b0085ed1a5b2279715741355fbc
# 选填, 自定义关键字
title: 消息推送
token-id获取方式: token-id的值就是机器人的Webhook地址中access_token的值。
public class Demo {
@Autowired
private DingTalkRobot dingTalkRobot;
public void test() {
String keyword = "DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM";
String subTitle = "服务启动通知";
String content = "服务启动异常啦。。。";
// 方式1-text类型
dingTalkRobot.send(MsgTypeEnum.TEXT, keyword, subTitle, content);
// 方式2-text类型带@指定群成员
dingTalkRobot.send(MsgTypeEnum.TEXT, keyword, subTitle, content,
Lists.newArrayList("135XXXXXXXX"));
// 方式3-text类型带@全部群成员
dingTalkRobot.sendAll(MsgTypeEnum.TEXT, keyword, subTitle, content);
}
}
public class Demo {
@Autowired
private DingTalkRobot dingTalkRobot;
public void test() {
String keyword = "DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM";
String subTitle = "服务启动通知";
String content = "服务启动异常啦。。。";
// 方式1-markdown类型
dingTalkRobot.send(MsgTypeEnum.MARKDOWN, keyword, subTitle, content);
// 方式2-markdown类型带@指定群成员
dingTalkRobot.send(MsgTypeEnum.MARKDOWN, keyword, subTitle, content,
Lists.newArrayList("135XXXXXXXX"));
}
}
markdown消息体暂时不支持@全部
以下为个性化配置部分
如果只是简单的往钉钉群推动消息的, 以上内容可以满足你的需求。如果有需要考虑定制化配置的, 可继续往下阅读, 以下内容为独立配置文档说明, 如需进行整体配置请参考个性化整体配置
@Configuration
public class MyConfiguration {
// 自定义text类型消息体
@Bean
public CustomMessage textMessage() {
return (dingTalkProperties, subTitle, keyword, content, phones) -> {
String message = null;
// ...
return message;
};
}
// 自定义markdown类型消息体
@Bean
public CustomMessage markDownMessage() {
return (dingTalkProperties, subTitle, keyword, content, phones) -> {
String message = null;
// ...
return message;
};
}
}
在默认设置的消息体中可以根据keyword字段的值快速定位到系统日志信息
【通知】 服务启动通知
- 项目名称: oms
- 检索关键字: DYZ3AALTRBD2AIDLL0Y3EQ4TYGLJDUM
- 内容: 服务启动异常啦。。。.
@Configuration
public class MyConfiguration {
// 自定义异常回调函数
@Bean
public Notice notice() {
return (dkExCallable) -> {
// ...
};
}
}
调用消息推送时出现异常时回调处理
@Data
@AllArgsConstructor
public class SignDTO extends SignBase {
private String sign;
private Long timestamp;
@Override
public String transfer() {
StringBuilder signStr = new StringBuilder(SEPERATOR);
signStr
.append("timestamp=").append(this.timestamp).append(SEPERATOR)
.append("sign=").append(this.sign);
return signStr.toString();
}
}
@Configuration
public class MyConfiguration {
@Bean
public DkSignAlgorithm<SignDTO> dkSignAlgorithm() {
return new DkSignAlgorithm<SignDTO>() {
@Override
public SignDTO sign(String secret) throws Exception {
Long timestamp = System.currentTimeMillis();
// TODO 使用默认算法, 如果后期算法改变, 可在此更变签名算法
String sign = algorithm(timestamp, secret);
return new SignDTO(sign, timestamp);
}
};
}
}
该功能只针对后期版本变更进行扩展, 当前版本没有使用的必要
@Configuration
public class MyConfiguration {
@Bean
public DkIdGenerator dkIdGenerator() {
return () -> {
String dkid = null;
// ...
return dkid;
};
}
}
注意ID最好保证全局唯一,
同步调用直接返回响应结果,异步操作返回处理id(dkid)
。
@Configuration
public class MyConfiguration {
@Bean
public DkCallable dkCallable() {
return (dkid, result) -> {
// ...
};
}
}
此处方法形参(dkid, result),其中: dkid也就是异步通知的返回结果, result为请求实际的响应报文字符串。
注意开启异步处理时使用内置线程池, 如果项目中有定义其他线程池配置, 注入线程池对象时请指定线程池名称。 如:
@Qualifier("executor")
@Configuration
public class MyConfiguration {
@Bean
public Executor dingTalkExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// ...
return executor;
}
}
@Configuration
public class MyConfiguration {
@Bean
public OkHttpClient okHttpClient() {
// ...
}
}