文章目录

  • 一、企业微信机器人用途
  • 二、前置条件
    • 获取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)

企业微信机器人消息发送(文本、图片、文件)相关推荐

  1. Windows下企业微信机器人定时发送消息

    Windows下企业微信机器人定时发送消息提醒(小白篇) - 简书 Windows terminal使用curl出现错误 - 简书 $url = "https://qyapi.weixin. ...

  2. GitLab cicd 流水线添加企业微信机器人消息通知

    GitLab cicd 流水线添加企业微信机器人消息通知 描述 公司部门需要我们在进行项目发布的时候,希望能通过企业微信机器人,来告诉测试,是发布还是项目出来了问题,因为项目没有做无感知处理,所以每次 ...

  3. 【java】企业微信机器人消息推送

    日常项目维护过程中,我们都会把一些系统异常,生存状态监控等信息记录下来,如果发现服务异常等情况的时候方便我们及时的定位问题,但是如果出现服务器宕机,cpu 内存 负载过高.数据库宕机等紧急问题的情况下 ...

  4. Swift - 发送消息(文本,图片,文件等)给微信好友或分享到朋友圈

    通过调用微信提供的API接口,我们可以很方便的在应用中发送消息给微信好友,或者分享到朋友圈.在微信开发平台(https://open.weixin.qq.com)里,提供了详细的说明文档和样例.但由于 ...

  5. 【企业微信机器人】发送网络图片到指定群聊

    企业微信文档 企业微信开发者中心关于群机器人文档 图片推送接口: 核心代码 发送网络图片到群聊核心代码 /*** 发送指定网络图片到群聊* @param webHookUrl 群聊机器人* @para ...

  6. 企业微信机器人脚本python_python3 企业微信机器人发送图片

    最近在搞闽政通各种监控,使用paramiko推送脚本取回监控数据入库,写脚本练练脑 刚好企业微信机器人有发送图片功能,简单的试了下,监控并发连接数,搞可视化的图. 想想用机器人斗图一定很happy.. ...

  7. WIndow 10 环境下使用CURL工具完成企业微信机器人的提醒功能

    企业微信机器人提醒功能实现说明 本文档主要讲解企业微信机器人的提醒功能的在window下的实现方法,主要内容包括机器人的创建,CURL工具使用环境的搭建和最终实现消息提醒功能三个主要模块.企业微信机器 ...

  8. pushplus推送到企业微信机器人教程

    pushplus推送到企业微信机器人教程 pushplus官网:http://www.pushplus.plus 引言   pushplus目前已经实现了将消息推送到企业微信.钉钉.飞书机器人等渠道. ...

  9. python调用企业微信机器人API-自动发送文本、图片与CSV文件3种方式

    前言:使用企业微信app端,在群里添加robot并命名:PC端点击robot可编辑相关资料. 正文 1.调用企业微信API-发送文本. 1.1接口说明: 这里文本发送markdown格式.文本具体呈现 ...

  10. 企业微信机器人脚本python_python实现企业微信定时发送文本消息的示例代码

    企业微信定时发送文本消息 使用工具:企业微信机器人+python可执行文件+计算机管理中的任务计划程序 第一步:创建群机器人 选择群聊,单击鼠标右键,添加群机器人. 建立群机器人后,右键查看机器人,如 ...

最新文章

  1. JVM 有 Full GC,为什么还会出现 OutOfMemoryError呢?
  2. 微信小程序拼团后端接口设计规范
  3. python使用localhost链接mysql出错及解决办法
  4. 后端开发必知必学的 Linux 命令行大全
  5. 【干货】深入B端SaaS产品设计核心理念
  6. windows nginx c++读取请求数据_震撼!全网第一张源码分析全景图揭秘Nginx
  7. Android Linker学习笔记
  8. rxjs 里的map operator
  9. java获取页面标签_java获取网页源代码后,提取标签内容……
  10. dedecms 添加,编辑文章时 文章标题有字数限制的解决办法。
  11. 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(pytorch函数)(三)
  12. python自学行吗-自学python有用吗?
  13. “不可不学是编程,不可不用是git” | github篇
  14. 【Unity3D日常开发】Unity3D中 C#反射Reflection的使用
  15. Excel 散点图和折线图的区别
  16. 新浪微博since_id值
  17. 南京邮电大学壁纸计算机院,立夏 | 一大波夏日壁纸放送
  18. redis资源未释放引发的问题
  19. 计算机支持教学管理任务各种应用,2014暑期-多媒体制作与教学资源应用培训讲义-肖玉玉.ppt...
  20. 【SpringBoot】application配置文件及注入

热门文章

  1. netty 权威指南~第11章——WebSoket协议开发
  2. Word宏的利用学习
  3. (Oracle)零基础学习SQL语句--第1篇
  4. STM32F107单片机驱动Dp83848以太网芯片程序 项目开发用到了Dp83848这一个以太网芯片,本人发现其配置起来比较麻烦,所以整理了一份STM32F107单片机驱动Dp83848的程序代码例
  5. linux 添加udp端口映射,iptables下udp端口转发
  6. Gof23设计模式速记(迷你图)
  7. 软件项目管理第四章笔记---项目时间管理
  8. QTableView自定义拖拽行
  9. 【最新】电脑常用装机软件组合 装机必备
  10. 翻译:SWFObject 2.0官方文档