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来实现的代码示例如下:
- 1 import os,re,time,datetime,base64,requests,json
- 2 from requests_toolbelt import MultipartEncoder
- 3 import json
- 4
- 5 def SendGroupMsg(textContent, webHookUrl, mentioned_list=[],mentioned_mobile_list=[]):
- 6 """
- 7 发送微信群组机器人消息
- 8 :param textContent: 消息内容
- 9 :param webHookUrl: 群组机器人WebHook
- 10 :param mentioned_list: userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人
- 11 :param mentioned_mobile_list: 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人
- 12 :return:
- 13 """
- 14 # url为群组机器人WebHook,配置项
- 15 url = webHookUrl
- 16 headers = {
- 17 "content-type": "application/json"
- 18 }
- 19 msg = {"msgtype": "text",
- 20 "text": {
- 21 "content": textContent,
- 22 "mentioned_list":mentioned_list,
- 23 "mentioned_mobile_list": mentioned_mobile_list
- 24 }} # 发送文本消息27 # 发送请求
- 28 try:
- 29 result = requests.post(url, headers=headers, json=msg)
- 30 return True
- 31 except Exception as e:
- 32 # print("Requset Failed:", e)
- 33 return False
二、发送图片
图片类型
{
"msgtype": "image",
"image": {
"base64": "DATA",
"md5": "MD5"
}
}
参数 | 是否必填 | 说明 |
---|---|---|
msgtype | 是 | 消息类型,此时固定为image |
base64 | 是 | 图片内容的base64编码 |
md5 | 是 | 图片内容(base64编码前)的md5值 |
注:图片(base64编码前)最大不能超过2M,支持JPG,PNG格式
基于API文档,我们需要用python中特定模块得到图片的base64编码以及md5值,具体示例代码如下:
- import os,re,time,datetime,base64,requests,json,json,hashlib
- from requests_toolbelt import MultipartEncoder
- from urllib import parse
- def sendImg(imgPath,webHookUrl):
- """
- 发送微信群组机器人图片
- 图片支持jpg,png两种格式,大小不能超过2Mb
- :param imgPath: 图片的本地路径
- :param webHookUrl: 群组机器人WebHook
- :return:
- """
- # url为群组机器人WebHook,配置项
- url = webHookUrl
- with open(imgPath,"rb") as f:
- fd=f.read()
- base64Content=str(base64.b64encode(fd),"utf-8")
- with open(imgPath,"rb") as f:
- fd=f.read()
- md = hashlib.md5()
- md.update(fd)
- md5Content = md.hexdigest()
- headers = {"content-type": "application/json"}
- msg = {"msgtype": "image","image": {"base64": base64Content,"md5": md5Content}}
- # 发送请求
- try:
- result = requests.post(url, headers=headers, json=msg)
- 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 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'][0]
- 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借助企业微信群机器人发送消息、图片和文件的更多相关文章
- Python调用钉钉群机器人发送群消息
1.首先需要一个钉钉群,群才有机器人 2.群设置->智能群助手->添加机器人->自定义机器人 3.添加自定义机器人,配置如下:给机器人命名,选择加签.保存机器人的秘钥.Webhook ...
- 通过企业微信API接口发送消息
最近给公司测试组内部开发一个记账小工具,当账目出现问题的时候需要发送消息通知大家,前期主要采用的QQ发送通知消息,但是有一天突然无法连接到QQ服务器,运维的同学建议采用微信的方式对接然后进行告警,所以 ...
- UDP端口检查告警SHELL脚本(企业微信版机器人版)
脚本准备 0Batch_Check.sh 1port_check.sh 2wechat_bot_alert.sh CheckList CheckList #支持大/小写 10.1.1.5 Udp 53 ...
- Python接入企业微信 - 推送信息到内部群里
前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...
- springboot使用RestTemplate以post方式发送json字符串参数(以向钉钉机器人发送消息为例)
使用springboot之前,我们发送http消息是这么实现的 我们用了一个过时的类,虽然感觉有些不爽,但是出于一些原因,一直也没有做处理,最近公司项目框架改为了springboot,springbo ...
- 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串
微信通过openID发送消息/后台post.get提交并接收数据 控制器:下面是post发送消息(微信不支持从前台发送数据,之前试过,报错,需要跨域,跨域的问题解决后还不行,最后发现之后后端提交 ...
- python脚本实现向钉钉群组发送消息
一.json格式 import json import requests def sendmessage(message): url = 'https://oapi.dingtalk.com/robo ...
- Python 微信公众号发送消息
1. 公众号测试地址 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 2. ...
- Python如何实现微信群万人同步直播?
很多人传言微信网页版(https://wx.qq.com/)接口已经被封了,所以所有的微信都不能登录网页版,这是错误的. 2019年7月微信对网页版微信进行了动态安全策略调整,导致一大批微信号不能登录 ...
- Zabbix4.2.0使用Python连接企业微信报警
目录 1. 配置企业微信 2. 脚本配置 2.1 安装python依赖的库 2.2 编写脚本 2. 搭建FTP 3. 配置Zabbix监控FTP 3.1 添加FTP模板 3.2 添加报警媒介 3.3 ...
随机推荐
- 在Docker下一键安装部署免费开源的问答社区!
在Docker下一键安装部署免费开源的问答社区! 1.准备一台VPS主机,没有的话,[搞一台] 2.一键安装部署Docker wget https://raw.githubusercontent. ...
- CMP临时文件清理
■■ CMP临时文件 CMP - 指 Compression Advisor ,是 Oracle 数据库的压缩建议特性,在生成建议时产生的中间过程表,一般会自行删除.这个特性自 11.2.0.4 引入 ...
- PostgreSQL主备库搭建
pg主备库的搭建,首先需在2个节点安装pg软件,然后依次在2个节点配置主备. 本文采用os为CentOS7.6,pg版本使用14.2,以下为详细部署步骤. 本文两个节点的ip地址如下: [root@n ...
- Linux: Authentication token is no longer valid
遇见问题: [oracle@sxty-jkdb-184:/u01/rman]crontab -l Authentication token is no longer valid; new one re ...
- EXCEL表格,当字段值超出单元格的区域时,如何不显示??
问题阐述:当导出Excel表格的数据中的某一列字段的值超过单元格可以展示的范围,并且在Excel表格中展示为如下: 最终结果展示如下: 解决过程: 1.选中执行的单元格 2.右键选中"设置单 ...
- C#桶排序算法
前言 桶排序是一种线性时间复杂度的排序算法,它将待排序的数据分到有限数量的桶中,每个桶再进行单独排序,最后将所有桶中的数据按顺序依次取出,即可得到排序结果. 实现原理 首先根据待排序数据,确定需要的桶 ...
- 🎊OpenTiny Vue 3.11.0 发布:增加富文本、ColorPicker等4个新组件,迎来了贡献者大爆发!
你好,我是 Kagol. 非常高兴跟大家宣布,2023年10月24日,OpenTiny Vue 发布了 v3.11.0 . OpenTiny 每次大版本发布,都会给大家带来一些实用的新特性,8.14 ...
- vue3 移动端添加暗门 vconsole调试和显示隐藏
一.说明 需求: 生产环境出bug,是app单点登录,没法调试,需要加一个vconsole,但是不影响其他用户使用,于是想到用暗门的方式 实现: 最终实现如上图,点击个人中心几个字,点击10次显示vc ...
- IDEA在Debug模式下修改Java类,不小心关闭 Reload Changed Classes for AppArrowWebApplication 框提示之后的处理
问题描述:Springboot maven 聚合项目里面,经常要启动多个服务. 当我们修改其中一个服务的时候,debug 启动时 idea 就会提示是否需要重新编译修改的内容,弹窗让你选择reload ...
- 聊聊Transform模型
摘自<BERT基础教程:Transformer大模型实战 > 概述 循环神经网络和长短期记忆网络已经广泛应用于时序任务,比如文本预测.机器翻译.文章生成等.然而,它们面临的一大问题就是如何 ...