1. 程式人生 > 其它 >釘釘機器人自定義呼叫

釘釘機器人自定義呼叫

對於釘釘的自定義機器人,可以提供相關的報警預警提示訊息推送的功能。

目前對於java語言開發做出一點整理。

首先可以在自己群裡建立機器人。

設定好自定義的關鍵詞,用來做識別和觸發,當所發的資訊內容沒有關鍵詞時是不會出發訊息提醒的。

隨後會提供一個用於對接的api和附帶的token。注意保姆,因為有了這個token誰的可以識別你的那個群裡的機器人,機器人是唯一的。

所以我就不貼出來。

其次就是使用java做開發了。

我做一個dome例項就不做過的細節。首先需要用到的包如下:

      <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.67</version>
        </dependency>
        <!-- httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.6</version>
        </dependency>

對於api呼叫我採用簡單點的httpclient這個可以用其他的代替,當然json解析也可以。

重點http呼叫,以及解析。

我封裝了一個工具類可以直接呼叫使用,

詳細的功能也有在程式碼理解介紹,工程師還是要在程式碼裡解釋程式碼

import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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; /** * @Author huaiyu yin * @Date 2021/6/17 2:44 下午 * @Version 1.0 */ public class DingDingRobotUtil { private static final Logger logger = LoggerFactory.getLogger(DingDingRobotUtil.class); /** * * @param webhook * @param secret 安全設定 3選1【方式一,自定義關鍵詞 】 【方式二,加簽 ,建立機器人時選擇加簽 secret以SE開頭】【方式三,IP地址(段)】 * @param content 傳送內容 注意帶上關鍵詞 * @param isAtAll 通知所有人 * @return */ public static void sendMsg(String webhook, String secret, String content, boolean isAtAll) { try { //釘釘機器人地址(配置機器人的webhook) if (!StringUtils.isEmpty(secret)) { Long timestamp = System.currentTimeMillis(); String sign = getSign(timestamp, secret); webhook = new StringBuilder(webhook) .append("&timestamp=") .append(timestamp) .append("&sign=") .append(sign) .toString(); } //組裝請求內容 String reqStr = buildReqStr(content, isAtAll, null); //推送訊息(http請求) HttpClientUtil.postJsonData(webhook,reqStr); } catch (Exception e) { logger.info("傳送群通知異常 異常原因:{}", e.getStackTrace()); } } public static void sendMsg(String webhook, String secret, String content, List<String> mobileList) { try { //釘釘機器人地址(配置機器人的webhook) if (!StringUtils.isEmpty(secret)) { Long timestamp = System.currentTimeMillis(); String sign = getSign(timestamp, secret); webhook = new StringBuilder(webhook) .append("&timestamp=") .append(timestamp) .append("&sign=") .append(sign) .toString(); } //是否通知所有人 boolean isAtAll = false; //組裝請求內容 String reqStr = buildReqStr(content, isAtAll, mobileList); //推送訊息(http請求) HttpClientUtil.postJsonData(webhook,reqStr); } catch (Exception e) { logger.info("傳送群通知異常 異常原因:{}", e.getStackTrace()); } } /** * 組裝請求報文 * 傳送訊息型別 text * * @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 JSONObject.toJSONString(reqMap); } /** * * 自定義機器人獲取簽名 * 建立機器人時選擇加簽獲取secret以xxxx開頭 * * @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"); return sign; } public static void main(String[] args) { String webhook = "自己的webhook"; String secret = "SECxxxxx"; String content = "老道提示: 優秀的一天!"; List<String> mobileList = Lists.newArrayList(); mobileList.add("18******"); // DingDingRobotUtil.sendMsg(webhook,secret,content, mobileList); DingDingRobotUtil.sendMsg(webhook,secret,content, true); } }

由於at部分目前我知道也就只有通過手機決定艾特的人,姓名好像不太行。

程式碼可以直接拉下去嘗試。