一、在钉钉上建群,创建机器人
基于Java整合钉钉机器人,实现推送消息到钉钉群,可用于线上服务报警等信息推送提醒。
参考《钉钉开放平台》
钉钉开放平台:https://open.dingtalk.com/document/robots/custom-robot-access
二、pom文件中引入依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
<version>2.0.0</version>
</dependency>
三、编写工具类
该部分列举了三种不同的推送:
1、发送消息到钉钉群,不 @ 任何人,消息内容 text格式
2、发送消息到钉钉群,不 @ 任何人,消息内容 Markdown格式
3、发送消息到钉钉群,并 @ 指定的群成员,消息内容 text格式
可根据自己需求结合钉钉开放平台示例编写需要的推送方式。
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiRobotSendRequest;
import lombok.SneakyThrows;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.Arrays;
import java.util.List;
/**
* @USER: 我叫晨曦啊
* @description: 钉钉消息推送
**/
public class SendMessageToDing {
@SneakyThrows
private static String dingUrl() {
String webhook = "你自己在钉钉创建机器人时的webhook";
String secret = "你自己在钉钉创建机器人时的签名或者密钥";
long timestamp = Instant.now().toEpochMilli();
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
return webhook + "×tamp=" + timestamp + "&sign=" + sign;
}
/**
* 发送消息到钉钉群,不 @ 任何人
*
* @param message 消息内容 text格式
*/
@SneakyThrows
public static void sendMessageWithoutUser(String message) {
DingTalkClient client = new DefaultDingTalkClient(dingUrl());
OapiRobotSendRequest request = new OapiRobotSendRequest();
// 消息类型,此时固定为:text
request.setMsgtype("text");
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
// 消息内容
text.setContent(message);
request.setText(text);
client.execute(request);
}
/**
* 发送消息到钉钉群,不 @ 任何人
*
* @param title 标题
* @param message 消息内容 Markdown格式
*/
@SneakyThrows
public static void sendMessageMarkdown(String title, String message) {
DingTalkClient client = new DefaultDingTalkClient(dingUrl());
OapiRobotSendRequest request = new OapiRobotSendRequest();
// 消息类型,此时固定为:markdown
request.setMsgtype("markdown");
OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
// 首屏会话透出的展示内容
markdown.setTitle(title);
// markdown格式的消息
markdown.setText(message);
request.setMarkdown(markdown);
client.execute(request);
}
/**
* 发送消息到钉钉群,并 @ 指定的群成员
*
* @param message 消息内容 text格式
* @param isNotAll 是否 @ 群内所有人
*/
@SneakyThrows
public static void sendMessageWithUser(String message, boolean isNotAll) {
DingTalkClient client = new DefaultDingTalkClient(dingUrl());
OapiRobotSendRequest request = new OapiRobotSendRequest();
// 消息类型,此时固定为:text
request.setMsgtype("text");
OapiRobotSendRequest.Text text = new OapiRobotSendRequest.Text();
// 消息内容
text.setContent(message);
request.setText(text);
OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
// @ 群成员list
List<String> list = Arrays.asList("被@人的手机号");
at.setAtMobiles(list);
// 不 @ 所有人
at.setIsAtAll(isNotAll);
request.setAt(at);
client.execute(request);
}
}