基于Python實(shí)現(xiàn)開發(fā)釘釘通知機(jī)器人
在項(xiàng)目協(xié)同工作或自動化流程完成時,我們需要用一定的手段通知自己或他人。比如說,當(dāng)服務(wù)器CPU使用率達(dá)到90%,發(fā)送告警信息給多名項(xiàng)目成員、或是股票自動化交易成交時發(fā)送通知給自己等應(yīng)用場景。通知的手段有很多,使用郵件、Telegram都可以實(shí)現(xiàn),但是它們都有各自的缺點(diǎn)。
郵件通知的方式存在滯后性,而且容易覆蓋掉一些重要的郵件,整理起來非常繁瑣。Telegram 非常好用,幾個步驟就能創(chuàng)建一個機(jī)器人,可惜在國內(nèi)無法使用,需要添加代理才能使用。
不過,前幾天發(fā)現(xiàn)釘釘?shù)臋C(jī)器人其實(shí)和Telegram的相差無幾,用起來也相當(dāng)舒服,因此今天給大家?guī)硪粋€開發(fā)釘釘通知機(jī)器人的教程,非常簡單,門檻極低,任何人都能用,每個人都能學(xué)會。
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)建一個釘釘機(jī)器人了。
1.1 打開釘釘軟件,選擇 "我", 再點(diǎn)擊右上角+號,選擇建場景群

1.2 這里可以選擇任意一種群,我選擇了培訓(xùn)群

1.3 群新建好后,點(diǎn)擊右上角的齒輪—群設(shè)置,點(diǎn)擊智能群助手。這里你也可以修改群的名字,點(diǎn)擊名字右邊的鉛筆就能修改群名。

1.4 點(diǎn)擊添加機(jī)器人

1.5 點(diǎn)擊右上角的+號

1.7 然后輸入機(jī)器人名字,安全設(shè)置選擇加簽,這一字符串你需要拷貝下來,發(fā)通知的時候就是我們的 SECRET KEY.

1.8 點(diǎn)擊完成后,會彈出創(chuàng)建成功的框框,請把這串webhook的鏈接拷貝下來,并將access_token參數(shù)復(fù)制下來,這一串 access_token 我們發(fā)送消息的時候也需要用到。

機(jī)器人創(chuàng)建完畢后,會在群聊中出現(xiàn),然后我們就可以開始編寫通知代碼了。

2.Python 釘釘機(jī)器人通知代碼
我們通過往 https://oapi.dingtalk.com/robot/send 地址發(fā)送 POST 請求的方式就能夠利用釘釘自定義機(jī)器人發(fā)送消息。釘釘機(jī)器人支持兩種消息內(nèi)容:
- 1. 純文本信息
- 2. Markdown信息
簡單來講,如果你的消息只有文本內(nèi)容,就用第一種。如果你的消息內(nèi)含圖片和自定義格式,就用第二種。
純文本消息,你的內(nèi)容需要包含以下3種參數(shù),并帶2個內(nèi)容體:
參數(shù)列表:
- 1. access_token: 創(chuàng)建成功后返回的webhook鏈接里就有這個參數(shù)。
- 2. sign: 就是我們選擇加簽安全設(shè)置中返回的SECRET.
- 3. timestamp: 當(dāng)前時間戳。
內(nèi)容體包含:
- 1. msgtype: 消息內(nèi)容 text/markdown
- 2. text: 文本內(nèi)容
代碼如下,非常簡單:
# 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
????????)使用的時候,請注意token和secret你既可以通過環(huán)境變量配置,也可以直接傳入給Messenger:
if?__name__ ==?"__main__":
????m = Messenger(
????????token="你的token",
????????secret="你的secret"
????)
????m.send_text("測試一下,今天天氣不錯")然后運(yùn)行這個腳本,就能獲取消息通知:

如果你只需要文本通知,那么到這里就已經(jīng)實(shí)現(xiàn)了,如果你還需要發(fā)送圖文消息或更多自定義內(nèi)容體,請看下面的內(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消息了,我們試一下:
# 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("測試一下,今天天氣不錯")
????m.send_md("測試Markdown", markdown_text)效果如下:

效果還是不錯的,速度也非???,一運(yùn)行腳本,馬上就能收到通知消息。大家可以在Python實(shí)用寶典公眾號后臺回復(fù) 釘釘 下載本文源代碼,也可以在下面的github鏈接中找到源代碼:https://github.com/Ckend/dd_notice
到此這篇關(guān)于基于Python實(shí)現(xiàn)開發(fā)釘釘通知機(jī)器人的文章就介紹到這了,更多相關(guān)Python釘釘通知機(jī)器人內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- docker-compose搭建prometheus+grafana+釘釘告警
- zabbix?6.0?使用?JavaScript?發(fā)出釘釘告警的方法
- SpringBoot-Admin實(shí)現(xiàn)微服務(wù)監(jiān)控+健康檢查+釘釘告警
- Zabbix 配置釘釘告警功能的實(shí)現(xiàn)代碼
- Python腳本構(gòu)建輕量級監(jiān)控告警體系(郵件/釘釘/企業(yè)微信)
- SpringBoot AOP實(shí)現(xiàn)釘釘+企業(yè)微信雙渠道異常告警
- C#調(diào)用釘釘API發(fā)送通知的實(shí)現(xiàn)示例
- Java對接釘釘考勤記錄的完整步驟
- Python實(shí)現(xiàn)釘釘自動化完整指南
- Golang接入釘釘通知的示例代碼
- Python腳本如何實(shí)現(xiàn)監(jiān)控服務(wù)器日志異常并通過釘釘推送告警?
相關(guān)文章
Python實(shí)現(xiàn)判斷變量是否是函數(shù)方式
這篇文章主要介紹了Python實(shí)現(xiàn)判斷變量是否是函數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02
Python巧用delattr實(shí)現(xiàn)提升代碼可擴(kuò)展性與打包效率
在Python的動態(tài)世界里,我們習(xí)慣了用setattr來動態(tài)賦予對象屬性,用getattr來探查未知,但你是否曾正視過delattr,下面小編就和大家詳細(xì)講講delattr的具體使用吧2026-01-01
從基礎(chǔ)到高階詳解Python二進(jìn)制數(shù)據(jù)讀取到變緩沖區(qū)操作
這篇文章主要為大家詳細(xì)介紹了如何在Python中進(jìn)行二進(jìn)制數(shù)據(jù)的可變緩沖區(qū)操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-09-09
python opencv實(shí)現(xiàn)直線檢測并測出傾斜角度(附源碼+注釋)
這篇文章主要介紹了python opencv實(shí)現(xiàn)直線檢測并測出傾斜角度(附源碼+注釋),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
Anaconda修改默認(rèn)虛擬環(huán)境安裝位置的方案分享
新安裝Anaconda后,在創(chuàng)建環(huán)境時環(huán)境自動安裝在C盤,但是C盤空間有限,下面這篇文章主要給大家介紹了關(guān)于Anaconda修改默認(rèn)虛擬環(huán)境安裝位置的相關(guān)資料,需要的朋友可以參考下2023-01-01
Python設(shè)計(jì)模式之簡單工廠模式實(shí)例詳解
這篇文章主要介紹了Python設(shè)計(jì)模式之簡單工廠模式,結(jié)合實(shí)例形式分析了簡單工廠模式的概念、原理及相關(guān)使用技巧,需要的朋友可以參考下2019-01-01
Python tkinter實(shí)現(xiàn)簡單加法計(jì)算器代碼實(shí)例
這篇文章主要介紹了Python tkinter實(shí)現(xiàn)簡單加法計(jì)算器代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05

