一,先創(chuàng)建一個(gè)釘釘群
圖片.png
圖片.png
二,添加自定義機(jī)器人
圖片.png
三,安全設(shè)置(3選1)
圖片.png
四榴捡, 復(fù)制webhook作為發(fā)送通知的url
圖片.png
剩下的就是在代碼里實(shí)現(xiàn)了
因?yàn)橐l(fā)送網(wǎng)絡(luò)請求 我這邊使用的是hutool工具
添加maven
<!--糊涂工具-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.0.12</version>
</dependency>
這里我封裝了一個(gè)DingDingUtil工具類作為釘釘發(fā)送通知的工具類
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Map;
/**
* @ClassName DingDingUtil
* @Description: 釘釘機(jī)器人消息通知
* @Author Shuai.Zhang
* @Date 2020/8/5
* @Version
**/
@Slf4j
public class DingDingUtil {
//發(fā)送超時(shí)時(shí)間10s
private static final int TIME_OUT = 10000;
/**
* 釘釘機(jī)器人文檔地址https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq
*
* @param webhook
* @param secret 安全設(shè)置 3選1【方式一,自定義關(guān)鍵詞 】 【方式二朱浴,加簽 吊圾,創(chuàng)建機(jī)器人時(shí)選擇加簽 secret以SE開頭】【方式三,IP地址(段)】
* @param content 發(fā)送內(nèi)容
* @param mobileList 通知具體人的手機(jī)號碼列表 (可選)
* @return
*/
public static String sendMsg(String webhook, String secret, String content, List<String> mobileList) {
try {
//釘釘機(jī)器人地址(配置機(jī)器人的webhook)
if (!StringUtils.isEmpty(secret)) {
Long timestamp = System.currentTimeMillis();
String sign = getSign(timestamp, secret);
webhook = new StringBuilder(webhook)
.append("×tamp=")
.append(timestamp)
.append("&sign=")
.append(sign)
.toString();
}
System.out.println("webhook:" + webhook);
//是否通知所有人
boolean isAtAll = false;
//組裝請求內(nèi)容
String reqStr = buildReqStr(content, isAtAll, mobileList);
//推送消息(http請求)
String result = postJson(webhook, reqStr);
log.info("推送結(jié)果result == " + result);
return result;
} catch (Exception e) {
log.info("發(fā)送群通知異常 異常原因:{}", e.getStackTrace());
return null;
}
}
/**
* 組裝請求報(bào)文
* 發(fā)送消息類型 text
*
* @param content
* @return
*/
private static String buildReqStr(String content, boolean isAtAll, List<String> mobileList) {
//消息內(nèi)容
Map<String, String> contentMap = Maps.newHashMap();
contentMap.put("content", content);
//通知人
Map<String, Object> atMap = Maps.newHashMap();
//1.是否通知所有人
atMap.put("isAtAll", isAtAll);
//2.通知具體人的手機(jī)號碼列表
atMap.put("atMobiles", mobileList);
Map<String, Object> reqMap = Maps.newHashMap();
reqMap.put("msgtype", "text");
reqMap.put("text", contentMap);
reqMap.put("at", atMap);
return JSON.toJSONString(reqMap);
}
private static String postJson(String url, String reqStr) {
String body = null;
try {
body = HttpRequest.post(url).body(reqStr).timeout(TIME_OUT).execute().body();
} catch (Exception e) {
e.printStackTrace();
}
return body;
}
/**
* 自定義機(jī)器人獲取簽名
* 創(chuàng)建機(jī)器人時(shí)選擇加簽獲取secret以SE開頭
*
* @param timestamp
* @return
* @throws NoSuchAlgorithmException
* @throws UnsupportedEncodingException
* @throws InvalidKeyException
*/
private static String getSign(Long timestamp, String secret) throws NoSuchAlgorithmException, UnsupportedEncodingException, InvalidKeyException {
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
System.out.println("singn:" + sign);
return sign;
}
public static void main(String[] args) {
String webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxxx";
String secret = "SECxxxxx";
List<String> mobileList = Lists.newArrayList();
mobileList.add("18888888888");
DingDingUtil.sendMsg(webhook, null, "小哥翰蠢,你好", null);
}
}
我們可以先使用main方法測試一下
圖片.png
Tips: 1請嚴(yán)格根據(jù)文檔來設(shè)計(jì)自己的需求 這個(gè)工具類僅僅作為參考项乒,如果需要更多文檔類型 比如markdown 需要稍微按照官方文檔修改一下即可
2.創(chuàng)建機(jī)器人流程的安全設(shè)置根據(jù)自己的實(shí)際情況選擇一種設(shè)置
3.官方文檔很簡單 多看官方文檔