从零开始打造专属钉钉机器人
一、前言
廢話不多的實現(xiàn)簡單的釘釘機器人。我們分為下面幾個步驟來逐步講解。
1.釘釘機器人的類型
2.如何打造一個最最簡單的釘釘機器人
二、釘釘機器人的類型
常用的釘釘機器人有兩種,
1、通知類型的機器人:適合在群內(nèi)進行一些通知,推薦消息等內(nèi)容。
2、可以回復(fù)消息的機器人:能夠回復(fù)@機器人的消息,機器人會將響應(yīng)內(nèi)容發(fā)送到群里。
本次,我們分別講解兩種機器人是如何實現(xiàn)的
三、打造一個最簡單的通知類型釘釘機器人
首先用通知類型的機器人為例子。
1. 打開一個你想創(chuàng)建機器人的釘釘群。
2.在右邊欄選擇更多選項,點擊群助手的打開:
然后選擇添加機器人
選擇自定義機器人
然后需要注意!在這個配置頁面中。
安全設(shè)置我們選擇【自定義關(guān)鍵詞】
只要每次發(fā)送的消息帶有該自定義關(guān)鍵詞,消息就能成功發(fā)送。接下來選擇同意并完成。
拷貝標記出來的完整鏈接【W(wǎng)ebhook】,然后選擇完成
釘釘機器人的配置就完成了。
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)人的手機號
"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;//機器人的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;
}
好了,我們的釘釘機器人消息就發(fā)起成功了,如下圖:
四、打造一個最簡單的自動回復(fù)機器人
自動回復(fù)消息的機器人,能夠回復(fù)@機器人的消息,機器人會將響應(yīng)內(nèi)容發(fā)送到群里。
該功能能夠直接在釘釘中就實現(xiàn)簡單的數(shù)據(jù)查詢與交互。
接下來我們實現(xiàn)一個簡單的自動回復(fù)機器人的例子。
1. 首先需要登陸釘釘開發(fā)者后臺,創(chuàng)建一個機器人。
登錄釘釘開發(fā)者后臺,
選擇應(yīng)用開發(fā)-企業(yè)內(nèi)部開發(fā)-機器人,點擊創(chuàng)建機器人。
2.選擇創(chuàng)建機器人:
選擇應(yīng)用類型是機器人,想一個機器人的名稱等等,然后直接點擊【確定創(chuàng)建】,機器人就創(chuàng)建好了。
3.機器人簡易配置:
| 參數(shù) | 描述 |
|---|---|
| 服務(wù)器出口IP | 填寫本企業(yè)服務(wù)器的公網(wǎng)IP |
| 消息接收地址 | 填寫一個公網(wǎng)可訪問的本企業(yè)HTTPS服務(wù)地址,用于接收POST過來的消息 |
只用配置如上兩個參數(shù)。一個簡單的機器人配置就完成了。
4.后端代碼配置:
機器人配好了,但是目前還是調(diào)試模式,正式上線前,可以在測試群進行調(diào)試。
在測試群中,新增一個剛剛建好的機器人,保存好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 | 會話標題(群聊時才有) |
| senderId | 是 | String | 加密的發(fā)送者ID |
| senderNick | 是 | String | 發(fā)送者昵稱 |
| senderCorpId | 否 | String | 發(fā)送者當前群的企業(yè)corpId(企業(yè)內(nèi)部群有) |
| senderStaffId | 否 | String | 發(fā)送者在企業(yè)內(nèi)的userid(企業(yè)內(nèi)部群有) |
| chatbotUserId | 是 | String | 加密的機器人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 | 被@人的手機號 |
| isAtAll | 否 | Boolean | @所有人是true,否則為false |
現(xiàn)在開始寫一個接收釘釘機器人消息的方法:
[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就是接受到的消息, 可以通過改字段進行消息過濾
{
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ā)起一個請求到 配置該機器人群的 Webhook 地址xxxxx
}
這樣 ,一個可以回復(fù)消息的機器人就配置好了。我們可以試一試。
6.上線:
好了,當我們一切弄好就可以正式上線了
只要我們點擊管理頁面的上線。機器人就正式上線了。
文章的最后,順帶分享下幾個踩坑問題
1.發(fā)起的消息中一定要帶上【自定義關(guān)鍵詞】的內(nèi)容,不然發(fā)起不成功。
2.釘釘機器人發(fā)送消息有限制,1min最多20條,超過的無法發(fā)送,釘釘會進行限流一段時間。
福祿ICH·ERP項目部
福小智
總結(jié)
以上是生活随笔為你收集整理的从零开始打造专属钉钉机器人的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android23版本以上删除HttpC
- 下一篇: Android mergeDebugRe