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. 通过测试,我们可以在企业的应用中收到发送的消息提醒,例如:

 

 这里由于没有配置  回调接口,所以我们点击查看的时候,是没有详细内容的,具体可以再结合文档进行功能扩展。

 

posted @   不卷轮子锅  阅读(350)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示