企业微信功能日益强大,腾讯官方也提供了丰富的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. Llama2-Chinese项目:3.1-全量参数微调

      提供LoRA微调和全量参数微调代码,训练数据为data/train_sft.csv,验证数据为data/dev_sft.csv,数据格式如下所示: "<s>Human: &q ...

  2. Python面向对象——封装

    文章目录 内容回顾 封装 为何要隐藏? 作业 内容回顾 上节课复习: 1.编程范式/思想 面向过程 介绍: 核心是"过程"二字 过程就是"流水线" 过程终极奥义 ...

  3. 【Azure Function App】Python Function调用Powershell脚本在Azure上执行失败的案例

    问题描述 编写Python Function,并且在Function中通过 subprocess  调用powershell.exe 执行 powershell脚本. import azure.fun ...

  4. Face to Face with Hurricane Camille

    1.Face to Face with Hurricane Camille Joseph P. Blank 1 John Koshak, Jr., knew that Hurricane Camill ...

  5. XCODE9.1的一些新问题

    自从XCODE7苹果就允许用免费的开发者账号进行真机测试了,但是还是有很多限制的. 在用的过程中发现限制如下: 1.只能生成*.app文件,不能打包成ipa.官方这么说的,但是奇诡的是,我archiv ...

  6. K8S 组合命令

    强制删除namespace kubectl get namespace [namespace-name] -o json | tr -d "\n" | sed "s/\& ...

  7. video.js 视频

    http://www.cnblogs.com/lechenging/p/3858181.html

  8. off-line RL | CQL:魔改 Bellman error 更新,得到 Q 函数 lower-bound

    论文题目: Conservative Q-Learning for Offline Reinforcement Learning CQL 是师兄盛赞的一篇论文:"是 off-line RL ...

  9. Excel 数据处理

    博客地址:https://www.cnblogs.com/zylyehuo/ 2023 年高教社杯全国大学生数学建模竞赛题目 -- B 题 多波束测线问题 图表格式 import numpy as n ...

  10. FC 交换机基础配置

    目录 Primera600 存储服务器 FC 交换机 交换机信息查看 交换机配置管理 用户管理 以太网配置 端口配置管理 别名配置 证书管理 角色管理 Zone 管理 参考网址 Primera600 ...