企业微信功能日益强大,腾讯官方也提供了丰富的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 QYWXSendGroupFile(filepath, url):
    """
    发送微信群组机器人文件
    :param filepath: 文件路径
    :param url: 群组机器人WebHook
    :return:
    """
    # url为群组机器人WebHook,配置项
    url = url
    headers = {
        "content-type": "application/json"
    }
    # 发送文件需要先上传文件获取media_id
    media_id = UploadFile(filepath, url)
    msg={"msgtype":"file","file":{"media_id":media_id}}
    # 发送请求
    try:
        result = requests.post(url, headers=headers, json=msg)
        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'][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借助企业微信群机器人发送消息、图片和文件的更多相关文章

  1. Python调用钉钉群机器人发送群消息

    1.首先需要一个钉钉群,群才有机器人 2.群设置->智能群助手->添加机器人->自定义机器人 3.添加自定义机器人,配置如下:给机器人命名,选择加签.保存机器人的秘钥.Webhook ...

  2. 通过企业微信API接口发送消息

    最近给公司测试组内部开发一个记账小工具,当账目出现问题的时候需要发送消息通知大家,前期主要采用的QQ发送通知消息,但是有一天突然无法连接到QQ服务器,运维的同学建议采用微信的方式对接然后进行告警,所以 ...

  3. UDP端口检查告警SHELL脚本(企业微信版机器人版)

    脚本准备 0Batch_Check.sh 1port_check.sh 2wechat_bot_alert.sh CheckList CheckList #支持大/小写 10.1.1.5 Udp 53 ...

  4. Python接入企业微信 - 推送信息到内部群里

    前言 之前一篇文章提到了使用wechatpy库来实现企业微信应用登录:Django + Taro 前后端分离项目实现企业微信登录 其实这个库可以实现的功能非常多,基本微信开发涉及到的功能都能实现. 本 ...

  5. springboot使用RestTemplate以post方式发送json字符串参数(以向钉钉机器人发送消息为例)

    使用springboot之前,我们发送http消息是这么实现的 我们用了一个过时的类,虽然感觉有些不爽,但是出于一些原因,一直也没有做处理,最近公司项目框架改为了springboot,springbo ...

  6. 微信通过openID发送消息/后台post、get提交并接收数据 C# .NET 配置404,500等错误信息 连接字符串

    微信通过openID发送消息/后台post.get提交并接收数据   控制器:下面是post发送消息(微信不支持从前台发送数据,之前试过,报错,需要跨域,跨域的问题解决后还不行,最后发现之后后端提交 ...

  7. python脚本实现向钉钉群组发送消息

    一.json格式 import json import requests def sendmessage(message): url = 'https://oapi.dingtalk.com/robo ...

  8. Python 微信公众号发送消息

    1. 公众号测试地址 https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index 2. ...

  9. Python如何实现微信群万人同步直播?

    很多人传言微信网页版(https://wx.qq.com/)接口已经被封了,所以所有的微信都不能登录网页版,这是错误的. 2019年7月微信对网页版微信进行了动态安全策略调整,导致一大批微信号不能登录 ...

  10. Zabbix4.2.0使用Python连接企业微信报警

    目录 1. 配置企业微信 2. 脚本配置 2.1 安装python依赖的库 2.2 编写脚本 2. 搭建FTP 3. 配置Zabbix监控FTP 3.1 添加FTP模板 3.2 添加报警媒介 3.3 ...

随机推荐

  1. 关于 iPhone 上的相机功能

    关于 iPhone 上的相机功能 了解 iPhone 上的摄影风格.快录功能.超广角摄像头和其他相机功能.   通过摄影风格功能锁定您的风格 借助 iPhone 13 各款机型和 iPhone SE( ...

  2. FreeRTOS 中的调度算法

    FreeRTOS 中的调度算法 01 调度算法概述 调度算法的作用: 实时系统的调度需求 相应时间要求 任务优先级 资源利用率 FreeRTOS 调度算法的目标 提供可预测的任务调度 实现任务的优先级 ...

  3. 普冉PY32系列(九) GPIO模拟和硬件SPI方式驱动无线收发芯片XL2400

    目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...

  4. Visible Lattice Points 题解

    Visible Lattice Points 题目大意 给定一个 \(N×N×N\) 的由若干点组成的立方体,点的坐标从 \((0,0,0)\) 到 \((N,N,N)\),求从点 \((0,0,0) ...

  5. 联想think服务器centos系统安装

    一.前言 本以为安装服务器是一件轻松顺利的事,没想到一安就是两天- 二.错误列表 1.硬件系统不兼容低版本centos 刚开始安装centos6.8的操作系统总是无法找到配置好的raid阵列导致无法安 ...

  6. spring-boot集成hikari多数据源

    maven依赖 <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</ ...

  7. kubeadm 添加master及node

    1.添加master 新master服务器初始化 添加k8s源 $ cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] ...

  8. Redis 技术整理

    认识Redis Redis官网:https://redis.io/ Redis诞生于2009年全称是Remote Dictionary Server 远程词典服务器,是一个基于内存的键值型NoSQL数 ...

  9. [Python急救站课程]获取星期字符串

    如何获取星期字符串 weekstr = "星期一星期二星期三星期四星期五星期六星期日" weekid = eval(input("请输入星期数字(1~7):") ...

  10. MongoDB 位置查询报错 planner returned error: unable to find index for $geoNear query

    执行查询语句,使用 $nearSphere /** * 1千米 = 0.6213712英里 15千米 = 9.3205679英里 查询通过除以地球的大约赤道半径(3963.2英里)将距离转换为弧度. ...