這篇文章主要介紹了Asp.Net Core對(duì)接釘釘群機(jī)器人的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
專(zhuān)注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)富陽(yáng)免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。前言
釘釘作為企業(yè)辦公越來(lái)越常用的軟件,對(duì)于企業(yè)內(nèi)部自研系統(tǒng)提供接口支持,以此來(lái)打通多平臺(tái)下的數(shù)據(jù),本次先使用最簡(jiǎn)單的釘釘群機(jī)器人完成多種形式的消息推送,參考釘釘開(kāi)發(fā)文檔中自定義機(jī)器人環(huán)節(jié),此次嘗試所花的時(shí)間不多,但有幾個(gè)地方是需要注意的。
一、釘釘群中建立機(jī)器人獲取WebHook地址
首先得有一個(gè)釘釘群,如果沒(méi)有得自行創(chuàng)建一個(gè)了,通過(guò)群內(nèi)右上角菜單中找到群機(jī)器人然后添加一個(gè)自定義機(jī)器人
并設(shè)置消息推送開(kāi)啟(默認(rèn)是開(kāi)啟),復(fù)制下一行的webhook地址,該地址將作為后面消息推送的地址
完成即可,如果不確定該地址是否有效可以用命令測(cè)試一下,比如在Linux平臺(tái)下,通過(guò)該命令并將自己的webhook_token替換
curl 'https://oapi.dingtalk.com/robot/send?access_token=cd1eb120c459ced6a65491af7b1eebbc84790fb672077a969bae8bb203aa1c52' \ -H 'Content-Type: application/json' \ -d ' {"msgtype": "text", "text": { "content": "我就是我, 是不一樣的煙火" } }'
然后回車(chē)進(jìn)行測(cè)試,即刻收到群機(jī)器人推送的消息
二、參考文檔完成基礎(chǔ)類(lèi)的封裝并處理相關(guān)字段
接下來(lái)開(kāi)始在代碼中完成對(duì)WebHook地址的調(diào)用,可以先分析一下群機(jī)器人的文檔,可以獲悉有五種消息類(lèi)型:文本 (text)、連接 (link)、markdown(markdown)、ActionCard、FeedCard消息類(lèi)型,其中的actionCard分整體和獨(dú)立兩類(lèi)。針對(duì)這些類(lèi)型及給出的參數(shù)要求完成基礎(chǔ)類(lèi)的設(shè)計(jì)和封裝,以text類(lèi)型為例:
其中的msgtype是五種消息類(lèi)型的字符串,因此針對(duì)該部分設(shè)計(jì)一個(gè)枚舉,作為消息類(lèi)型的區(qū)分。
////// 釘釘群機(jī)器人消息類(lèi)型枚舉 /// public enum MsgTypeEnum { text, link, markdown, actionCard, feedCard }
設(shè)計(jì)一個(gè)text類(lèi)并給定一個(gè)屬性Content,在設(shè)計(jì)時(shí)我們喜歡使用帕斯卡命名法,但是釘釘接口卻不允許,如果不做一些處理,直接使用Content屬性將會(huì)調(diào)用不通接口,這點(diǎn)需要注意,使用Newtonjson提供的打包成json時(shí)用指定的名稱(chēng)替換來(lái)滿(mǎn)足釘釘接口需求。
////// 文本類(lèi)型 /// public class Text { ////// 文本內(nèi)容 /// [JsonProperty(PropertyName = "content")] public string Content { get; set; } }
其次對(duì)指定人群做一個(gè)類(lèi)的封裝,同樣需要處理其中的屬性在序列化時(shí)的替換名稱(chēng)。
////// @指定人 /// public class At { ////// @的聯(lián)系人 /// [JsonProperty(PropertyName = "atMobiles")] public ListAtMobiles { set; get; } /// /// 是否@所有人 /// [JsonProperty(PropertyName = "isAtAll")] public bool IsAtAll { set; get; } }
通過(guò)分析五種消息類(lèi)型,其中的一些參數(shù)可以完成共用,對(duì)自定義釘釘機(jī)器人文檔的一系列挖掘后,確定了這幾個(gè)類(lèi)和枚舉
接下來(lái)可以完成對(duì)機(jī)器人調(diào)用了并使用不同消息類(lèi)型推送到釘釘群中。
三、完成對(duì)釘釘群機(jī)器人的調(diào)用
首先在ConfigureService方法中完成對(duì)HttpClientFactory的注入
本次直接在Asp.Net Core WebApi下完成機(jī)器人的調(diào)用,新建一個(gè)DingTalk的控制器,然后完成對(duì)IHttpClientFactory的注入工作,便開(kāi)始接下來(lái)的服務(wù)調(diào)用了,對(duì)于釘釘?shù)腤ebHook_Token的存放可以選擇配置文件或是如果只是嘗試,可以直接用一個(gè)變量保存即可。
////// 發(fā)送釘釘消息接口 /// [Route("api/[controller]")] [ApiController] public class DingTalkController : ControllerBase { private readonly string WebHook_Token = "https://oapi.dingtalk.com/robot/send?access_token=cd1eb120c459ced6a65491af7b1eebbc84790fb672077a969bae8bb203aa1c52"; private readonly IHttpClientFactory _httpClientFactory; public DingTalkController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory; } }
再次以text文本為例并完成文本消息的推送,建立一個(gè)action,用來(lái)發(fā)送文本消息,在其中完成對(duì)釘釘接口需要參數(shù)的組裝工作,最終使用統(tǒng)一的發(fā)送方法完成消息推送。
////// 調(diào)用釘釘機(jī)器人發(fā)送文本內(nèi)容 /// ///[HttpGet] [Route(nameof(TextContent))] public async Task TextContent() { //消息類(lèi)型 var msgtype = MsgTypeEnum.text.ToString(); //文本內(nèi)容 var text = new Text { Content = "看萬(wàn)山紅遍,層林盡染;漫江碧透,百舸爭(zhēng)流@15675120617" }; //指定目標(biāo)人群 var at = new At() { AtMobiles = new List () { "15675120617" }, IsAtAll = false }; var response = await SendDingTalkMessage(new { msgtype, text, at }); return Ok(response); }
對(duì)于發(fā)送方法內(nèi)需要根據(jù)釘釘文檔的一些要求完成設(shè)計(jì),如文檔指明需要使用Post提交請(qǐng)求并使用UTF8編碼,我直接在控制器內(nèi)新建了一個(gè)方法(盡管不太合理),首先對(duì)內(nèi)容進(jìn)行序列化并封裝,然后通過(guò)HttpClientFactory新建client并完成發(fā)送消息。
////// 執(zhí)行發(fā)送消息 /// /// ///private async Task SendDingTalkMessage(object value) { var sendMessage = JsonConvert.SerializeObject(value); var request = new HttpRequestMessage(HttpMethod.Post, WebHook_Token) { //釘釘文檔需指定UTF8編碼 Content = new StringContent(sendMessage, Encoding.UTF8, "application/json") }; var client = _httpClientFactory.CreateClient(); var response = await client.SendAsync(request); return response; }
啟動(dòng)程序并通過(guò)url訪問(wèn)控制器內(nèi)的相應(yīng)方法完成消息推送,注意各屬性的命名方式或通過(guò)特性轉(zhuǎn)換后的命名方式需要滿(mǎn)足釘釘接口文檔(文檔中FeedCard類(lèi)型后兩個(gè)參數(shù)不太標(biāo)準(zhǔn))。
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Asp.Net Core對(duì)接釘釘群機(jī)器人的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司,,關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!