Created
September 17, 2023 06:55
-
-
Save Ryaang/a41a8f5368271e87094e1a8700f1adc4 to your computer and use it in GitHub Desktop.
调用webhook向微信企业版机器人发送消息
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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