日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

从零开始打造专属钉钉机器人

發(fā)布時間:2023/12/15 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 从零开始打造专属钉钉机器人 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、前言

廢話不多的實(shí)現(xiàn)簡單的釘釘機(jī)器人。我們分為下面幾個步驟來逐步講解。
1.釘釘機(jī)器人的類型
2.如何打造一個最最簡單的釘釘機(jī)器人

二、釘釘機(jī)器人的類型

常用的釘釘機(jī)器人有兩種,
1、通知類型的機(jī)器人:適合在群內(nèi)進(jìn)行一些通知,推薦消息等內(nèi)容。
2、可以回復(fù)消息的機(jī)器人:能夠回復(fù)@機(jī)器人的消息,機(jī)器人會將響應(yīng)內(nèi)容發(fā)送到群里。
本次,我們分別講解兩種機(jī)器人是如何實(shí)現(xiàn)的

三、打造一個最簡單的通知類型釘釘機(jī)器人

首先用通知類型的機(jī)器人為例子。
1. 打開一個你想創(chuàng)建機(jī)器人的釘釘群。
2.在右邊欄選擇更多選項(xiàng),點(diǎn)擊群助手的打開:

然后選擇添加機(jī)器人

選擇自定義機(jī)器人

然后需要注意!在這個配置頁面中。
安全設(shè)置我們選擇【自定義關(guān)鍵詞】
只要每次發(fā)送的消息帶有該自定義關(guān)鍵詞,消息就能成功發(fā)送。接下來選擇同意并完成。

拷貝標(biāo)記出來的完整鏈接【W(wǎng)ebhook】,然后選擇完成

釘釘機(jī)器人的配置就完成了。

3.第三步開始開始寫代碼:
直接上發(fā)起的示例代碼:
apiurl 就是獲取的完整鏈接【W(wǎng)ebhook】

jsonString是發(fā)起的請求內(nèi)容,json格式示例如下:

{
    "msgtype": "text",     //釘釘?shù)陌l(fā)送樣式
    "text": {
        "content": "我就是我, 是不一樣的煙火@156xxxx8827"   //發(fā)送到群中的內(nèi)容
    }, 
    "at": {      //需要消息@對應(yīng)人的手機(jī)號
        "atMobiles": [
            "156xxxx8827", 
            "189xxxx8325"
        ], 
        "isAtAll": false   //如果需要@所有人 這個值設(shè)置為true
    }
}

下面就是發(fā)送代碼:


/// <summary>
/// 以Post方式發(fā)送請求
/// </summary>
/// <param name="apiurl">請求的URL</param>
/// <param name="jsonString">請求的json參數(shù)</param>
/// <param name="headers">請求頭的key-value字典</param>
public static string PostDingDing(string jsonString, string apiurl = null, Dictionary<String, String> headers = null)
        {
            if (apiurl == null)
            {
                apiurl = AppSettings.WebHook;//機(jī)器人的webhook
            }

            WebRequest request = WebRequest.Create(@apiurl);
            request.Method = "POST";
            request.ContentType = "application/json";
            if (headers != null)
            {
                foreach (var keyValue in headers)
                {
                    if (keyValue.Key == "Content-Type")
                    {
                        request.ContentType = keyValue.Value;
                        continue;
                    }
                    request.Headers.Add(keyValue.Key, keyValue.Value);
                }
            }

            if (String.IsNullOrEmpty(jsonString))
            {
                request.ContentLength = 0;
            }
            else
            {
                byte[] bs = Encoding.UTF8.GetBytes(jsonString);
                request.ContentLength = bs.Length;
                Stream newStream = request.GetRequestStream();
                newStream.Write(bs, 0, bs.Length);
                newStream.Close();
            }


            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            Encoding encode = Encoding.UTF8;
            StreamReader reader = new StreamReader(stream, encode);
            string resultJson = reader.ReadToEnd();
            return resultJson;
        }

好了,我們的釘釘機(jī)器人消息就發(fā)起成功了,如下圖:

四、打造一個最簡單的自動回復(fù)機(jī)器人

自動回復(fù)消息的機(jī)器人,能夠回復(fù)@機(jī)器人的消息,機(jī)器人會將響應(yīng)內(nèi)容發(fā)送到群里。
該功能能夠直接在釘釘中就實(shí)現(xiàn)簡單的數(shù)據(jù)查詢與交互。
接下來我們實(shí)現(xiàn)一個簡單的自動回復(fù)機(jī)器人的例子。
1. 首先需要登陸釘釘開發(fā)者后臺,創(chuàng)建一個機(jī)器人。
登錄釘釘開發(fā)者后臺,
選擇應(yīng)用開發(fā)-企業(yè)內(nèi)部開發(fā)-機(jī)器人,點(diǎn)擊創(chuàng)建機(jī)器人。

2.選擇創(chuàng)建機(jī)器人:

選擇應(yīng)用類型是機(jī)器人,想一個機(jī)器人的名稱等等,然后直接點(diǎn)擊【確定創(chuàng)建】,機(jī)器人就創(chuàng)建好了。

3.機(jī)器人簡易配置:

