前言
#新人试水贴#
在企业微信运维的日常中一定会遇到同时创建大型群聊的应用场景,如何精准且快速的创建一个超过千人的群聊是个问题。通常用户提出相关需求并给出人员名单时会存在错写,漏写导致的无效ID。企微提供了200+的应用接口,这里实现主要利用3个接口分别是获取access_token、创建群聊会话、推送应用消息。
相关接口
一、获取access_token
获取access_token是调用企业微信API接口的第一步,相当于创建了一个登录凭证,其它的业务API接口,都需要依赖于access_token来鉴权调用者身份。每个应用有独立的secret,获取到的access_token只能本应用使用,所以每个应用的access_token应该分开来获取。
请求方式: GET(HTTPS)
请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET
参数说明:
参数 |
必须 |
说明 |
Corpid |
是 |
企业ID |
corpsecret |
是 |
应用的凭证密钥,注意应用需要是启用状态 |
返回结果:出错返回码、返回码提示语、获取到的凭证、有效时间
{
"errcode": 0,
"errmsg": "ok",
"access_token": "accesstoken000001",
"expires_in": 7200
}
注意事项:
- 需要缓存access_token,用于后续接口的调用不能频繁调用gettoken接口,否则会受到频率拦截。
- access_token的有效期正常情况下为2小时,有效期内重复获取返回相同结果,过期后获取会返回新的access_token。
二、创建群聊会话
需要构造请求包体【群名,群主ID,群成员ID列表(列表中需包含群主ID),chatid】,post请求方式。只允许企业自建应用调用,且应用的可见范围必须是根部门。
{
"name" : "NAME",
"owner" : "userid1",
"userlist" : ["userid1", "userid2", "userid3"],
"chatid" : "CHATID"
}
三、应用推送消息
应用支持推送文本、图片、视频、文件、图文等类型。chatid所代表的群必须是该应用所创建,具体可查看官方链接。
代码实现
一、开始
利用python的两个第三方库(requests、re)
import requests
import re
分为:
鉴权-剔除无效ID-构造请求包体-创建群聊-发送应用消息
鉴权
agent_id = '应用ID'
access_token_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?'
access_token_params = {
'corpid': "替换成你的corpID",
'corpsecret': '替换成你的corpsecret'
}
# 获取access_token
response = requests.get(access_token_url, params=access_token_params)
#取出access_token赋值给变量
access_token = response.json()['access_token']
二、利用官方报错提取ID
剔除无效ID
当调用接口创建群聊时如果存在无效ID,会返回报错60111。通过正则表达式提取报错消息中的无效ID存进列表,并且从构造的包体用户列表中剔除。
{'errcode': 60111, 'errmsg': 'invalid string value `111111`. userid not found, hint: [1695178707531330421011446], from ip: 127.88.10.00, more
info at https://open.work.weixin.qq.com/devtool/query?e=60111'}
构造一个函数,利用条件判断和while循环
del_id = []#收集无效的用户ID
def add():
"""添加报错的无效ID到指定列表"""
value = response1.json()['errmsg']
delid = re.findall(r"`(.*?)`", value)
delids = str(delid[0])
del_id.append(delids)
if delids != []:
userid.remove(delids)
# print(userid)
#判断是否存在无效ID
if 'errcode' in response1.json() and response1.json()['errcode'] == 60111:
forflg = True
while forflg:
add()
response1 = requests.post(con_url,json=data1,headers=headers)
if 'errcode' in response1.json() and response1.json()['errcode'] == 0:
forflg = False
if 'errcode' in response1.json() and response1.json()['errcode'] != 0 and response1.json()['errcode'] != 60111:
print(response1.json())
break
三、创建群聊并发送消息
构造创建群聊的请求包体并请求
headers = {"Authorization": 'Bearer ' + access_token}
con_url = 'https://qyapi.weixin.qq.com/cgi-bin/appchat/create?access_token={}'.format(access_token)
#构造请求的包体,填写chatid和userid,不要忘记群聊名称和群主
chatid = "群聊名称"
userid = ["test02","test03","test01","test"]
data1 = {
"name" : "测试群聊功能",
"owner" : "test",
"userlist" : userid,
"chatid" : chatid
}
#发送请求
response1 = requests.post(con_url,json=data1,headers=headers)
#处理响应
print(response1.status_code,response1.json())
发送应用消息
headers = {"Authorization": 'Bearer ' + access_token}
txt_url = 'https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token={}'.format(access_token)
data2 = {
"chatid": chatid,
"msgtype":"text",
"text":{
"content" : "欢迎加入"
},
"safe":0
}
response2 = requests.post(txt_url,json=data2,headers=headers)
#处理响应
print(response2.status_code,response2.json())
四、验证
判断是否调用成功
#判断调用是否成功
if 'errcode' in response2.json() and response2.json()['errcode'] == 0:
print("调用成功")
else:
print("调用失败")
打印无效ID列表
#打印无效ID
print(del_id)
后言
本帖为新人试水贴,主要分享如何利用企微官方接口来实现跟便捷的运维方式,方法比较简单易懂欢迎大家交流。一个希望打造个人办公自动化的系统运维IT崽。