.Net Core 釘釘自定義機器人接入
阿新 • • 發佈:2022-05-17
接入步驟
獲取自定義機器人Webhook
1.選擇需要新增機器人的群聊,然後依次單擊群設定 > 智慧群助手。
2.在機器人管理頁面選擇自定義機器人,輸入機器人名字並選擇要傳送訊息的群,同時可以為機器人設定機器人頭像。
3.完成必要的安全設定,勾選我已閱讀並同意《自定義機器人服務及免責條款》,然後單擊完成。這裡有三種加密方式,
常用的一般都是使用加密方式,其他兩種方式比較簡單,這裡不錯特殊介紹
3.完成安全設定後,複製出機器人的Webhook地址,可用於向這個群傳送訊息,格式如下https://oapi.dingtalk.com/robot/send?access_token=XXXXXX
當前自定義機器人支援以下訊息型別,請根據自己的使用場景選擇合適的型別,詳情參見訊息型別及資料格式。
- 文字 (text)
- 連結 (link)
- markdown(markdown)
- ActionCard
- FeedCard
程式碼
[ApiController] [Route("[controller]/[Action]")] public class NoticeController : ControllerBase { private readonly IHttpClientFactory _httpClientFactory; public NoticeController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } [ActionName("DingDing")] [HttpPost] public async Task<string> DingDing(DindDingInput input) { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var client = _httpClientFactory.CreateClient("dingding"); if (input.AccessToken.Length == 0 || input.Secret.Length == 0) { return "非法請求"; } // 時間戳精確到毫秒,這裡需要注意下 var timestamp = ((DateTime.Now.Ticks - TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1)).Ticks) / 10000).ToString(); var stringToSign = timestamp + "\n" + input.Secret; var sign = EncryptWithSHA256(stringToSign, input.Secret); // https://oapi.dingtalk.com/robot/send?access_token=XXXXXX×tamp=XXX&sign=XXX var url = new Uri($"https://oapi.dingtalk.com/robot/send?access_token={input.AccessToken}×tamp={timestamp}&sign={sign}"); client.Timeout = new TimeSpan(0, 0, 10); var context = new DinDingMessageText() { Text = new Text() { Content = input.Text }, AT = new MessageAT() { AtMobiles = input.AtMobiles } }; var response = await client.PostAsJsonAsync(url, context); var result = await response.Content.ReadAsStringAsync(); Console.WriteLine(result); return result; } /// <summary> /// Base64 SHA256 /// </summary> /// <param name="data">待加密資料</param> /// <param name="secret">金鑰</param> /// <returns></returns> public static string EncryptWithSHA256(string data, string secret) { secret = secret ?? ""; // 1、string 轉換成 utf-8 的byte[] var encoding = Encoding.UTF8; byte[] keyByte = encoding.GetBytes(secret); byte[] dataBytes = encoding.GetBytes(data); // 2、 HMACSHA256加密 using (var hmac256 = new HMACSHA256(keyByte)) { byte[] hashData = hmac256.ComputeHash(dataBytes); // 3、轉換成base64 var base64Str = Convert.ToBase64String(hashData); // 4、urlEncode編碼 return System.Web.HttpUtility.UrlEncode(base64Str, Encoding.UTF8); } } }
參考文件
- 釘釘開放文件-自定義機器人接入 https://open.dingtalk.com/document/group/custom-robot-access