釘釘機器人使用注意事項


  • 獲取到Webhook地址后,用戶可以向這個地址發起HTTP POST 請求,即可實現給該釘釘群發送消息。注意,發起POST請求時,必須將字符集編碼設置成UTF-8。

當前自定義機器人支持文本 (text)、鏈接 (link)、markdown、ActionCard、FeedCard消息類型,大家可以根據自己的使用場景選擇合適的消息類型,達到最好的展示樣式。

  • 自定義機器人發送消息時,可以通過手機號碼指定“被@人列表”。在“被@人列表”里面的人員收到該消息時,會有@消息提醒(免打擾會話仍然通知提醒,首屏出現“有人@你”)。

當前機器人尚不支持應答機制 (該機制指的是群里成員在聊天@機器人的時候,釘釘回調指定的服務地址,即Outgoing機器人)。

每個機器人每分鍾最多發送20條。消息發送太頻繁會嚴重影響群成員的使用體驗,大量發消息的場景 (譬如系統監控報警) 可以將這些信息進行整合,通過markdown消息以摘要的形式發送到群里。

安全設置

安全設置目前有3種方式:

(1)方式一,自定義關鍵詞

最多可以設置10個關鍵詞,消息中至少包含其中1個關鍵詞才可以發送成功。

例如:添加了一個自定義關鍵詞:監控報警

則這個機器人所發送的消息,必須包含 監控報警 這個詞,才能發送成功。

(2)方式二,加簽

第一步,把timestamp+”\n"+密鑰當做簽名字符串,使用HmacSHA256算法計算簽名,然后進行Base64 encode,最后再把簽名參數再進行urlEncode,得到最終的簽名(需要使用UTF-8字符集)。

這里主要演示加簽方法.

加簽shell腳本發送版本
shell腳本發送釘釘通知, 這是調用了阿里雲api和python腳本, 實現自動發送阿里雲可用余額給運維群.

#!/usr/bin/env bash

## author: louis@wangke.co

function notify(){
    curl "https://oapi.dingtalk.com/robot/send?access_token=$dingdingtoken&timestamp=$timestamp&sign=$sign"    -H 'Content-Type: application/json'    -d "{'msgtype': 'markdown',
        'markdown': {
            'title': '阿里雲費用余額',
            'text': '##  阿里雲賬戶 \n### 可用現金余額: $AvaliableCash\n### 可用余額: $AvaliableMount\n### 查詢時間: $DateStamp'
        }
    }"
}
dingdingtoken=xxxxxxxx
getkey=$(python a.py)
timestamp=${getkey:0:13}
sign=$(echo "${getkey:13:100}" | tr  -d '\n')
DateStamp=$(date -d @${getkey:0:10} "+%F %H:%m:%S")
AvaliableCash=$(aliyun bssopenapi QueryAccountBalance | jq .Data.AvailableCashAmount)
AvaliableMount=$(aliyun bssopenapi QueryAccountBalance | jq .Data.AvailableAmount)

notify

使用python獲取時間戳及加密sign

#python 2.6
import time
import hmac
import hashlib
import base64
import urllib

timestamp = long(round(time.time() * 1000))
secret = 'secret'
secret_enc = bytes(secret).encode('utf-8')
string_to_sign = '{0}\n{1}'.format(timestamp, secret)
string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)

"""
#python 2.7
import time
import hmac
import hashlib
import base64
import urllib

timestamp = long(round(time.time() * 1000))
secret = 'secret'
secret_enc = bytes(secret).encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = bytes(string_to_sign).encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)
"""

腳本執行

$ sh notify_aliyun_bss.sh
{"errcode":0,"errmsg":"ok"}

最后, 提一下不需要使用加簽的方法, 很早之前寫過jenkins發送腳本.

#!/bin/sh
title=$1
messageUrl=$2
picUrl=$4
text=$3
PHONE="158215*****"
TOKEN=$5
DING="curl -H \"Content-Type: application/json\" -X POST --data '{\"msgtype\": \"link\", \"link\": {\"messageUrl\": \"${messageUrl}\", \"title\": \"${title}\", \"picUrl\": \"${picUrl}\", \"text\": \"${text}\",}, \"at\": {\"atMobiles\": [${PHONE}], \"isAtAll\": false}}' ${TOKEN}"
eval $DING

腳本執行

$ sh /var/jenkins_home/dingding.sh jenkins-test-qx-44 \ http://fenghong.tech:8088/job/test-qx/44/ 發布成功 \
http://icons.iconarchive.com/icons/paomedia/small-n-flat/1024/sign-check-icon.png \
https://oapi.dingtalk.com/robot/send?access_token=****

錯誤碼

// 消息內容中不包含任何關鍵詞
{
  "errcode":310000,
  "errmsg":"keywords not in content"
}

// timestamp 無效
{
  "errcode":310000,
  "errmsg":"invalid timestamp"
}

// 簽名不匹配
{
  "errcode":310000,
  "errmsg":"sign not match"
}

// IP地址不在白名單
{
  "errcode":310000,
  "errmsg":"ip X.X.X.X not in whitelist"
}

轉載


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM