企业微信机器人消息发送(文本、图片、文件)
文章目录
- 一、企业微信机器人用途
- 二、前置条件
- 获取webhookurl
- 三、方法实现
- 1.发送文本消息方法
- 2.发送图片方法
- 3.发送文件方法
- 四、整体代码
一、企业微信机器人用途
本文记录将企业微信机器人应用在接口自动化测试过程中,对项目初始化异常报警以及执行结束将报告输出。
企业微信机器人API文档:https://developer.work.weixin.qq.com/document/path/92455
二、前置条件
获取webhookurl
具有后台权限的管理员添加机器人后,可读取到机器人特有的webhookurl。将机器人关联到某一群组中,请求webhookurl时,机器人将携带的消息发送至该群。
将机器人信息写入配置文件***.ini中:
[ALARM_ROBOT]
# 存放webhookurl
robot_curl=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=****
# 存放需要@的成员的手机号码
mentioned_mobile_list=18*********
三、方法实现
1.发送文本消息方法
构造请求体,txt为待发送文本;mentioned_mobile_list为需要@的成员的手机号码,通过配置文件读取。未添加对返回报文的校验,只写入日志。
代码如下(示例):
def send_txt(self, txt: str):"""企业微信机器人发送文本,例:"广州今日天气:29度,大部分多云,降雨概率:60%":param txt: 待发送文本内容:return:"""self.req_json["msgtype"] = "text"self.req_json["text"] = {}self.req_json["text"]["content"] = txtself.req_json["text"]["mentioned_mobile_list"] = [phone for phone in self.robot_info['mentioned_mobile_list'].split(',')]try:resp = requests.post(url=self.robot_curl, headers=self.headers, json=self.req_json)mylog.info(f"企业微信机器人发送消息:req_json: {self.req_json}\n"f"response: {resp.text}")except Exception:mylog.exception(f"企业微信机器人发送信息失败,text: {txt}")
2.发送图片方法
需要对图片进行base64和md5转换,附转换方法。
代码如下(示例):
def send_pic(self, pic_path: str) -> bool:"""企业微信机器人发送图片:param pic_path: 图片路径:return:"""self.req_json["msgtype"] = "image"self.req_json["image"] = {}self.req_json["image"]["base64"] = path2base64(pic_path)self.req_json["image"]["md5"] = path2md5(pic_path)try:resp = requests.post(url=self.robot_curl, headers=self.headers, json=self.req_json)mylog.info(f"企业微信机器人发送图片:req_json: {self.req_json}\n"f"response: {resp.text}")except Exception:mylog.exception(f"企业微信机器人发送图片失败,req_json: {self.req_json}")
base64与md5转换方法:
import base64
import hashlib
def path2base64(path: str) -> str:"""文件转换为base64:param path: 文件路径:return:"""with open(path, "rb") as f:byte_data = f.read()base64_str = base64.b64encode(byte_data).decode("ascii") # 二进制转base64return base64_strdef path2md5(path: str) -> str:"""文件转换为md5:param path: 文件路径:return:"""with open(path, "rb") as f:byte_data = f.read()md5_str = md5(byte_data)return md5_strdef md5(text: all) -> str:"""md5加密:param text::return:"""m = hashlib.md5()m.update(text)return m.hexdigest()
3.发送文件方法
支持所有文件类型,excel/word/ppt/html/zip等等,发送文件前需要先上传文件。
上传文件方法:
def upload_file(self, file_path: str) -> str:"""企业微信机器人上传文件,发送文件前需要现上传:param file_path: 文件路径:return:"""try:data = {'file': open(file_path, 'rb')}resp = requests.post(self.upload_url, files=data)json_res = resp.json()if json_res.get('media_id'):mylog.info(f"企业微信机器人上传文件成功,file:{file_path}")return json_res.get('media_id')except Exception:mylog.exception(f"企业微信机器人上传文件失败,file: {file_path}")return ""
发送文件方法:
def send_file(self, file_path: str) -> bool:"""企业微信机器人发送文件,例如:report.html:param file_path: 文件路径:return:"""try:self.req_json["msgtype"] = "file"self.req_json["file"] = {}self.req_json["file"]["media_id"] = self.upload_file(file_path)resp = requests.post(url=self.robot_curl, headers=self.headers, json=self.req_json)mylog.info(f"企业微信机器人发送文件:req_json: {self.req_json}\n"f"response: {resp.text}")except Exception:mylog.exception(f"企业微信机器人发送文件失败,req_json: {self.req_json}")
四、整体代码
import re
import requests
from base.init_data import InitData
from base.my_logger import MyLogger
from common.my_function import path2md5, path2base64mylog = MyLogger()class WechatRobot(InitData):"""企业微信机器人发送消息类,当前支持文本、图片、文件,根据腾讯提供的API文档还支持图文、markdown、模板卡片等,待有需求时添加。每个机器人发送的消息不能超过20条/分钟。企业微信机器人API文档:https://developer.work.weixin.qq.com/document/path/92455"""def __init__(self):self.headers = {'Content-Type': 'application/json'}self.robot_curl = self.robot_info['robot_curl']self.upload_url = f'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={re.findall("key=(.*)&*", self.robot_curl)[0]}&type=file'self.req_json = {}def send_txt(self, txt: str) -> bool:"""企业微信机器人发送文本,例:"广州今日天气:29度,大部分多云,降雨概率:60%":param txt: 待发送文本内容:return:"""self.req_json["msgtype"] = "text"self.req_json["text"] = {}self.req_json["text"]["content"] = txtself.req_json["text"]["mentioned_mobile_list"] = [phone for phone inself.robot_info['mentioned_mobile_list'].split(',')]try:resp = requests.post(url=self.robot_curl, headers=self.headers, json=self.req_json)mylog.info(f"企业微信机器人发送消息:req_json: {self.req_json}\n"f"response: {resp.text}")except Exception:mylog.exception(f"企业微信机器人发送信息失败,text: {txt}")def send_pic(self, pic_path: str) -> bool:"""企业微信机器人发送图片:param pic_path: 图片路径:return:"""self.req_json["msgtype"] = "image"self.req_json["image"] = {}self.req_json["image"]["base64"] = path2base64(pic_path)self.req_json["image"]["md5"] = path2md5(pic_path)try:resp = requests.post(url=self.robot_curl, headers=self.headers, json=self.req_json)mylog.info(f"企业微信机器人发送图片:req_json: {self.req_json}\n"f"response: {resp.text}")except Exception:mylog.exception(f"企业微信机器人发送图片失败,req_json: {self.req_json}")def send_file(self, file_path: str) -> bool:"""企业微信机器人发送文件,例如:report.html:param file_path: 文件路径:return:"""try:self.req_json["msgtype"] = "file"self.req_json["file"] = {}self.req_json["file"]["media_id"] = self.upload_file(file_path)resp = requests.post(url=self.robot_curl, headers=self.headers, json=self.req_json)mylog.info(f"企业微信机器人发送文件:req_json: {self.req_json}\n"f"response: {resp.text}")except Exception:mylog.exception(f"企业微信机器人发送文件失败,req_json: {self.req_json}")def upload_file(self, file_path: str) -> str:"""企业微信机器人上传文件,发送文件前需要现上传:param file_path: 文件路径:return:"""try:data = {'file': open(file_path, 'rb')}resp = requests.post(self.upload_url, files=data)json_res = resp.json()if json_res.get('media_id'):mylog.info(f"企业微信机器人上传文件成功,file:{file_path}")return json_res.get('media_id')except Exception:mylog.exception(f"企业微信机器人上传文件失败,file: {file_path}")return ""if __name__ == '__main__':wechat_robot = WechatRobot()file_path = './testdatas.zip'wechat_robot.send_file(file_path)
企业微信机器人消息发送(文本、图片、文件)相关推荐
- Windows下企业微信机器人定时发送消息
Windows下企业微信机器人定时发送消息提醒(小白篇) - 简书 Windows terminal使用curl出现错误 - 简书 $url = "https://qyapi.weixin. ...
- GitLab cicd 流水线添加企业微信机器人消息通知
GitLab cicd 流水线添加企业微信机器人消息通知 描述 公司部门需要我们在进行项目发布的时候,希望能通过企业微信机器人,来告诉测试,是发布还是项目出来了问题,因为项目没有做无感知处理,所以每次 ...
- 【java】企业微信机器人消息推送
日常项目维护过程中,我们都会把一些系统异常,生存状态监控等信息记录下来,如果发现服务异常等情况的时候方便我们及时的定位问题,但是如果出现服务器宕机,cpu 内存 负载过高.数据库宕机等紧急问题的情况下 ...
- Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈
通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈.在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例.但由于 ...
- 【企业微信机器人】发送网络图片到指定群聊
企业微信文档 企业微信开发者中心关于群机器人文档 图片推送接口: 核心代码 发送网络图片到群聊核心代码 /*** 发送指定网络图片到群聊* @param webHookUrl 群聊机器人* @para ...
- 企业微信机器人脚本python_python3 企业微信机器人发送图片
最近在搞闽政通各种监控,使用paramiko推送脚本取回监控数据入库,写脚本练练脑 刚好企业微信机器人有发送图片功能,简单的试了下,监控并发连接数,搞可视化的图. 想想用机器人斗图一定很happy.. ...
- WIndow 10 环境下使用CURL工具完成企业微信机器人的提醒功能
企业微信机器人提醒功能实现说明 本文档主要讲解企业微信机器人的提醒功能的在window下的实现方法,主要内容包括机器人的创建,CURL工具使用环境的搭建和最终实现消息提醒功能三个主要模块.企业微信机器 ...
- pushplus推送到企业微信机器人教程
pushplus推送到企业微信机器人教程 pushplus官网:http://www.pushplus.plus 引言 pushplus目前已经实现了将消息推送到企业微信.钉钉.飞书机器人等渠道. ...
- python调用企业微信机器人API-自动发送文本、图片与CSV文件3种方式
前言:使用企业微信app端,在群里添加robot并命名:PC端点击robot可编辑相关资料. 正文 1.调用企业微信API-发送文本. 1.1接口说明: 这里文本发送markdown格式.文本具体呈现 ...
- 企业微信机器人脚本python_python实现企业微信定时发送文本消息的示例代码
企业微信定时发送文本消息 使用工具:企业微信机器人+python可执行文件+计算机管理中的任务计划程序 第一步:创建群机器人 选择群聊,单击鼠标右键,添加群机器人. 建立群机器人后,右键查看机器人,如 ...
最新文章
- JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
- 微信小程序拼团后端接口设计规范
- python使用localhost链接mysql出错及解决办法
- 后端开发必知必学的 Linux 命令行大全
- 【干货】深入B端SaaS产品设计核心理念
- windows nginx c++读取请求数据_震撼!全网第一张源码分析全景图揭秘Nginx
- Android Linker学习笔记
- rxjs 里的map operator
- java获取页面标签_java获取网页源代码后,提取标签内容……
- dedecms 添加,编辑文章时 文章标题有字数限制的解决办法。
- 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(pytorch函数)(三)
- python自学行吗-自学python有用吗?
- “不可不学是编程,不可不用是git” | github篇
- 【Unity3D日常开发】Unity3D中 C#反射Reflection的使用
- Excel 散点图和折线图的区别
- 新浪微博since_id值
- 南京邮电大学壁纸计算机院,立夏 | 一大波夏日壁纸放送
- redis资源未释放引发的问题
- 计算机支持教学管理任务各种应用,2014暑期-多媒体制作与教学资源应用培训讲义-肖玉玉.ppt...
- 【SpringBoot】application配置文件及注入
热门文章
- netty 权威指南~第11章——WebSoket协议开发
- Word宏的利用学习
- (Oracle)零基础学习SQL语句--第1篇
- STM32F107单片机驱动Dp83848以太网芯片程序 项目开发用到了Dp83848这一个以太网芯片,本人发现其配置起来比较麻烦,所以整理了一份STM32F107单片机驱动Dp83848的程序代码例
- linux 添加udp端口映射,iptables下udp端口转发
- Gof23设计模式速记(迷你图)
- 软件项目管理第四章笔记---项目时间管理
- QTableView自定义拖拽行
- 【最新】电脑常用装机软件组合 装机必备
- 翻译:SWFObject 2.0官方文档