基于Python實(shí)現(xiàn)開發(fā)釘釘通知機(jī)器人
在項(xiàng)目協(xié)同工作或自動(dòng)化流程完成時(shí),我們需要用一定的手段通知自己或他人。比如說,當(dāng)服務(wù)器CPU使用率達(dá)到90%,發(fā)送告警信息給多名項(xiàng)目成員、或是股票自動(dòng)化交易成交時(shí)發(fā)送通知給自己等應(yīng)用場(chǎng)景。通知的手段有很多,使用郵件、Telegram都可以實(shí)現(xiàn),但是它們都有各自的缺點(diǎn)。
郵件通知的方式存在滯后性,而且容易覆蓋掉一些重要的郵件,整理起來非常繁瑣。Telegram 非常好用,幾個(gè)步驟就能創(chuàng)建一個(gè)機(jī)器人,可惜在國(guó)內(nèi)無法使用,需要添加代理才能使用。
不過,前幾天發(fā)現(xiàn)釘釘?shù)臋C(jī)器人其實(shí)和Telegram的相差無幾,用起來也相當(dāng)舒服,因此今天給大家?guī)硪粋€(gè)開發(fā)釘釘通知機(jī)器人的教程,非常簡(jiǎn)單,門檻極低,任何人都能用,每個(gè)人都能學(xué)會(huì)。
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
(可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda,它內(nèi)置了Python和pip.
(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn)
Python 環(huán)境準(zhǔn)備完成后,我們就可以來創(chuàng)建一個(gè)釘釘機(jī)器人了。
1.1 打開釘釘軟件,選擇 "我", 再點(diǎn)擊右上角+號(hào),選擇建場(chǎng)景群
1.2 這里可以選擇任意一種群,我選擇了培訓(xùn)群
1.3 群新建好后,點(diǎn)擊右上角的齒輪—群設(shè)置,點(diǎn)擊智能群助手。這里你也可以修改群的名字,點(diǎn)擊名字右邊的鉛筆就能修改群名。
1.4 點(diǎn)擊添加機(jī)器人
1.5 點(diǎn)擊右上角的+號(hào)
1.7 然后輸入機(jī)器人名字,安全設(shè)置選擇加簽,這一字符串你需要拷貝下來,發(fā)通知的時(shí)候就是我們的 SECRET KEY.
1.8 點(diǎn)擊完成后,會(huì)彈出創(chuàng)建成功的框框,請(qǐng)把這串webhook的鏈接拷貝下來,并將access_token參數(shù)復(fù)制下來,這一串 access_token 我們發(fā)送消息的時(shí)候也需要用到。
機(jī)器人創(chuàng)建完畢后,會(huì)在群聊中出現(xiàn),然后我們就可以開始編寫通知代碼了。
2.Python 釘釘機(jī)器人通知代碼
我們通過往 https://oapi.dingtalk.com/robot/send 地址發(fā)送 POST 請(qǐng)求的方式就能夠利用釘釘自定義機(jī)器人發(fā)送消息。釘釘機(jī)器人支持兩種消息內(nèi)容:
- 1. 純文本信息
- 2. Markdown信息
簡(jiǎn)單來講,如果你的消息只有文本內(nèi)容,就用第一種。如果你的消息內(nèi)含圖片和自定義格式,就用第二種。
純文本消息,你的內(nèi)容需要包含以下3種參數(shù),并帶2個(gè)內(nèi)容體:
參數(shù)列表:
- 1. access_token: 創(chuàng)建成功后返回的webhook鏈接里就有這個(gè)參數(shù)。
- 2. sign: 就是我們選擇加簽安全設(shè)置中返回的SECRET.
- 3. timestamp: 當(dāng)前時(shí)間戳。
內(nèi)容體包含:
- 1. msgtype: 消息內(nèi)容 text/markdown
- 2. text: 文本內(nèi)容
代碼如下,非常簡(jiǎn)單:
# Python實(shí)用寶典 # 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): ????????""" ????????發(fā)送文本 ????????@param content: str, 文本內(nèi)容 ????????""" ????????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 ????????)
使用的時(shí)候,請(qǐng)注意token和secret你既可以通過環(huán)境變量配置,也可以直接傳入給Messenger:
if?__name__ ==?"__main__": ????m = Messenger( ????????token="你的token", ????????secret="你的secret" ????) ????m.send_text("測(cè)試一下,今天天氣不錯(cuò)")
然后運(yùn)行這個(gè)腳本,就能獲取消息通知:
如果你只需要文本通知,那么到這里就已經(jīng)實(shí)現(xiàn)了,如果你還需要發(fā)送圖文消息或更多自定義內(nèi)容體,請(qǐng)看下面的內(nèi)容。
3.釘釘機(jī)器人支持Markdown
為了支持發(fā)送圖片消息和自定義的文字格式,我們需要配置更多的參數(shù):
def?send_md(self, title, content): ????""" ????發(fā)送Markdown文本 ????@param title: str, 標(biāo)題 ????@param content: str, 文本內(nèi)容 ????""" ????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參數(shù)改為markdown,并配置markdown的參數(shù),包括:
- 1. title: 標(biāo)題
- 2. content: markdown內(nèi)容
這樣,就能支持發(fā)送markdown消息了,我們?cè)囈幌拢?/p>
# Python實(shí)用寶典 # 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): ????????""" ????????發(fā)送文本 ????????@param content: str, 文本內(nèi)容 ????????""" ????????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): ????""" ????發(fā)送Markdown文本 ????@param title: str, 標(biāo)題 ????@param content: str, 文本內(nèi)容 ????""" ????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("測(cè)試一下,今天天氣不錯(cuò)") ????m.send_md("測(cè)試Markdown", markdown_text)
效果如下:
效果還是不錯(cuò)的,速度也非???,一運(yùn)行腳本,馬上就能收到通知消息。大家可以在Python實(shí)用寶典公眾號(hào)后臺(tái)回復(fù) 釘釘 下載本文源代碼,也可以在下面的github鏈接中找到源代碼:https://github.com/Ckend/dd_notice
到此這篇關(guān)于基于Python實(shí)現(xiàn)開發(fā)釘釘通知機(jī)器人的文章就介紹到這了,更多相關(guān)Python釘釘通知機(jī)器人內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下Python的Django框架環(huán)境部署及應(yīng)用編寫入門
這篇文章主要介紹了Windows下Python的Django框架環(huán)境部署及程序編寫入門,Django在Python的框架中算是一個(gè)重量級(jí)的MVC框架,本文將從程序部署開始講到hellow world web應(yīng)用的編寫,需要的朋友可以參考下2016-03-03Python實(shí)現(xiàn)一鍵改變r(jià)aw格式照片風(fēng)格
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一鍵改變r(jià)aw格式照片風(fēng)格效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以一起學(xué)習(xí)一下2023-05-05如何一分鐘內(nèi)找出pandas DataFrame某列中的nan值
這篇文章主要介紹了如何一分鐘內(nèi)找出pandas DataFrame某列中的nan值問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09python 實(shí)現(xiàn)"神經(jīng)衰弱"翻牌游戲
這篇文章主要介紹了python 實(shí)現(xiàn)"神經(jīng)衰弱"游戲,幫助大家更好的理解和使用python的pygame庫(kù),感興趣的朋友可以了解下2020-11-11如何用C代碼給Python寫擴(kuò)展庫(kù)(Cython)
這篇文章主要介紹了如何用C代碼給Python寫擴(kuò)展庫(kù)(Cython),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05利用Python自帶PIL庫(kù)擴(kuò)展圖片大小給圖片加文字描述的方法示例
最近的一個(gè)工程項(xiàng)目是講文字添加到圖像上,所以下面這篇文章主要給大家介紹了關(guān)于利用Python自帶PIL庫(kù)擴(kuò)展圖片大小給圖片加文字描述的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08