1、智能群助手→添加机器人→自定义。添加后,保存其中的webhook地址和加签密钥。
2、 Java代码如下,具体使用的时候请替换真实的机器人密钥、webhook地址和通知人手机号。
import cn.hutool.http.HttpUtil;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSON;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.util.List;
import java.util.Map;
/**
*@author: Chris.Mont
*@date: 2021-06-04 15:25
*@desc: 对接钉钉,发送消息
*/
@Service
public class DingMessageBiz {
/**
* 群里面发送消息
* @param content
* @throws Exception
*/
public void sendMsg(String content) throws Exception {
//群机器人复制到的秘钥secret
String secret = "机器人密钥";
//获取系统时间戳
Long timestamp = System.currentTimeMillis();
//拼接
String stringToSign = timestamp + "\n" + secret;
//使用HmacSHA256算法计算签名
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
//进行Base64 encode 得到最后的sign,可以拼接进url里
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
//钉钉机器人地址(配置机器人的webhook),为了让每次请求不同,避免钉钉拦截,加上时间戳
String dingUrl = "webhook地址" + "×tamp=" + timestamp + "&sign=" + sign;
try {
//是否通知所有人,为true则@所有人
boolean isAtAll = false;
//通知具体人的手机号码列表
List<String> mobileList = Lists.newArrayList();
mobileList.add("15137778889");
//钉钉机器人消息内容
content += timestamp;
//组装请求内容
String reqStr = buildReqStr(content, isAtAll, mobileList);
//推送消息(http请求)
String result = HttpUtil.post(dingUrl, reqStr);
System.out.println("result == " + result);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 组装请求报文
* @param content
* @return
*/
private static String buildReqStr(String content, boolean isAtAll, List<String> mobileList) {
//消息内容
Map<String, String> contentMap = Maps.newHashMap();
contentMap.put("content", content);
//通知人
Map<String, Object> atMap = Maps.newHashMap();
//1.是否通知所有人
atMap.put("isAtAll", isAtAll);
//2.通知具体人的手机号码列表
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);
}
}
最后通知所有人和某个人的效果如下