Python 操控企业微信群机器人
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 操控企业微信群机器人相关的知识,希望对你有一定的参考价值。
参考技术A 企业微信群机器人常用来作为通知工具,群发消息给群内成员,充当小助手的角色。但若按照官方 API 文档来构建请求,也确实不太方便。本文通过 Python 第三方库来控制企业微信群机器人发送消息。添加机器人之后,可以获取到 webhook 地址,假设 webhook 是: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=633a31f6-7f9c-4bc4-97a0-0ec1eefa589
webhook 中的 633a31f6-7f9c-4bc4-97a0-0ec1eefa589 就是 Robot Key
发送纯文本消息
发送 Markdown 格式消息
发送图片
还支持直接发送一个在线的图片
发送图文
该第三方库还提供了命令行工具供用户执行,即使不会 Python 也能便捷的使用。
对参数进行一下说明:
说明:
发送文本消息,可以直接指定字符串内容:
也可以指定文本文件:
发送 markdown 格式的消息:
发送图片:
发送图文消息:
Python借助企业微信群机器人推送消息和文件
企业微信功能日益强大,腾讯官方也提供了丰富的API供开发者实现企业微信的很多自动化场景。比如,如何给某个企业微信群发送消息、图片或者文件,甚至@指定群用户?别急,看小爬君轻松教会大家。
Step1:在企业微信PC端或者移动端找几个用户创建一个企业微信群(步骤略过);
STEP2:在企业微信群中添加一个【群机器人】;
点击企业微信群聊天界面,点击右上角【···】按钮,然后点击【添加群机器人】,如下图所示:
然后,我们在该企业微信群就能看到群成员【群机器人】了,在群成员界面,鼠标悬停在该【群机器人】位置,就可以看到该机器人的具体信息,如下图所示:
有了上面的两个步骤,这样一个专属的群机器人就创建好了,其中上图中的Webhook属性(url地址)是该机器人的关键信息,类似于机器人ID。
现在我们来看下如何用该群机器人往群里发消息,发图片,发文件。想要看完整的企业微信API文档的,请移步【腾讯企业微信开发者中心】页面:群机器人配置说明 - 文档 - 企业微信开发者中心 (qq.com)
一、发送文本类型数据
"msgtype": "text", "text": "content": "广州今日天气:29度,大部分多云,降雨概率:60%", "mentioned_list":["wangqing","@all"], "mentioned_mobile_list":["13800001111","@all"]
参数 | 是否必填 | 说明 |
---|---|---|
msgtype | 是 | 消息类型,此时固定为text |
content | 是 | 文本内容,最长不超过2048个字节,必须是utf8编码 |
mentioned_list | 否 | userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list |
mentioned_mobile_list | 否 | 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人 |
用python来实现的代码示例如下:
import os,re,time,datetime,base64,requests,json from requests_toolbelt import MultipartEncoder import json def SendGroupMsg(textContent, webHookUrl, mentioned_list=[],mentioned_mobile_list=[]): """ 发送微信群组机器人消息 :param textContent: 消息内容 :param webHookUrl: 群组机器人WebHook :param mentioned_list: userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人 :param mentioned_mobile_list: 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人 :return: """ # url为群组机器人WebHook,配置项 url = webHookUrl headers = "content-type": "application/json" msg = "msgtype": "text", "text": "content": textContent, "mentioned_list":mentioned_list, "mentioned_mobile_list": mentioned_mobile_list # 发送文本消息 # 由于API接收的是json字符串,故需要转化一下 data = json.dumps(msg, ensure_ascii=False).encode(\'utf-8\') # 发送请求 try: result = requests.post(url, headers=headers, data=data) return True except Exception as e: # print("Requset Failed:", e) return False
二、发送群文件
"msgtype": "file", "file": "media_id": "3a8asd892asd8asd"
在发送文件之前,我们需要请求如下接口,获取到media_id参数。
文件上传接口
素材上传得到media_id,该media_id仅三天内有效
media_id只能是对应上传文件的机器人可以使用
请求方式:POST(HTTPS)
请求地址:https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=KEY&type=TYPE
使用multipart/form-data POST上传文件, 文件标识名为"media"
参数说明:
参数 | 必须 | 说明 |
---|---|---|
key | 是 | 调用接口凭证, 机器人webhookurl中的key参数 |
type | 是 | 固定传file |
POST的请求包中,form-data中媒体文件标识,应包含有 filename、filelength、content-type等信息
filename标识文件展示的名称。比如,使用该media_id发消息时,展示的文件名由该字段控制
有了这两个接口的API,用python来实现【发送群文件】就不是难题了:
import os,re,time,datetime,base64,requests,json from requests_toolbelt import MultipartEncoder from urllib import parse import json
def SendGroupFile(filepath, webHookUrl): """ 发送微信群组机器人文件 :param filepath: 文件路径 :param webHookUrl: 群组机器人WebHook :return: """ # url为群组机器人WebHook,配置项 url = webHookUrl headers = "content-type": "application/json" # 发送文件需要先上传文件获取media_id media_id = UploadFile(filepath, url) req_json = dict() req_json["msgtype"] = "file" req_json["file"] = dict() req_json["file"]["media_id"] = media_id # 发送请求 try: result = requests.post(url, headers=headers, json=req_json) return True except Exception as e: print("企业微信机器人发送文件失败,详细信息:" + str(e)) return False def UploadFile(filepath, webHookUrl): """ 企业微信机器人上传文件,发送文件前需要先上传--要求文件大小在5B~20M之间 :param filepath: 文件路径 :param webHookUrl: 群组机器人WebHook :return: media_id """ # url为群组机器人WebHook,配置项 url = webHookUrl params = parse.parse_qs( parse.urlparse( webHookUrl ).query ) webHookKey=params[\'key\'] upload_url = f\'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=webHookKey&type=file\' headers = "Accept": "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.100 Safari/537.36" filename = os.path.basename(filepath) try: multipart = MultipartEncoder( fields=\'filename\': filename, \'filelength\': \'\', \'name\': \'media\', \'media\': (filename, open(filepath, \'rb\'), \'application/octet-stream\'), boundary=\'-------------------------acebdf13572468\') headers[\'Content-Type\'] = multipart.content_type resp = requests.post(upload_url, headers=headers, data=multipart) json_res = resp.json() if json_res.get(\'media_id\'): # print(f"企业微信机器人上传文件成功,file:filepath") return json_res.get(\'media_id\') except Exception as e: # print(f"企业微信机器人上传文件失败,file: filepath, 详情:e") print("企业微信机器人上传文件失败,详细信息:" + str(e)) return ""
感兴趣的童鞋,快动手试试吧!
快来扫码关注我的公众号 获取更多爬虫、数据分析的知识!
以上是关于Python 操控企业微信群机器人的主要内容,如果未能解决你的问题,请参考以下文章