企业微信API&群机器人配置

我们公司用的企业微信,会把相关开发或者运维拉到一个群里,然后配置上一个群机器人,这样的话就可以用企业微信API来配置群机器人接收消息,把一些日常的服务器或者日志告警发送到对应的群。
以下介绍两种常用的消息发送类型:文本类型和文件类型

发送文本类型的消息

  1. 文本消息示例
{
    "msgtype": "text",
    "text": {
        "content": "广州今日天气:29度,大部分多云,降雨概率:60%",
        "mentioned_list":["wangqing","@all"],  #可选
        "mentioned_mobile_list":["13800001111","@all"]  #可选
    }
}
  1. 假设webhook是:https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa,webhook是创建机器人的时候生成的特有的
  2. shell中的curl调用API发送示例
result='{"msgtype": "text","text": { "content": "'$(hostname)'_'$ip'_'server alert test'"}}'
curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa" -H 'Content-Type: application/json' -d "$result"

发送文件类型的消息

  1. 先上传文件,得到一个media_id,该media_id三天有效
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=KEY&type=TYPE(KEY是webhook地址,TYPE这里是file)
 curl请求示例
 curl --location --request POST 'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa&type=file' \
--form 'Content-Disposition="form-data"' \
--form 'name="media"' \
--form 'filename="wework.txt"' \
--form 'boundary=@"/tmp/test.py"'
可以理解为把这个文件发送到企业微信的一个临时云端保存
  1. 得到media_id之后,通过这个id去企业微信临时保存的拉取,发送到群里
第1步返回的数据结果
{
   "errcode": 0,
   "errmsg": "ok",
   "type": "file",
   "media_id": "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0",
   "created_at": "1380000000"
}
接下来通过curl去发送消息到api,把这个文件发送到对应webhook的群里
result={"msgtype": "file","file": {"media_id": "1G6nrLmr5EC3MMb_-zK1dDdzmd0p7cNliYu9V5w7o8K0"}}
curl "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa" -H 'Content-Type: application/json' -d "$result"
注意要求文件大小在5B~20M之间
  1. 分享我用python写的一个发送文件的脚本
#脚本的作用就是每天调用一个python脚本筛选生成一个日志文件,然后把这个日志文件发送到企业微信

#!/usr/bin/env python
#coding:utf-8
import requests,datetime,os,json
today=datetime.datetime.now().strftime("%Y-%m-%d")
onedayago = (datetime.datetime.now() + datetime.timedelta(days=-1)).strftime("%Y-%m-%d")
os.system('python /tmp/tool/get_log.py %s~%s' %(onedayago,today))
logfile="/tmp/test_log_%s_%s.txt" %(onedayago,today)
filename="test_log_%s_%s.txt" %(onedayago,today)

if os.path.isfile(logfile):
    url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa&type=file"
    payload={'Content-Disposition': 'form-data','name': 'media','filename': 'wework.txt'}
    files=[('boundary',('%s' %filename,open('%s' %logfile,'rb'),'application/octet-stream'))]
    headers = {}
    response = requests.request("POST", url, headers=headers, data=payload, files=files)
    mediaid = response.json()['media_id']
    url2 = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa"
    headers2 = {'Content-Type': 'application/json'}
    payload2 = {"msgtype": "file","file": { "media_id": "%s" %mediaid}}
    requests.request("POST", url2, headers=headers2, data=json.dumps(payload2))

参考链接:https://open.work.weixin.qq.com/api/doc/90000/90136/91770

你可能感兴趣的:(运维之道,python实践中的小实例,shell,python,运维,企业微信,机器人)