python 监控相关--集成企业微信发送消息
企业微信最大的好处是提供了很多免费的可供使用的接口,在这里为TX点一波大赞,也终于给我们提供了一个免费薅羊毛的机会,通过企业微信提供的开放API,可以做很多跟监控相关的事情,比如最常用的预警消息,比如集成到APP中去,发送用户购买的消息提醒等等。
企业微信的API地址
https://work.weixin.qq.com/api/doc/90000/90135/90236
可以看到,在企业微信中,TX是真的非常细心的,第一次感觉微信团队也能写出如此让人看的懂的开发文档,确定不易。此篇首先介绍用PYTHON3实现消息发送接口,后续后利用此接口,来进行更多有用的集成。
python 集成企业微信发送消息
1. 去企业微信管理员后台创建应用
- 登录企业微信
点击应用管理-》应用-》自建-》创建应用
- 创建应用后,agentid和secret后面会用到,corpid有的是wx开头,有的以ww开头。
这些基础的东西,请自行百度,网上一堆的,另外也可以参考上面的文档地址,毕竟难得TX把文档第一次写的如此的仔细,请细细品。
2. python 集成企业微信消息发送 weixin363.py
#!/usr/bin/python # -*- coding:utf-8 -*- import urllib import urllib.parse import urllib.request import urllib.error import requests import json import sys import time # 应用的id agentid = "10000xxx" # 企业微信的id 在企业微信管理员后台查询 corpid = "wwf859245xxxxxxx" # 企业微信的 密码 也是需要企业微信管理员才能看到 secret = "i_Trm5aS-mDjye21axxxxxxxxxxxx" class WeChat(object): __token_id = '' headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.96 Safari/537.36', 'Content-Type': 'application/json', 'cache-control': 'no-cache', } # ctor def __init__(self, agentid=agentid, secret=secret): self.__url = 'https://qyapi.weixin.qq.com/cgi-bin'.rstrip('/') self.__corpid = corpid self.__secret = secret self.__agentid = agentid # Get TokenID def authID(self): params = {'corpid': self.__corpid, 'corpsecret': self.__secret} data = urllib.parse.urlencode(params) print(data) content = self.getToken(data) print("content is {}".format(content)) try: self.__token_id = content['access_token'] # print content['access_token'] # print(self.__token_id) except KeyError: raise KeyError # Establish a connection def getToken(self, data, url_prefix='/'): url = self.__url + url_prefix + 'gettoken?' try: response = urllib.request.Request(url + data) except KeyError: raise KeyError result = urllib.request.urlopen(response) content = json.loads(result.read()) return content # Get sendmessage url def postData(self, data, url_prefix='/'): url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id # data = urllib.parse.urlencode(data).encode('utf-8') data = json.dumps(data) data = bytes(data, 'utf8') request = urllib.request.Request(url, data=data, headers=self.headers) try: result = urllib.request.urlopen(request) print(result.read()) except urllib.error.HTTPError as e: if hasattr(e, 'reason'): print('reason', e.reason) elif hasattr(e, 'code'): print('code', e.code) return 0 else: content = json.loads(result.read()) print("content is :{}".format(content)) result.close() return content # send message 文本 def sendMessage(self, touser, message): print('touser:{} and message:{}'.format(touser, message)) self.authID() # data = json.dumps({'touser': '{}'.format(touser), # 'toparty': "2", # 'msgtype': "text", # 'agentid': "1000002", # 'text': { # 'content': message # } # }, ensure_ascii=False) data = { "touser": "{}".format(touser), "toparty": "", "totag": "", "msgtype": "text", "agentid": self.__agentid, "text": { "content": message} } response = self.postData(data) print(response) # 发送卡片消息 def sendMessage_textcard(self, title, severity, message, detail, touser='@all'): print('touser:{} and message:{}'.format(touser, message)) self.authID() # data = json.dumps({'touser': '{}'.format(touser), # 'toparty': "2", # 'msgtype': "text", # 'agentid': "1000002", # 'text': { # 'content': message # } # }, ensure_ascii=False) data = { "touser": "{}".format(touser), "toparty": "", "totag": "", "msgtype": "text", "agentid": self.__agentid, "text": { "content": message} } data = { "touser": "{}".format(touser), "toparty": "", "totag": "", "msgtype": "textcard", "agentid": self.__agentid, "textcard": { "title": "事件:{}".format(title), "description": '''<div class=\"highlight\">时间:{} 事件级别:{}</div> <div class=\"normal\">事件描述:{}</div> <div class=\"normal\">事件详情:{}</div> '''.format( time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()), severity, message, detail), "url": "http://#", "btntxt": "点击查看详细" }, "enable_id_trans": 0, "enable_duplicate_check": 0, "duplicate_check_interval": 1800 } response = self.postData(data) print(response)
测试发送消息:
if __name__ == '__main__':
a = WeChat()
# 通过console指定参数测试发送情况
# a.sendMessage(sys.argv[1], sys.argv[3])
# 直接调用接口发送
a.sendMessage('@all', '交通码应用监控测试消息,收到请忽略')
在Termial中直接调用测试
# weixin363.py --corpid=ww021ewwwwww --corpsecret=HITayl-0uNxGQ3rxxxxxxxxx --msg="您好</br>告警测试" --user=@all --agentid=1000002
3. 通过测试,我们可以在企业的应用中收到发送的消息提醒,例如:
这里由于没有配置 回调接口,所以我们点击查看的时候,是没有详细内容的,具体可以再结合文档进行功能扩展。
半斤八两开始写BLOG了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】