如何用 Python 發(fā)送告警通知到微信?
大家好,我是明哥。
最近當(dāng)上了阿里云的推廣大使,帶了 200 名讀者一起免費(fèi)領(lǐng)取了阿里云的服務(wù)器,每個(gè)人都說(shuō) 『真香』。
組織第一期活動(dòng),其實(shí)還是有不少的問(wèn)題,主要是流程上的問(wèn)題。
為了讓整個(gè)流程更加自動(dòng)化,操作更加流暢,我利用公眾號(hào)的開發(fā)能力,將整個(gè)的過(guò)程集成到公眾號(hào)消息的自助查詢。
其中有一步就是確認(rèn)用戶的購(gòu)買資格,只要在我的公眾號(hào)后臺(tái)回復(fù)對(duì)應(yīng)的阿里云ID 我這邊就會(huì)去查詢阿里云后臺(tái)的關(guān)聯(lián)數(shù)據(jù),但阿里云的 cookie 數(shù)個(gè)小時(shí)就會(huì)失效,這樣一來(lái)就有點(diǎn)尷尬,后臺(tái)的爬蟲失效了參與的讀者還在一直查,一直查,查到的都是未關(guān)聯(lián)的數(shù)據(jù)。
這時(shí)候?qū)崟r(shí)告警就顯得非常重要,常見的告警方式有:郵件,電話,短信,微信。
短信和電話,通常是收費(fèi)的(若你有不收費(fèi)的,可以評(píng)論分享一下),而郵件又不是那么及時(shí),因此最后我選擇微信通知。
這里說(shuō)的微信,是企業(yè)微信,而我之前用注冊(cè)過(guò)個(gè)體戶的執(zhí)照,因此可以很輕松就可以注冊(cè)自己的企業(yè)微信。
1. 新建應(yīng)用
登陸網(wǎng)頁(yè)版企業(yè)微信 (https://work.weixin.qq.com/),點(diǎn)擊 應(yīng)用管理 -> 應(yīng)用 -> 創(chuàng)建應(yīng)用
上傳應(yīng)用的 logo,輸入應(yīng)用名稱,再選擇可見范圍,成功創(chuàng)建一個(gè)告警應(yīng)用
2. 獲取Secret
使用 Python 發(fā)送告警請(qǐng)求,其實(shí)就只使用到兩個(gè)接口
- 獲取 Token :https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={secret}
- 發(fā)送請(qǐng)求:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}
可以看到,最重要的是 corpid 和 secret:
- corpid:唯一標(biāo)識(shí)你的企業(yè)
- secret:應(yīng)用級(jí)的密鑰,有了它程序才知道你要發(fā)送該企業(yè)的哪個(gè)應(yīng)用
corpid 可以通過(guò) 我的企業(yè) -> 企業(yè)信息 獲取
而 secret 獲取相對(duì)麻煩一點(diǎn),點(diǎn)擊前面創(chuàng)建應(yīng)用,點(diǎn)擊 查看 secret
然后再點(diǎn)擊發(fā)送就會(huì)發(fā)送到你的企業(yè)微信上
最后將 corpid 和 secret 填入下面的常量中。
- import json
- import datetime
- import requests
- CORP_ID = ""
- SECRET = ""
- class WeChatPub:
- s = requests.session()
- def __init__(self):
- self.token = self.get_token()
- def get_token(self):
- url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={SECRET}"
- rep = self.s.get(url)
- if rep.status_code != 200:
- print("request failed.")
- return
- return json.loads(rep.content)['access_token']
- def send_msg(self, content):
- url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + self.token
- header = {
- "Content-Type": "application/json"
- }
- form_data = {
- "touser": "@all",
- "toparty": " PartyID1 | PartyID2 ",
- "totag": " TagID1 | TagID2 ",
- "msgtype": "textcard",
- "agentid": 1000002,
- "textcard": {
- "title": "服務(wù)異常告警",
- "description": content,
- "url": "URL",
- "btntxt": "更多"
- },
- "safe": 0
- }
- rep = self.s.post(url, data=json.dumps(form_data).encode('utf-8'), headers=header)
- if rep.status_code != 200:
- print("request failed.")
- return
- return json.loads(rep.content)
然后就可以通過(guò) send_msg 函數(shù)發(fā)送消息了。
- wechat = WeChatPub()
- now = datetime.datetime.now()
- timenow = now.strftime('%Y年%m月%d日 %H:%M:%S')
- wechat.send_msg(f"<div class=\"gray\">{timenow}</div> <div class=\"normal\">阿里云 cookie 已失效</div><div class=\"highlight\">請(qǐng)盡快更換新的 cookie</div>")
只要你的企業(yè)微信沒有關(guān)閉通知的權(quán)限,那你的手機(jī)立馬就會(huì)彈出這個(gè)告警信息。
簡(jiǎn)單幾步就對(duì)接了企業(yè)微信,實(shí)現(xiàn)了手機(jī)的實(shí)時(shí)告警功能,推薦有企業(yè)微信的同學(xué)使用。
當(dāng)然一定有更多,更好用的實(shí)現(xiàn)方法,我只是我選擇了其中一種,大家有不錯(cuò)的思路也可以分享在評(píng)論區(qū)。