Skip to content

Instantly share code, notes, and snippets.

@Ryaang
Created September 17, 2023 06:55
Show Gist options
  • Select an option

  • Save Ryaang/a41a8f5368271e87094e1a8700f1adc4 to your computer and use it in GitHub Desktop.

Select an option

Save Ryaang/a41a8f5368271e87094e1a8700f1adc4 to your computer and use it in GitHub Desktop.
调用webhook向微信企业版机器人发送消息
import requests
import json
import hashlib
import base64
import os
class WeComBot():
headers = {"Content-Type": "application/json"}
req_message = {"errcode": 1,"errmessage": "请求微信企业失败,请检查网络"}
def __init__(self, webhook):
self.post_url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={0}".format(webhook)
def _req(self,data):
try:
return requests.post(self.post_url, data=json.dumps(data), headers=self.headers,timeout=10).json()
except Exception as e:
return self.req_message
def sendMessage(self, content,mentioned_list=[],mentioned_mobile_list=[]):
"""
msgtype 是 消息类型,此时固定为text
content 是 文本内容,最长不超过2048个字节,必须是utf8编码
mentioned_list 否 userid的列表,提醒群中的指定成员(@某个成员),@all表示提醒所有人,如果开发者获取不到userid,可以使用mentioned_mobile_list
mentioned_mobile_list 否 手机号列表,提醒手机号对应的群成员(@某个成员),@all表示提醒所有人
"""
data = {"msgtype": "text","text": {"content": str(content),"mentioned_list": mentioned_list,"mentioned_mobile_list": mentioned_mobile_list}}
return self._req(data)
def sendMarkdown(self, message):
data = {"msgtype": "markdown","markdown": {"content": str(message)}}
return self._req(data)
def sendNews(self, message):
data = {"msgtype": "news","news": {"articles": list(message)}}
# print (data)
return self._req(data)
def sendImage(self, image_path):
if os.path.exists(image_path):
with open(image_path, "br") as f:
fcont = f.read()
ls_f = base64.b64encode(fcont)
fmd5 = hashlib.md5(fcont)
data = {"msgtype": "image", "image": {"base64": ls_f.decode('utf8'), "md5": fmd5.hexdigest()}}
return self._req(data)
else:
self.req_message['errmessage']='图片文件不存在'
return self.req_message
def sendMedia(self, file_path):
"""
上传的文件限制:
所有类型的文件大小均要求大于5个字节
普通文件(file):文件大小不超过20M
语音(voice):文件大小不超过2M,播放长度不超过60s,仅支持AMR格式
"""
if os.path.exists(file_path):
upload_url = self.post_url.replace('send', 'upload_media') + '&type=file'
try:
media_id = requests.post(upload_url, files=[('media', open(file_path, 'rb'))]).json()['media_id']
print (media_id)
except Exception as e:
self.req_message['errmessage']='上传文件失败,请检查网络'
return self.req_message
data = {"msgtype": "file","file": {"media_id": media_id}}
return self._req(data)
else:
self.req_message['errmessage']='文件不存在'
return self.req_message
if __name__ == '__main__':
# 获取环境变量
wecombot_key = os.getenv('WECOMBOT_KEY')
print(wecombot_key)
a = WeComBot(wecombot_key) #webhook的key
a.sendMessage('文本内容')
# a.sendMessage('文本内容',mentioned_mobile_list=['156213124192']) #提醒手机号对应的群成员(@某个成员的手机号),@all表示提醒所有人
# a.sendMarkdown('markdown内容')
# a.sendImage('d:/嫦娥.jpg') #图片文件的绝对路径
# a.sendMedia('d:/alist.info') #文件的绝对路径
# a.sendNews('[{"title" : "中秋节礼品领取", "description" : "今年中秋节公司有豪礼相送", "url" : "www.qq.com","picurl" : "http://res.mail.qq.com/node/ww/wwopenmng/images/independent/doc/test_pic_msg1.png"}]')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment