企业微信功能日益强大,腾讯官方也提供了丰富的API供开发者实现企业微信的很多自动化场景。比如,如何给某个企业微信群发送消息、图片或者文件,甚至@指定群用户?别急,看小爬君轻松教会大家。

Step1:在企业微信PC端或者移动端找几个用户创建一个企业微信群(步骤略过);

STEP2:在企业微信群中添加一个【群机器人】;

  点击企业微信群聊天界面,点击右上角【···】按钮,然后点击【添加群机器人】,如下图所示:

  

  然后,我们在该企业微信群就能看到群成员【群机器人】了,在群成员界面,鼠标悬停在该【群机器人】位置,就可以看到该机器人的具体信息,如下图所示:

  有了上面的两个步骤,这样一个专属的群机器人就创建好了,其中上图中的Webhook属性(url地址)是该机器人的关键信息,类似于机器人ID。

现在我们来看下如何用该群机器人往群里发消息,发图片,发文件。想要看完整的企业微信API文档的,请移步【腾讯企业微信开发者中心】页面:群机器人配置说明 - 文档 - 企业微信开发者中心 (qq.com)

一、发送文本类型数据

  1. {
  2. "msgtype": "text",
  3. "text": {
  4. "content": "广州今日天气:29度,大部分多云,降雨概率:60%",
  5. "mentioned_list":["wangqing","@all"],
  6. "mentioned_mobile_list":["13800001111","@all"]
  7. }
  8. }
参数 是否必填 说明
msgtype 消息类型,此时固定为text
content 文本内容,最长不超过2048个字节,必须是utf8编码
mentioned_list userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list
mentioned_mobile_list 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人

用python来实现的代码示例如下:

  1. 1 import os,re,time,datetime,base64,requests,json
  2. 2 from requests_toolbelt import MultipartEncoder
  3. 3 import json
  4. 4
  5. 5 def SendGroupMsg(textContent, webHookUrl, mentioned_list=[],mentioned_mobile_list=[]):
  6. 6 """
  7. 7 发送微信群组机器人消息
  8. 8 :param textContent: 消息内容
  9. 9 :param webHookUrl: 群组机器人WebHook
  10. 10 :param mentioned_list: userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人
  11. 11 :param mentioned_mobile_list: 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人
  12. 12 :return:
  13. 13 """
  14. 14 # url为群组机器人WebHook,配置项
  15. 15 url = webHookUrl
  16. 16 headers = {
  17. 17 "content-type": "application/json"
  18. 18 }
  19. 19 msg = {"msgtype": "text",
  20. 20 "text": {
  21. 21 "content": textContent,
  22. 22 "mentioned_list":mentioned_list,
  23. 23 "mentioned_mobile_list": mentioned_mobile_list
  24. 24 }} # 发送文本消息27 # 发送请求
  25. 28 try:
  26. 29 result = requests.post(url, headers=headers, json=msg)
  27. 30 return True
  28. 31 except Exception as e:
  29. 32 # print("Requset Failed:", e)
  30. 33 return False

二、发送图片

图片类型

  1. {
  2. "msgtype": "image",
  3. "image": {
  4. "base64": "DATA",
  5. "md5": "MD5"
  6. }
  7. }
 
参数 是否必填 说明
msgtype 消息类型,此时固定为image
base64 图片内容的base64编码
md5 图片内容(base64编码前)的md5值

注:图片(base64编码前)最大不能超过2M,支持JPG,PNG格式

基于API文档,我们需要用python中特定模块得到图片的base64编码以及md5值,具体示例代码如下:

  1. import os,re,time,datetime,base64,requests,json,json,hashlib
  2. from requests_toolbelt import MultipartEncoder
  3. from urllib import parse
  4.  
  5. def sendImg(imgPath,webHookUrl):
  6. """
  7. 发送微信群组机器人图片
  8. 图片支持jpg,png两种格式,大小不能超过2Mb
  9. :param imgPath: 图片的本地路径
  10. :param webHookUrl: 群组机器人WebHook
  11. :return:
  12. """
  13. # url为群组机器人WebHook,配置项
  14. url = webHookUrl
  15. with open(imgPath,"rb") as f:
  16. fd=f.read()
  17. base64Content=str(base64.b64encode(fd),"utf-8")
  18. with open(imgPath,"rb") as f:
  19. fd=f.read()
  20. md = hashlib.md5()
  21. md.update(fd)
  22. md5Content = md.hexdigest()
  23. headers = {"content-type": "application/json"}
  24. msg = {"msgtype": "image","image": {"base64": base64Content,"md5": md5Content}}
  25. # 发送请求
  26. try:
  27. result = requests.post(url, headers=headers, json=msg)
  28. return True
  29. except Exception as e:
  30. # print("Requset Failed:", e)
  31. return False

