企業微信功能日益強大,騰訊官方也提供了豐富的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 }} # 發送文本消息 25 # 由於API接收的是json字符串,故需要轉化一下 26 data = json.dumps(msg, ensure_ascii=False).encode('utf-8') 27 # 發送請求 28 try: 29 result = requests.post(url, headers=headers, data=data) 30 return True 31 except Exception as e: 32 # print("Requset Failed:", e) 33 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 SendGroupFile(filepath, webHookUrl): """ 發送微信羣組機器人文件 :param filepath: 文件路徑 :param webHookUrl: 羣組機器人WebHook :return: """ # url爲羣組機器人WebHook,配置項 url = webHookUrl headers = { "content-type": "application/json" } # 發送文件需要先上傳文件獲取media_id media_id = UploadFile(filepath, url) req_json = dict() req_json["msgtype"] = "file" req_json["file"] = dict() req_json["file"]["media_id"] = media_id # 發送請求 try: result = requests.post(url, headers=headers, json=req_json) 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'] 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 ""
感興趣的童鞋,快動手試試吧!
快來掃碼關注我的公衆號 獲取更多爬蟲、數據分析的知識!