如何用 Python 發送告警通知到微信?

最近當上了阿里雲的推廣大使,帶了 200 名讀者一起免費領取了阿里雲的服務器,每個人都說 『真香』。

PS:有想參與領取免費服務器的同學,可加我v:hello-wbm,我發你操作流程。

組織第一期活動,其實還是有不少的問題,主要流程上的問題。

爲了讓整個流程更加自動化,操作更加流暢,我利用公衆號的開發能力,將整個過程集成到公衆號消息的自助查詢。

其中有一步就是確認用戶的購買資格,只要在我的公衆號後臺回覆對應的阿里雲ID 我這邊就會去查詢阿里雲後臺的關聯數據,但阿里雲的 cookie 數個小時就會失效,這樣一來就有點尷尬,後臺的爬蟲失效了參與的讀者還在一直查,一直查,查到的都是未關聯的數據。

這時候實時告警就顯得非常重要,常見的告警方式有:郵件,電話,短信,微信。

短信和電話,通常是收費的(有不收費的,可以分享一下),而郵件又不是那麼及時,因此最後我選擇微信通知。

這裏說的微信,是企業微信,而我之前用註冊過個體戶的執照,因此可以很輕鬆就可以註冊自己的企業微信。

1. 新建應用

登陸網頁版企業微信 (https://work.weixin.qq.com/),點擊 應用管理 -> 應用 -> 創建應用

上傳應用的 logo,輸入應用名稱,再選擇可見範圍,成功創建一個告警應用

2. 獲取Secret

使用 Python 發送告警請求,其實就只使用到兩個接口

  • 獲取 Tokenhttps://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>")

只要你的企業微信沒有關閉通知的權限,那你的手機立馬就會彈出這個告警信息。

簡單幾步就對接了企業微信,實現了手機的實時告警功能,推薦有企業微信的同學使用。

當然一定有更多,更好用的實現方法,我只是我選擇了其中一種,大家有不錯的思路也可以分享在評論區。


文章最後給大家介紹三個我自己寫的在線文檔:

第一個文檔PyCharm 中文指南 1.0 文檔

花了兩個多月的時間,整理了 100 個 PyCharm 的使用技巧,爲了讓新手能夠直接上手,我花了很多的時間錄製了上百張 GIF 動圖,有興趣的前往在線文檔閱讀。

第二個文檔PyCharm 黑魔法指南 1.0 文檔

系統收錄各種 Python 冷門知識,Python Shell 的多樣玩法,令人瘋狂的 Python 炫技操作,Python 的超詳細進階知識解讀,非常實用的 Python 開發技巧等。

第三個文檔Python 中文指南 1.0 文檔

花了三個月時間寫的一本 適合零基礎入門 Python 的全中文教程,搭配大量的代碼案例,讓初學者對 代碼的運作效果有一個直觀感受,教程既有深度又有廣度,每篇文章都會標內容的難度,是基礎還是進階的,可供讀者進行選擇,是一本難得的 Python 中文電子教程。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章