參數(shù) 描述
服務(wù)器出口IP 填寫本企業(yè)服務(wù)器的公網(wǎng)IP
消息接收地址 填寫一個公網(wǎng)可訪問的本企業(yè)HTTPS服務(wù)地址,用于接收POST過來的消息

只用配置如上兩個參數(shù)。一個簡單的機(jī)器人配置就完成了。

4.后端代碼配置:
機(jī)器人配好了,但是目前還是調(diào)試模式,正式上線前,可以在測試群進(jìn)行調(diào)試。

在測試群中,新增一個剛剛建好的機(jī)器人,保存好Webhook

5.接下來是代碼了:
首先構(gòu)建一個接收類

    public class dingRotBotDto
    {
        public string msgtype { get; set; }
        public dingText text { get; set; }
        public string msgId { get; set; }
        public string createAt { get; set; }
        public string conversationType { get; set; }
        public string conversationId { get; set; }
        public string conversationTitle { get; set; }
        public string senderId { get; set; }
        public string senderNick { get; set; }
        public string senderCorpId { get; set; }
        public string senderStaffId { get; set; }
        public string chatbotUserId { get; set; }
        public List<dingUser> atUsers { get; set; }
    }
    public class dingText
    {
        public string content { get; set; }
    }
    public class dingUser
    {
        public string dingtalkId { get; set; }

        public string staffId { get; set; }
    }
參數(shù) 是否必填 類型 描述
msgtype String 目前只支持text
content String 消息文本
msgId String 加密的消息ID
createAt String 消息的時間戳,單位ms
conversationType String 1-單聊、2-群聊
conversationId String 加密的會話ID
conversationTitle String 會話標(biāo)題(群聊時才有)
senderId String 加密的發(fā)送者ID
senderNick String 發(fā)送者昵稱
senderCorpId String 發(fā)送者當(dāng)前群的企業(yè)corpId(企業(yè)內(nèi)部群有)
senderStaffId String 發(fā)送者在企業(yè)內(nèi)的userid(企業(yè)內(nèi)部群有)
chatbotUserId String 加密的機(jī)器人ID
atUsers Array 被@人的信息dingtalkId: 加密的發(fā)送者IDstaffId: 發(fā)送者在企業(yè)內(nèi)的userid(企業(yè)內(nèi)部群有)

然后構(gòu)建一個返回消息類:

    public class DingDingMessage
    {
        public DingDingMessage()
        {
            this.at = new At();
            this.text = new Text();
            this.markdown = new MarkDown();
        }
        public string msgtype { set; get; }//消息類型
        public Text text { set; get; }//text類型
        public MarkDown markdown { set; get; }//markdown類型
        public At at { set; get; }//@
    }
參數(shù) 是否必填 類型 描述
msgtype String text
content String 消息文本
atMobiles Array 被@人的手機(jī)號
isAtAll Boolean @所有人是true,否則為false

現(xiàn)在開始寫一個接收釘釘機(jī)器人消息的方法:

       [HttpPost("GetDingRoBot")]
        public async Task<IActionResult> GetDingRoBot([FromBody] dingRotBotDto input)
        {
            var phone=await _fuluDing.GetUserPhone(input.senderStaffId);//獲取發(fā)送人的電話,回復(fù)消息的時候可以@對應(yīng)的發(fā)送人。
            if (input.text.content.Contains("[XXXX]"))///input.text.content就是接受到的消息,  可以通過改字段進(jìn)行消息過濾
            {
                var s = input.text.content.Split(']')[1];
                var text=await todo...;//調(diào)用自己的方法,返回需要回復(fù)的消息
                SendMessage(text, phone); //發(fā)送回復(fù)的消息
            }
            else
            {
                await SendMessage("請輸入正確的命令:[流水上賬查詢]XXXX", phone);
            }
                return Ok(ResponseResult.Execute("0", null, $"發(fā)送成功"));
        }
        public  SendMessage(string text,string atMobiles)//發(fā)送消息
        {
            DingDingMessage message = new DingDingMessage();
            message.msgtype = "text";
            message.text.content = text;
            message.at.atMobiles.Add(atMobiles);
            String data = JsonConvert.SerializeObject(message);//Json將對象序列化
            var json = await _client.PostAsync("xxxxx", new StringContent(data, Encoding.UTF8, "application/json"));//post 發(fā)起一個請求到 配置該機(jī)器人群的 Webhook 地址xxxxx
        }

這樣 ,一個可以回復(fù)消息的機(jī)器人就配置好了。我們可以試一試。

6.上線:

好了,當(dāng)我們一切弄好就可以正式上線了

只要我們點(diǎn)擊管理頁面的上線。機(jī)器人就正式上線了。
文章的最后,順帶分享下幾個踩坑問題
1.發(fā)起的消息中一定要帶上【自定義關(guān)鍵詞】的內(nèi)容,不然發(fā)起不成功。
2.釘釘機(jī)器人發(fā)送消息有限制,1min最多20條,超過的無法發(fā)送,釘釘會進(jìn)行限流一段時間。

福祿ICH·ERP項(xiàng)目部
福小智

總結(jié)

以上是生活随笔為你收集整理的从零开始打造专属钉钉机器人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。