三、发送群文件

  1. {
  2. "msgtype": "file",
  3. "file": {
  4. "media_id": "3a8asd892asd8asd"
  5. }
  6. }

在发送文件之前,我们需要请求如下接口,获取到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来实现【发送群文件】就不是难题了:

  1. import os,re,time,datetime,base64,requests,json
  2. from requests_toolbelt import MultipartEncoder
  3. from urllib import parse
  4. 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
  1. def UploadFile(filepath, webHookUrl):
  2. """
  3. 企业微信机器人上传文件,发送文件前需要先上传--要求文件大小在5B~20M之间
  4. :param filepath: 文件路径
  5. :param webHookUrl: 群组机器人WebHook
  6. :return: media_id
  7. """
  8. # url为群组机器人WebHook,配置项
  9. url = webHookUrl
  10. params = parse.parse_qs( parse.urlparse( webHookUrl ).query )
  11. webHookKey=params['key'][0]
  12. upload_url = f'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={webHookKey}&type=file'
  13. headers = {"Accept": "application/json, text/plain, */*", "Accept-Encoding": "gzip, deflate",
  14. "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"}
  15. filename = os.path.basename(filepath)
  16. try:
  17. multipart = MultipartEncoder(
  18. fields={'filename': filename, 'filelength': '', 'name': 'media', 'media': (filename, open(filepath, 'rb'), 'application/octet-stream')},
  19. boundary='-------------------------acebdf13572468')
  20. headers['Content-Type'] = multipart.content_type
  21. resp = requests.post(upload_url, headers=headers, data=multipart)
  22. json_res = resp.json()
  23. if json_res.get('media_id'):
  24. # print(f"企业微信机器人上传文件成功,file:{filepath}")
  25. return json_res.get('media_id')
  26. except Exception as e:
  27. # print(f"企业微信机器人上传文件失败,file: {filepath}, 详情:{e}")
  28. print("企业微信机器人上传文件失败,详细信息:" + str(e))
  29. 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. pandas(进阶操作)-- 处理非数值型数据 -- 数据分析三剑客(核心)

    博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jup ...

  2. Python网络编程——基于tcp协议实现远程执行命令、udp协议没有粘包问题、解决粘包问题、socketserver模块的基本使用(基于tcp协议、基于udp协议的使用)

    文章目录 基于tcp协议实现远程执行命令 udp协议没有粘包问题 解决粘包问题 解决粘包问题(终极版) socketserver模块的基本使用 基于tcp协议的使用 基于udp协议的使用 基于tcp协 ...

  3. Factors 分解质因数

    package com.yourself.yours; import java.util.Scanner; /** ****************************************** ...

  4. 教育法学期末考试02MOOC

    期末考试 返回 期末考试试卷为客观题,总分为100分,占课程成绩的40%.其中包含16道单选题,2道多选题.共18道题.单选题每道5分,多选题每道10分,限时90分钟完成.  倒计时:  01:21: ...

  5. CMP临时文件清理

    ■■ CMP临时文件 CMP - 指 Compression Advisor ,是 Oracle 数据库的压缩建议特性,在生成建议时产生的中间过程表,一般会自行删除.这个特性自 11.2.0.4 引入 ...

  6. 传纸条 luoguP1006

    题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排坐成一个 mm 行 nn 列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈 ...

  7. [CF1178 F2] Long Colorful Strip

    F2 - Long Colorful Strip 很牛的题! 首先,我们可以将颜色相同的一段区间缩成一个点,那么每次加入一个新的颜色时,最多只能将其所覆盖的那个颜色所属的区间分成三部分(原本:0000 ...

  8. Little Victor and Set 题解

    Little Victor and Set 题目大意 在 \([l,r]\) 中选不超过 \(k\) 个相异的数使得异或和最小,输出方案. 思路分析 分类讨论: 当 \(k=1\) 时: 显然选 \( ...

  9. 文心一言 VS 讯飞星火 VS chatgpt (122)-- 算法导论10.4 3题

    三.用go语言,给定一个n结点的二叉树,写出一个 O(n)时间的非递归过程,将该树每个结点的关键字输出.可以使用一个栈作为辅助数据结构. 文心一言: 以下是一个使用 Go 语言编写的函数,该函数使用一 ...

  10. 详述Java内存屏障,透彻理解volatile

    一般来说内存屏障分为两层:编译器屏障和CPU屏障,前者只在编译期生效,目的是防止编译器生成乱序的内存访问指令:后者通过插入或修改特定的CPU指令,在运行时防止内存访问指令乱序执行. 下面简单说一下这两 ...