釘釘作為目前最熱門的辦公軟件,在工作中大多數時間都在與他打交道。今天和大家分享一下如何用Python向釘釘發送消息,最終達到每日自動向指定群中發送銷售日報。
首先打開群設置,點擊智能群助手。
選擇添加自定義機器人
然後根據提示添加一下信息,建議選擇安全設置的前兩項,這裡加簽的密鑰需要保存一下,後面會用到。
點擊完成後就會生成一個Webhook
地址,這個地址和密鑰不要隨便公布出來,放在外部網站上會存在安全隱患。
我們此時已經獲取了密鑰和Webhook
,先將密鑰解析得到時間戳(timestamp)以及簽名值(sign),代碼如下。
import time
import hmac
import hashlib
import base64
import urllib.parse
timestamp = str(round(time.time() * 1000))
secret = '填入你的密鑰'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)
timestamp,sign作為兩個關鍵參數,把它們與Webhook
拼接。
https://oapi.dingtalk.com/robot/send?access_token=XXXXXX×tamp=XXX&sign=XXX
access_token參數的值在創建機器人時已經包含在Webhook
中,這裡只需傳入timestamp與sign的值即可得到完整的Webhook
。
釘釘消息類型多種,可根據需要選擇發送的消息類型。
官方文檔:https://open.dingtalk.com/document/robots/custom-robot-access
我使用的是Markdown格式,目前只支持基礎的Markdown語法,一開始以為是謙虛,親測後發現確實不支持,HTML語法也僅僅支持很小一部分。
標題
# 一級標題
## 二級標題
### 三級標題
#### 四級標題
##### 五級標題
###### 六級標題
引用
> A man who stands for nothing will fall for anything.
文字加粗、斜體
**bold**
*italic*
鏈接
[this is a link](http://name.com)
圖片
![](http://name.com/pic.jpg)
無序列表
- item1
- item2
有序列表
1. item1
2. item2
整體代碼並不復雜,代碼如下。
import time
import hmac
import hashlib
import base64
import urllib.parse
import datetime
import json
timestamp = str(round(time.time() * 1000))
secret = '填入你的密鑰'
secret_enc = secret.encode('utf-8')
string_to_sign = '{}\n{}'.format(timestamp, secret)
string_to_sign_enc = string_to_sign.encode('utf-8')
hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()
sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))
print(timestamp)
print(sign)
url = f'https://oapi.dingtalk.com/robot/send?access_token=xxxx×tamp={
timestamp}&sign={
sign}'
def send_request(url, datas):
header = {
"Content-Type": "application/json",
"Charset": "UTF-8"
}
sendData = json.dumps(datas)
sendDatas = sendData.encode("utf-8")
request = urllib.request.Request(url=url, data=sendDatas, headers=header)
opener = urllib.request.urlopen(request)
# 輸出響應結果
print(opener.read())
def get_string():
''' 自己想要發送的內容,注意消息格式,如果選擇markdown,字符串中應為包含Markdown格式的內容 例: "<font color=#00ffff>昨日銷售額:XXX</font> \n <font color=#00ffff>昨日銷量:XXX</font>" '''
return "- 測試1 - 測試2"
def main():
# isAtAll:是否@所有人,建議非必要別選,不然測試的時候很尴尬
dict = {
"msgtype": "markdown",
"markdown": {
"title": "銷售日報",
"text": ""
},
"at": {
"isAtAll": False
}
}
#把文案內容寫入請求格式中
dict["markdown"]["text"] = get_string()
send_request(url, dict)
main()
如果還有不清楚的地方,可以直接私信或參考官方文檔。
https://open.dingtalk.com/document/robots/robot-overview