基於Python實現開發釘釘通知機器人
在項目協同工作或自動化流程完成時,我們需要用一定的手段通知自己或他人。比如說,當服務器CPU使用率達到90%,發送告警信息給多名項目成員、或是股票自動化交易成交時發送通知給自己等應用場景。通知的手段有很多,使用郵件、Telegram都可以實現,但是它們都有各自的缺點。
郵件通知的方式存在滯後性,而且容易覆蓋掉一些重要的郵件,整理起來非常繁瑣。Telegram 非常好用,幾個步驟就能創建一個機器人,可惜在國內無法使用,需要添加代理才能使用。
不過,前幾天發現釘釘的機器人其實和Telegram的相差無幾,用起來也相當舒服,因此今天給大傢帶來一個開發釘釘通知機器人的教程,非常簡單,門檻極低,任何人都能用,每個人都能學會。
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
(可選1) 如果你用Python的目的是數據分析,可以直接安裝Anaconda,它內置瞭Python和pip.
(可選2) 此外,推薦大傢用VSCode編輯器,它有許多的優點
Python 環境準備完成後,我們就可以來創建一個釘釘機器人瞭。
1.1 打開釘釘軟件,選擇 "我", 再點擊右上角+號,選擇建場景群
1.2 這裡可以選擇任意一種群,我選擇瞭培訓群
1.3 群新建好後,點擊右上角的齒輪—群設置,點擊智能群助手。這裡你也可以修改群的名字,點擊名字右邊的鉛筆就能修改群名。
1.4 點擊添加機器人
1.5 點擊右上角的+號
1.7 然後輸入機器人名字,安全設置選擇加簽,這一字符串你需要拷貝下來,發通知的時候就是我們的 SECRET KEY.
1.8 點擊完成後,會彈出創建成功的框框,請把這串webhook的鏈接拷貝下來,並將access_token參數復制下來,這一串 access_token 我們發送消息的時候也需要用到。
機器人創建完畢後,會在群聊中出現,然後我們就可以開始編寫通知代碼瞭。
2.Python 釘釘機器人通知代碼
我們通過往 https://oapi.dingtalk.com/robot/send 地址發送 POST 請求的方式就能夠利用釘釘自定義機器人發送消息。釘釘機器人支持兩種消息內容:
- 1. 純文本信息
- 2. Markdown信息
簡單來講,如果你的消息隻有文本內容,就用第一種。如果你的消息內含圖片和自定義格式,就用第二種。
純文本消息,你的內容需要包含以下3種參數,並帶2個內容體:
參數列表:
- 1. access_token: 創建成功後返回的webhook鏈接裡就有這個參數。
- 2. sign: 就是我們選擇加簽安全設置中返回的SECRET.
- 3. timestamp: 當前時間戳。
內容體包含:
- 1. msgtype: 消息內容 text/markdown
- 2. text: 文本內容
代碼如下,非常簡單:
# Python實用寶典 # 2021/11/13 import json import hashlib import base64 import hmac import os import time import requests from urllib.parse import quote_plus class Messenger: def __init__(self, token=os.getenv("DD_ACCESS_TOKEN"), secret=os.getenv("DD_SECRET")): self.timestamp = str(round(time.time() * 1000)) self.URL = "https://oapi.dingtalk.com/robot/send" self.headers = {'Content-Type': 'application/json'} secret = secret secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(self.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() self.sign = quote_plus(base64.b64encode(hmac_code)) self.params = {'access_token': token, "sign": self.sign} def send_text(self, content): """ 發送文本 @param content: str, 文本內容 """ data = {"msgtype": "text", "text": {"content": content}} self.params["timestamp"] = self.timestamp return requests.post( url=self.URL, data=json.dumps(data), params=self.params, headers=self.headers )
使用的時候,請註意token和secret你既可以通過環境變量配置,也可以直接傳入給Messenger:
if __name__ == "__main__": m = Messenger( token="你的token", secret="你的secret" ) m.send_text("測試一下,今天天氣不錯")
然後運行這個腳本,就能獲取消息通知:
如果你隻需要文本通知,那麼到這裡就已經實現瞭,如果你還需要發送圖文消息或更多自定義內容體,請看下面的內容。
3.釘釘機器人支持Markdown
為瞭支持發送圖片消息和自定義的文字格式,我們需要配置更多的參數:
def send_md(self, title, content): """ 發送Markdown文本 @param title: str, 標題 @param content: str, 文本內容 """ data = {"msgtype": "markdown", "markdown": {"title": title, "text": content}} self.params["timestamp"] = self.timestamp return requests.post( url=self.URL, data=json.dumps(data), params=self.params, headers=self.headers )
msgtype參數改為markdown,並配置markdown的參數,包括:
- 1. title: 標題
- 2. content: markdown內容
這樣,就能支持發送markdown消息瞭,我們試一下:
# Python實用寶典 # 2021/11/13 import json import hashlib import base64 import hmac import os import time import requests from urllib.parse import quote_plus class Messenger: def __init__(self, token=os.getenv("DD_ACCESS_TOKEN"), secret=os.getenv("DD_SECRET")): self.timestamp = str(round(time.time() * 1000)) self.URL = "https://oapi.dingtalk.com/robot/send" self.headers = {'Content-Type': 'application/json'} secret = secret secret_enc = secret.encode('utf-8') string_to_sign = '{}\n{}'.format(self.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() self.sign = quote_plus(base64.b64encode(hmac_code)) self.params = {'access_token': token, "sign": self.sign} def send_text(self, content): """ 發送文本 @param content: str, 文本內容 """ data = {"msgtype": "text", "text": {"content": content}} self.params["timestamp"] = self.timestamp return requests.post( url=self.URL, data=json.dumps(data), params=self.params, headers=self.headers ) def send_md(self, title, content): """ 發送Markdown文本 @param title: str, 標題 @param content: str, 文本內容 """ data = {"msgtype": "markdown", "markdown": {"title": title, "text": content}} self.params["timestamp"] = self.timestamp return requests.post( url=self.URL, data=json.dumps(data), params=self.params, headers=self.headers ) if __name__ == "__main__": markdown_text = "\n".join(open("md_test.md", encoding="utf-8").readlines()) m = Messenger( token="你的token", secret="你的secret" ) m.send_text("測試一下,今天天氣不錯") m.send_md("測試Markdown", markdown_text)
效果如下:
效果還是不錯的,速度也非常快,一運行腳本,馬上就能收到通知消息。大傢可以在Python實用寶典公眾號後臺回復 釘釘 下載本文源代碼,也可以在下面的github鏈接中找到源代碼:https://github.com/Ckend/dd_notice
到此這篇關於基於Python實現開發釘釘通知機器人的文章就介紹到這瞭,更多相關Python釘釘通知機器人內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python 京東雲無線寶消息推送功能
- Python基於釘釘監控發送消息提醒的實現
- Python實現企業微信通知機器人的方法詳解
- Python實現發送警告通知到企業微信方法詳解
- 教你利用python實現企業微信發送消息