在运维的日常工作中常常需要同监控打交道,而监控中最常用的功能介绍报警,最简单的方式就是使用邮件进行报警,但是邮件报警不是特别及时(像我这种一天都不怎么看邮件的估计得等服务挂了才知道),所以我们需要一种及时通信工具进行报警,常见的有短信,微信公众号,QQ公众号等,但是这三种方式在报警及时的同时也会在一定程度上打扰到我们的生活,那么有没有一种既能及时传递信息又能不打扰到我们日常的生活的那??
 
腾讯在微信之外还推出了一款类似于微信的应用,即使企业微信。企业微信一般只用于办公所有不同可能会影响我们的日常生活而且又能及时报警。
 
企业微信官网:https://work.weixin.qq.com/
 
 
企业微信登录管理员后台的页面
 
python调用企业微信接口发送报警信息_第1张图片
 
 
 
 
点击 "我的企业" 获取企业 ID (等一下代码中会用到)
 
python调用企业微信接口发送报警信息_第2张图片
 
 
 
 
点击 "应用与小程序" 创建应用 (报警信息将发送到应用中)
 
python调用企业微信接口发送报警信息_第3张图片
 
 
 
 
根据要求填写应用信息创建应用
 
python调用企业微信接口发送报警信息_第4张图片
 
 
 
 
获取 Agentid 和 Secret (等一下代码中会用到)
 
python调用企业微信接口发送报警信息_第5张图片

 
 
 
 
代码实现:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import json
import requests

class WeChat(object):
    def __init__(self, corpid, secret, agentid):
        self.url = "https://qyapi.weixin.qq.com"
        self.corpid = corpid
        self.secret = secret
        self.agentid = agentid

    # 获取企业微信的 access_token
    def access_token(self):
        url_arg = '/cgi-bin/gettoken?corpid={id}&corpsecret={crt}'.format(
            id=self.corpid, crt=self.secret)
        url = self.url + url_arg
        response = requests.get(url=url)
        text = response.text
        self.token = json.loads(text)['access_token']

    # 构建消息格式
    def messages(self, msg):
        values = {
            "touser": '@all',
            "msgtype": 'text',
            "agentid": self.agentid,
            "text": {'content': msg},
            "safe": 0
        }
        # python 3
        # self.msg = (bytes(json.dumps(values), 'utf-8'))
        # python 2
        self.msg = json.dumps(values)

    # 发送信息
    def send_message(self, msg):
        self.access_token()
        self.messages(msg)

        send_url = '{url}/cgi-bin/message/send?access_token={token}'.format(
            url=self.url, token=self.token)
        response = requests.post(url=send_url, data=self.msg)
        errcode = json.loads(response.text)['errcode']

        if errcode == 0:
            print('Succesfully')
        else:
            print('Failed')
使用示例:
corpid = "xxxxxxx"
secret = "xxxxxxx"
agentid = "xxxxxx"
msg = "mysql 出现错误"

wechat = WeChat(corpid, secret, agentid)
wechat.send_message(msg)

具体参数意义查看:  https://open.work.weixin.qq.com/api/doc#10167