1.釘釘群中申請(qǐng)釘釘機(jī)器人
第一步:群管理–> 智能群助手–> 添加機(jī)器人–> 自定義
第二步:通過加簽的形式,需要記住加簽的密碼
第三步:獲取webhook的access_token=***的值記錄下來
文章來源:http://www.zghlxwxcb.cn/news/detail-513411.html
2.釘釘相關(guān)配置
#釘釘消息配置
#對(duì)應(yīng)Webhook中的access_token值
ding.robot.token= ****
#對(duì)應(yīng)安全設(shè)置->加簽方式中的密鑰
ding.robot.key=***
#手機(jī)號(hào)可以@到具體某人,以;分割
ding.robot.at=****
3.釘釘集成代碼
/**
* @Description: 釘釘消息管理
* @author: wanjun
*/
public interface IDingManager
{
/**
* @Description: 發(fā)送釘釘消息
* @param robotKey 對(duì)應(yīng)Webhook中的access_token值
* @param robotToken 對(duì)應(yīng)安全設(shè)置->加簽方式中的密鑰
* @param dingRobotAt 根據(jù)手機(jī)號(hào)可以@到具體某人,以;分割
* @param content 發(fā)送內(nèi)容
* @return: void
*/
String sendDingMsg(String robotKey,String robotToken,String dingRobotAt,String content);
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import com.booway.cloud.commons.util.Func;
import com.booway.uums.dingrobot.IDingManager;
/**
* @Description: 釘釘消息管理
* @author: wanjun
*/
public class DingManager implements IDingManager
{
private static final Logger log = LoggerFactory.getLogger(DingManager.class);
private static RestTemplate restTemplate = new RestTemplate();
/**
* 通知人名單
*/
private List<String> mobileList = new ArrayList<String>();
@Override
public String sendDingMsg(String robotKey,String robotToken,String dingRobotAt,String content)
{
String timestamp = String.valueOf(System.currentTimeMillis());
String sign = Func.dingHmacSHA256(timestamp, robotKey);
// 釘釘機(jī)器人地址(配置機(jī)器人的webhook)
String dingUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + robotToken + "×tamp=" + timestamp + "&sign=" + sign;
if (mobileList.isEmpty())
{
//填入手機(jī)號(hào),可以具體@到某個(gè)人
if (!StringUtils.isEmpty(dingRobotAt))
{
String [] all = StringUtils.split(dingRobotAt, ";");
if (all != null)
{
mobileList.addAll(Arrays.asList(all));
}
}
}
//組裝請(qǐng)求內(nèi)容
Map<String, Object> reqStr = buildReqStr(content, mobileList.isEmpty(), mobileList);
return invokeGeneralApi(dingUrl, reqStr);
}
/**
* 組裝請(qǐng)求報(bào)文
* @param content
* @return
*/
private Map<String, Object> buildReqStr(String content, boolean isAtAll, List<String> mobileList) {
//消息內(nèi)容
Map<String, String> contentMap = new HashMap<String, String>();
contentMap.put("content", content);
//通知人
Map<String, Object> atMap = new HashMap<String, Object>();
//1.是否通知所有人
atMap.put("isAtAll", isAtAll);
//2.通知具體人的手機(jī)號(hào)碼列表
atMap.put("atMobiles", mobileList);
Map<String, Object> reqMap = new HashMap<String, Object>();
reqMap.put("msgtype", "text");
reqMap.put("text", contentMap);
reqMap.put("at", atMap);
return reqMap;
}
private String invokeGeneralApi(String url, Map<String, Object> params) {
String body = "";
try {
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(params, headers);
ResponseEntity<String> entity = restTemplate.postForEntity(url, httpEntity, String.class);
body = entity.getBody();
log.info("invokeGeneralApi()>>>[{}]", body);
} catch (RestClientException e) {
log.error("API調(diào)用錯(cuò)誤,接口地址:[{}],請(qǐng)求參數(shù):[{}]", url, params, e);
}
return body;
}
}
public class Func
{
/**
* 釘釘自定義機(jī)器人安全設(shè)置
* 把timestamp+"\n"+密鑰當(dāng)做簽名字符串,使用HmacSHA256算法計(jì)算簽名,然后進(jìn)行Base64 encode,最后再把簽名參數(shù)再進(jìn)行urlEncode,得到最終的簽名(需要使用UTF-8字符集)
* @param secret
* @return
*/
public static String dingHmacSHA256(String timestamp, String secret) {
try {
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");
return sign;
} catch (Exception e) {
ERROR_LOG.error("dingHmacSHA256加密失敗", e);
}
return null;
}
}
4.調(diào)用
dingManager.sendDingMsg(robotKey, robotToken, robotAt, “截止到0點(diǎn),發(fā)現(xiàn)以下賬號(hào)登錄異常(括號(hào)里面為異常次數(shù)):8”);
文章來源地址http://www.zghlxwxcb.cn/news/detail-513411.html
到了這里,關(guān)于java 通過API調(diào)用釘釘機(jī)器人通知的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!