这是一个消息中间件
通过配置和编码,即可将相同的消息通过钉钉自定义机器人、钉钉消息、飞书自定义机器人、飞书消息、企业微信自定义机器人、企业微信消息以及邮箱消息通道进行发送
提供统一消息维护方式,发送时会按照对应的平台类型自动进行转换
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
1.1.0版本后升级到jdk 17 SpringBoot 3.2+
<dependency>
<groupId>com.gitee.wb04307201</groupId>
<artifactId>message-spring-boot-starter</artifactId>
<version>1.1.3</version>
</dependency>
@EnableMessage
@SpringBootApplication
public class MessageDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringTestApplication.class, args);
}
}
钉钉自定义机器人的配置请参考 自定义机器人接入 自定义机器人安全设置 获得access_token和secret
message:
dingtalk:
customRobot:
- alias: alias #所有通道的别名不能重复
accessToken: accessToken
secret: secret
钉钉消息需要先注册企业内部应用,应用的配置请参考 基础概念 获得appkey、appsecret、agentId
message:
dingtalk:
message:
- alias: alias #所有通道的别名不能重复
appkey: appkey
appsecret: appsecret
agentId: agentId
飞书自定义机器人的配置请参考 自定义机器人使用指南 获得hookid、secret
message:
feishu:
message:
- alias: alias #所有通道的别名不能重复
hookid: hookid
secret: secret
飞书消息需要先注册企业内部应用,应用的配置请参考 如何获取应用的 App ID 获得appId、secret
message:
feishu:
message:
- alias: alias #所有通道的别名不能重复
appId: appId
appSecret: appSecret
企业微信自定义机器人的配置请参考 群机器人配置说明 获得key
message:
weixin:
message:
- alias: alias #所有通道的别名不能重复
key: key
企业微信消息需要先注册企业内部应用,应用的配置请参考 基本概念介绍 获得corpi、corpsecret、agentid
message:
weixin:
message:
- alias: alias #所有通道的别名不能重复
corpid: corpid
corpsecret: corpsecret
agentid: agentid
message:
mail:
smtp:
- alias: alias #所有通道的别名不能重复
host: host
from: from
username: username
password: password
@RestController
public class DemoController {
@Autowired
MessageService messageService;
@GetMapping(value = "/message/send")
public String send() {
return messageService.send(
RequestContent.buildMarkdown()
.addAlias("dd-1", "mail-1") //通过配置的别名指定消息通道
.addMessageType(MessageType.DingtalkCustomRobot) //通过消息通道类型指定消息通道
.title("测试群发")
.addLine(SubLine.title("这是一行标题1", 1))
.addLine(SubLine.title("这是一行标题2", 2))
.addLine(SubLine.text("这是一行文本"))
.addLine(SubLine.link("这是一行链接", "https://gitee.com/wb04307201/message-spring-boot-starter"))
.addLine(SubLine.quote("这是一行引用"))
.addLine(SubLine.bold("这是一行加粗"))
).toString();
}
}
行数据类型与转换格式对照表
message | 钉钉 | 微信 | 飞书 | 邮件 |
---|---|---|---|---|
SubLine.text | Markdown: 文字 | Markdown: 文字 | 文本标签:text | html: <p> |
SubLine.title | Markdown: 标题 | Markdown: 标题 | 文本标签:text | html: <h1>~<h6> |
SubLine.link | Markdown: 链接 | Markdown: 链接 | 超链接标签:a | html: <a> |
SubLine.quote | Markdown: 引用 | Markdown: 引用 | 文本标签:text | html: <blockquote> |
SubLine.bold | Markdown: 加粗 | Markdown: 加粗 | 文本标签:text | html: <strong> |
在实际项目中使用消息通道时, 比如使用钉钉自定义机器人发送群消息时,会出现@所有人或者@某个人的需求 使用钉钉消息的时候,也需要指定特定用户 这是需要额外的参数协助消息发往正确的目标 下面的示例是为钉钉自定义机器人增加 @所有人 参数
RequestContent.buildMarkdown()
.addDingtalkCustomRobot("isAtAll", Boolean.TRUE) //根据消息通道类型添加参数
.addDingtalkCustomRobot("dd-1", "isAtAll", Boolean.TRUE) //根据消息通道别名添加参数,优先级更大
.title("测试消息")
.addLine(SubLine.text("这是一行文本"));
参数 | 参数类型 | 说明 |
---|---|---|
atMobiles | List | 被@人的手机号 |
atUserIds | List | 被@人的用户userid |
isAtAll | Boolean | 是否@所有人 |
参数 | 参数类型 | 说明 |
---|---|---|
userid_list | String | user123,user456 接收者的userid列表,最大用户列表长度100 |
dept_id_list | String | 123,345 接收者的部门id列表,最大列表长度20。接收者是部门ID时,包括子部门下的所有用户。 |
to_all_user | Boolean | 是否发送给企业全部用户(当设置为false时必须指定userid_list或dept_id_list其中一个参数的值) |
@所有人 .addFeishuCustomRobot("all","所有人") @单个用户(填入用户的 Open ID,且必须是有效值,否则取名字展示,并不产生实际的 @ 效果) .addFeishuCustomRobot("ou_xxx","名字")
参数 | 参数类型 | 说明 |
---|---|---|
receive_id_type | String | 消息接收者id类型 open_id/user_id/union_id/email/chat_id |
receive_id | String | 消息接收者的ID,ID类型应与查询参数receive_id_type 对应 |
暂无支持的额外参数
参数 | 参数类型 | 说明 |
---|---|---|
touser | String | 指定接收消息的成员,成员ID列表(多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为"@all",则向该企业应用的全部成员发送 |
toparty | String | 指定接收消息的部门,部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为"@all"时忽略本参数 |
totag | String | 指定接收消息的标签,标签ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为"@all"时忽略本参数 |
参数 | 参数类型 | 说明 |
---|---|---|
to | String | 收件邮箱1,收件邮箱2 |
//可以通过如下方法添加平台信息
messageService.add
//可以通过如下方法删除平台信息
messageService.removeByAlias