如何用 Python 發送告警通知到微信?
大家好,我是明哥。
最近當上了阿里云的推廣大使,帶了 200 名讀者一起免費領取了阿里云的服務器,每個人都說 『真香』。
組織第一期活動,其實還是有不少的問題,主要是流程上的問題。
為了讓整個流程更加自動化,操作更加流暢,我利用公眾號的開發能力,將整個的過程集成到公眾號消息的自助查詢。
其中有一步就是確認用戶的購買資格,只要在我的公眾號后臺回復對應的阿里云ID 我這邊就會去查詢阿里云后臺的關聯數據,但阿里云的 cookie 數個小時就會失效,這樣一來就有點尷尬,后臺的爬蟲失效了參與的讀者還在一直查,一直查,查到的都是未關聯的數據。
這時候實時告警就顯得非常重要,常見的告警方式有:郵件,電話,短信,微信。
短信和電話,通常是收費的(若你有不收費的,可以評論分享一下),而郵件又不是那么及時,因此最后我選擇微信通知。
這里說的微信,是企業微信,而我之前用注冊過個體戶的執照,因此可以很輕松就可以注冊自己的企業微信。
1. 新建應用
登陸網頁版企業微信 (https://work.weixin.qq.com/),點擊 應用管理 -> 應用 -> 創建應用
上傳應用的 logo,輸入應用名稱,再選擇可見范圍,成功創建一個告警應用
2. 獲取Secret
使用 Python 發送告警請求,其實就只使用到兩個接口
- 獲取 Token :https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={corpid}&corpsecret={secret}
- 發送請求:https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={token}
可以看到,最重要的是 corpid 和 secret:
- corpid:唯一標識你的企業
- secret:應用級的密鑰,有了它程序才知道你要發送該企業的哪個應用
corpid 可以通過 我的企業 -> 企業信息 獲取
而 secret 獲取相對麻煩一點,點擊前面創建應用,點擊 查看 secret
然后再點擊發送就會發送到你的企業微信上
最后將 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": "服務異常告警",
- "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)
然后就可以通過 send_msg 函數發送消息了。
- 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\">請盡快更換新的 cookie</div>")
只要你的企業微信沒有關閉通知的權限,那你的手機立馬就會彈出這個告警信息。
簡單幾步就對接了企業微信,實現了手機的實時告警功能,推薦有企業微信的同學使用。
當然一定有更多,更好用的實現方法,我只是我選擇了其中一種,大家有不錯的思路也可以分享在評論區。