企微接口创建群聊自动剔除无效ID的python实现方法
  zlpQTwPQqakK 2023年11月02日 35 0

前言

#新人试水贴#

在企业微信运维的日常中一定会遇到同时创建大型群聊的应用场景,如何精准且快速的创建一个超过千人的群聊是个问题。通常用户提出相关需求并给出人员名单时会存在错写,漏写导致的无效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
}

注意事项:

  1. 需要缓存access_token,用于后续接口的调用不能频繁调用gettoken接口,否则会受到频率拦截。
  2. 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崽。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读