從零開始打造專屬釘釘機器人

什麼是釘釘機器人?npm

羣機器人是釘釘羣的高級擴展功能。羣機器人能夠將第三方服務的信息聚合到羣聊中,實現自動化的信息同步。目前,大部分機器人在添加後,還須要進行Webhook配置,纔可正常使用(配置說明詳見操做流程中的幫助連接)。json

例如:c#

經過聚合GitHub,GitLab等源碼管理服務,實現源碼更新同步。api

經過聚合Trello,JIRA等項目協調服務,實現項目信息同步。bash

另外,羣機器人支持Webhook協議的自定義接入,支持更多可能性,例如:你可將運維 報警經過自定義機器人聚合到釘釘羣實現提醒功能。服務器

實際上,經過機器人咱們能夠對接各種服務,好比源碼提交通知,服務器告警通知,甚至是能夠主動查詢天氣、加班點餐等服務。markdown

目前釘釘機器人支持incoming方式,outgoing仍屬於內側階段。官方文檔能夠點此查看。session

incoming方式

incoming是指被動接受通知,釘釘羣中添加的羣機器人默認都是該模式。app

添加機器人

咱們添加的時候能夠看到已經自帶一些常見的機器人,比較推薦的是GitHubGitLabJIRATravisTrello,固然咱們此次須要選擇最後的"自定義"機器人。運維

在機器人信息欄填寫"機器人姓名"便可,須要的話也能夠設置一個頭像。圖中"是否開啓Outgoing機制"在沒有開通的狀況下是不可見。

點擊完成就會生成hook地址,以下圖:

咱們會用到"Hook地址",後面咱們發送消息都須要請求到該地址。

如何發送消息

只要想Webhook地址發起POST請求,帶上特定格式消息便可。

具體的接口文檔能夠看官方,這裏不作擴展。

開源工具

在一些簡單的通知場景,咱們可使用npm上面的輪子來快速實現。

outgoing方式

outgoing機器人的配置和前面基本同樣,只須要額外配置POST 地址以及Token

須要注意的是Token保存後沒法再次修改,POST 地址就是釘釘機器人接受消息後調用的地址。

開通方式

  1. 釘釘上加入"釘釘機器人交流羣",羣號:11733391
  2. open-dev.dingtalk.com 首頁上找到corpId
  3. 記得添加"大柚",並把coprId私發給他。

目前每週四提交開通,預計週五會生效。

如何收取消息

當羣裏有人@機器人時,釘釘會經過POST方式回調咱們前面設置的地址,該地址實質是接口,能夠在Body中獲取到消息內容。

截止撰寫文章時,釘釘的outgoing機器人文檔不可訪問,因此會在下面介紹下。

釘釘請求格式

  • HTTP Header 格式以下:
"Content-Type": "application/json; charset=utf-8" 
 "token": "6a71a455ffcfba92a66"
複製代碼
  • HTTP Body 文本消息內容:
{
     // 會話id
    "conversationId": "8Yu7H8H8890kkl7h==",
    "atUsers": [
        {
            "dingtalkId": "$:DFDS51:$R7E8dffdufdfjsdf2/oUCO/"
        }
    ],
    "chatbotUserId": "$:df3234:$sdfsdfsdfsdfd234234/oUCO/",
    "msgId": "msg4sdf35jh8jc9b51ss6/noYdzw==",
    "senderNick": "Neo",
    "isAdmin": false,
    "sessionWebhookExpiredTime": 1561711409165,
    // 消息發送的時間
    "createAt": 1561710209132,
    // 羣聊消息類型仍是單聊
    "conversationType": "2",
    "senderId": "$:ASDD_v1:$df8sdfj&JS*J#FF==",
    // 當類型是羣聊時,這個參數有效
    "conversationTitle": "avalon",
    "isInAtList": true,
     // sessionWebhook是臨時的發送消息接口
    "sessionWebhook": "https://oapi.dingtalk.com/robot/sendBySession?session=qwe",
    // 消息內容
    "text": {
        "content": "我就是我, 是不同的煙火" 
    }, 
     // 消息類型
    "msgtype": "text",
}
複製代碼
  • HTTP 響應格式

支持返回文本、圖片和markdownactionCardfeedCard消息類型。

下面僅列出markdown格式的消息,詳細的文件能夠參考網友提供的PDF,提取碼: 4qht 。

{
     "msgtype": "markdown", // 消息類型
     "markdown": {
         "title":"杭州天氣", // 消息主題
         "text": "#### 杭州天氣 @ptt6gbq @17681800905 \n" +
                 "> 9度,西北風1級,空氣良89,相對溫度73%\n\n" +
                 "> ![screenshot](http://image.jpg)\n"  +
                 "> ###### 10點20分發布 [天氣](http://www.thinkpage.cn/) \n" // 消息體
     },
      "at": { // @的人員
          "atMobiles": [
              "17681800905"
          ], 
          "atDingtalkIds": [
              "ptt6gbq"
          ],
          "isAtAll": false
      }
 }
複製代碼

若是咱們回覆的消息須要@某人,就會配置at字段,裏面atDingtalkIds須要的dingtaklId能夠是咱們從請求中拿到的senderId,即$:ASDD_v1:$k8DFJ837349On my way!==的形式也能夠傳入正常@。

另外若是出於某些緣由,沒法響應請求時返回消息,咱們還能夠經過sessionWebhook來主動發送消息。

本文同步發表於做者博客: 從零開始打造專屬釘釘機器人

相關文章
相關標籤/搜索