找回密码
 会员注册
查看: 27|回复: 0

Python:使用企业微信机器人发送消息到企业微信群

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
69864
发表于 2024-9-10 07:19:23 | 显示全部楼层 |阅读模式
一、获取自定义机器人webhook建立或者进入某个群聊进入群聊设置页面,点击“添加群机器人>添加”可添加一个机器人成功添加成功后,复制并保留其webhook地址。二、python代码classWechatBot:"""企业微信机器人当前自定义机器人支持文本(text)、markdown(markdown)、图片(image)、图文(news),文件(file)五种消息类型。机器人的text/markdown类型消息支持在content中使用扩展语法来@群成员"""def__init__(self,webhook_url):""":paramwebhook_url:机器人的WebHook_url"""self.webhook_url=webhook_urlself.headers={"Content-Type":"application/json","Charset":"UTF-8"}defsend_text(self,content,mentioned_list=[],mentioned_mobile_list=[]):"""发送文本消息:paramcontent:文本内容,最长不超过2048个字节,必须是utf8编码:parammentioned_list:userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list:parammentioned_mobile_list:手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人"""payload={"msgtype":"text","text":{"content":content,"mentioned_list":mentioned_list,"mentioned_mobile_list":mentioned_mobile_list}}response=request(url=self.webhook_url,method="POST",json=payload,headers=self.headers)ifresponse.json().get("errcode")==0:print(f"通过企业微信发送文本消息成功:{response.json()}")returnTrueelse:print(f"通过企业微信发送文本消息失败:{response.text}")returnFalsedefsend_markdown(self,content):"""发送markdown消息目前支持的markdown语法是如下的子集:1.(支持1至6级,注意#与文字中间要有空格)2.加粗3.链接4.行内代码段(暂不支持跨行)5.引用6.字体颜色(只支持3种内置颜色),绿色(color="info"),灰色(color="comment"),橙红色(color="warning"):paramcontent:markdown内容,最长不超过4096个字节,必须是utf8编码"""payload={"msgtype":"markdown","markdown":{"content":content}}response=request(url=self.webhook_url,method="POST",json=payload,headers=self.headers)ifresponse.json().get("errcode")==0:print(f"通过企业微信发送md消息成功:{response.json()}")returnTrueelse:print(f"通过企业微信发送md消息失败:{response.text}")returnFalsedefsend_picture(self,image_path):"""发送图片消息:paramimage_path:图片的绝对路径"""withopen(image_path,"rb")asf:image_data=f.read()payload={"msgtype":"image","image":{"base64":base64.b64encode(image_data).decode("utf-8"),##将图片数据转换成Base64编码格式"md5":hashlib.md5(image_data).hexdigest()##计算图片的MD5值}}response=request(url=self.webhook_url,method="POST",json=payload,headers=self.headers)ifresponse.json().get("errcode")==0:print(f"通过企业微信发送图片消息成功:{response.json()}")returnTrueelse:print(f"通过企业微信发送图片失败:{response.text}")returnFalsedefsend_text_picture(self,articles:list):"""发送图文消息:paramarticles:图文消息,一个图文消息支持1到8条图文,包括如下.title:,不超过128个字节,超过会自动截断2.description:非必填,描述,不超过512个字节,超过会自动截断3.url:点击后跳转的链接。4.picurl:非必填,图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图1068*455,小图150*150。"""payload={"msgtype":"news","news":{"articles":[]}}forarticleinarticles:payload["news"]["articles"].append({"title":article.get("title"),"description":article.get("description",""),"url":article.get("url"),"picurl":article.get("picurl","")})response=request(url=self.webhook_url,method="POST",json=payload,headers=self.headers)ifresponse.json().get("errcode")==0:print(f"通过企业微信发送图文消息成功:{response.json()}")returnTrueelse:print(f"通过企业微信发送图文失败:{response.text}")returnFalsedefupload_file(self,file_path):"""上传文件到企业微信服务器(要求文件大小在5B~20M之间)注意:素材上传得到media_id,该media_id仅三天内有效;media_id只能是对应上传文件的机器人可以使用:paramfile_path:文件绝对路径"""token_regex=r"key=([\w-]+)"match=re.search(token_regex,self.webhook_url)token=match.group(1)url=f"https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key={token}&type=file"headers={"Content-Type":"multipart/form-data;"}withopen(file_path,"rb")asf:files={"media"os.path.basename(file_path),f.read())}response=request(url=url,method="POST",files=files,headers=headers)ifresponse.json().get("errcode")==0:media_id=response.json().get("media_id")print(f"上传文件成功,media_id={media_id}")returnmedia_idelse:print(f"上传文件失败:{response.text}")returnFalsedefsend_file(self,media_id):"""发送文件:parammedia_id:文件id,通过下文的文件上传接口获取"""payload={"msgtype":"file","file":{"media_id":media_id,}}response=request(url=self.webhook_url,method="POST",json=payload,headers=self.headers)ifresponse.json().get("errcode")==0:print(f"通过企业微信发送文件消息成功:{response.json()}")returnTrueelse:print(f"通过企业微信发送文件消息失败:{response.text}")returnFalse123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164'运行运行三、机器人调用if__name__=='__main__':webhook_url="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=***"bot=WechatBot(webhook_url)bot.send_text(content="hello1",mentioned_list=["@all"])bot.send_text(content="hello2",mentioned_list=["@all"],mentioned_mobile_list=["19966666666"])md="测试test"bot.send_markdown(content=md)bot.send_picture(image_path=r"xxxxxx.png")articles=[{"title":"端午节礼品领取","description":"端午节礼公司有豪礼相送","url":"www.qq.com","picurl":"http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"}]bot.send_text_picture(articles=articles)filepath=r"xxxxxxx\xxx.xlsx"bot.send_file(media_id=bot.upload_file(filepath))12345678910111213141516171819
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 06:55 , Processed in 0.419685 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表