使用 Python 给企业微信的外部联系人客户批量打标签

4,497次阅读

共计 3559 个字符,预计需要花费 9 分钟才能阅读完成。

准备工作

Python 3 的环境

可以编辑 .csv 格式文件的编辑器(比如 wps、Excel)

装有 API 调试工具(比如 Postman https://www.postman.com )

具有企业微信管理员的权限

  • 获取 企业 ID
  • 获取 通讯录 的 API 接口Secret 值
  • 获取 客户 的 API 接口Secret 值

如果不知道以上信息如何获取,可以通过企业微信的官方开发者中心页面进行关键词查找:https://developer.work.weixin.qq.com/

获取企业标签库里的客户标签 tag_id

通过 企业 ID + 客户 Secret 获取 access_token 作为调用接口凭证,在浏览器输入以下地址获取:

https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET

注:此处标注大写的单词 IDSECRET,为需要替换的变量,对应 企业 ID 客户 Secret

如图:

使用 Python 给企业微信的外部联系人客户批量打标签

在 Postman 里通过 POST 接口回调获得标签的tag_id

# 请求方式:POST(HTTP)
# 请求地址:ACCESS_TOKEN 替换为刚才获取到的调用接口凭证信息(不要带引号)https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token=ACCESS_TOKEN

如图:

使用 Python 给企业微信的外部联系人客户批量打标签

access_token 和需要批量打的标签对应的 tag_id 找个记事本记下来,后面还会用到。

批量获取外部联系人(客户)的 userID

每个企业微信账号都有自己的客户,因此需要先找到对应账号的 ID,如图:

使用 Python 给企业微信的外部联系人客户批量打标签

在 Postman 里通过 POST 接口回调获得外部联系人(客户)的userID

# 请求方式:POST(HTTPS)# 请求地址:https://qyapi.weixin.qq.com/cgi-bin/externalcontact/batch/get_by_user?access_token=ACCESS_TOKEN

输入请求信息:

{
   "userid_list":
   ["ZhangSan"],
   "cursor":"",
   "limit":100
}

这里的 ZhangSan 填写自己的企业微信账号 ID,如图:

使用 Python 给企业微信的外部联系人客户批量打标签

把待会需要批量打新标签的若干个 userID 保存到名称为 extuserid.csv 的表格里,格式如下:

使用 Python 给企业微信的外部联系人客户批量打标签

一行一个 userID,注意保存的文件格式要是 .csv 格式。

创建批量打标签的 Python 脚本

新建一个 wxusertag.py 的 Python 脚本文件,复制粘贴以下内容:

# coding=utf-8

import requests
import random
import json
import csv
import codecs
import xlrd
import os
from lxml import etree
import urllib3

# 将 ID 和 SECRET 替换成自己的企业 ID 和客户 Secret
url1="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET"
headers={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36'
            }

url2=""
# 填写要打标签的对应企业微信号 ID
userid='ZhangSan'
def getToken(url):
    # 发送请求 有效期 2 个小时
    resp = requests.request("GET", url, headers=headers)
    # 设置解码方式
    resp.encoding=resp.apparent_encoding
    # 这里会用设置的解码方式解码
    # html_source = resp.text
    token = json.loads(resp.text)["access_token"]
    return token

# 获取外部联系人(客户)信息 需要及时更换 user_ID
def getextuserid():
    url3="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token="+getToken(url1)+"&userid="+userid

    resp=requests.request("GET",url3, headers=headers)
    # 设置解码方式
    resp.encoding=resp.apparent_encoding
    # 这里会用设置的解码方式解码
    #html_source = resp.text
    external_userid = json.loads(resp.text)["external_userid"]
    print(external_userid)
    return external_userid

# 获取刚才保存的 .csv 表格里的外部联系人(客户)user_ID
def getextuseridBycsv():
        with open(r'extuserid.csv') as f:
                f_csv=csv.reader(f)
                # 创建一个 list 用来保存 csv 中的内容
                buffer=[]
                headers=next(f_csv)
                for row in f_csv:
                        buffer.append(row[0])
                #print(buffer)

        f.close()
        return buffer

def addlabel():
    rows=[]
    urllib3.disable_warnings()
    #resp = requests.request("GET", url1, headers=headers)
    # 设置解码方式
    #resp.encoding=resp.apparent_encoding
    # 这里会用设置的解码方式解码
    #html_source = resp.text
    #token = json.loads(resp.text)["access_token"]

    # add_tag 的 id 获取企业标签库 https://open.work.weixin.qq.com/wwopen/devtool/interface?doc_id=17298

    url="https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token="+getToken(url1)

    # 通过企业微信账号 ID 来解析外部联系人的 user_ID
    #extlist=list(getextuserid())
    # 通过外部导入的外部联系人的 user_ID
    extlist=list(getextuseridBycsv())
    print(extlist)
    for i in range(0,len(extlist)):
        data = {
        "userid": userid,
        "external_userid": extlist[i],
        # 将下面的 tag_id 替换成自己要批量添加的标签信息
        "add_tag":["tag_id"],
        "remove_tag":[]}
        data = json.dumps(data)
        page = 0
        response = requests.post(url = url,data=data ,headers =headers ,verify=False)
        resultcode= json.loads(response.text)["errmsg"]
        print(" 打标成功:"+resultcode)

if __name__=="__main__":

        #getextuseridBycsv()
        #getextuserid()
        addlabel()

以上内容根据自己的实际需要修改好后即可保存,记得将脚本 .py 文件和用户 ID 列表的 .csv 文件保存在同一个文件夹里。

然后打开终端,进入这个文件夹目录下,执行以下命令:

python wxusertag.py

等待终端显示 打标成功:ok后,就可以通过企业微信客户端看到对应的若干用户已经添加上新标签了。

执行脚本的时候要注意:

  • 脚本执行的内容有访问频率限制,每企业调用单个 cgi/api 不可超过 1 万次 / 分,15 万次 / 小时
  • 每个 IP 调用单个 cgi/api 不可超过 2 万次 / 分,60 万次 / 小时,第三方应用提供商每 IP 调用单个 cgi/api 不可超过 4 万次 / 分,120 万次 / 小时
  • 如果是家庭宽带,可以通过重启路由器来快速更换 IP

以上。

内容参考来源:https://blog.csdn.net/zhaomengszu/article/details/121478225

全文完
 
西西
📝创作说明:本文由 西西 于2022-03-17发表,共计3559字。
🉑转载说明:本作品采用 “知识共享署名-非商业性使用 4.0 国际许可协议” 进行许可。除特殊说明外,您可以自由的转载和修改,但请务必注明来源且不可用于商业目的。