当前位置:网站首页 >  教程

用Python调用企业微信API实现分层打标,告别私域运营粗放化

时间:2026年06月03日 05:14:23 来源:易频IT社区

第一步:准备必要的前置条件

所有操作前,先完成这3项准备,确保后续无卡顿:

  • 拥有企业微信「超级管理员」或「应用管理+通讯录管理」权限的账号
  • 已创建企业内部应用(用于调用API)
  • 已安装Python 3.8及以上版本,Python下载地址:https://www.python.org/downloads/

第二步:配置企业微信应用获取调用凭证

这一步是核心,没有凭证API调不通,逐字逐句跟着做:

2.1 创建内部应用并记录关键参数

  1. 用有权限的账号登录企业微信管理后台:https://work.weixin.qq.com/
  2. 点击左侧菜单栏「应用管理」→「应用」→「自建」→「创建应用」
  3. 按提示填写应用名称(比如“私域分层助手”)、上传应用logo、可见范围选「全部成员」/指定运营部门,点击「创建应用」
  4. 进入刚创建的应用详情页,记录AgentIdSecret(Secret点击「获取」→「确认获取」后复制,只显示1次,务必保存)

2.2 配置应用的可信IP(如果用本地Python调试)

本地调试必须加,否则API拒绝请求:

  1. 在刚才的应用详情页往下滑到「开发」→「接口调用」
  2. 找到「企业可信IP」,点击「配置」
  3. 打开百度搜索“本地IP”,复制显示的公网IP地址,粘贴进去,点击「确定」

2.3 配置通讯录权限

分层打标需要读写用户标签:

  1. 点击左侧菜单栏「管理工具」→「通讯录管理」→「权限配置」
  2. 找到刚才创建的应用,点击「编辑」
  3. 勾选「通讯录权限」下的所有读写权限(至少选成员查看、标签管理),点击「保存」
  4. 回到应用详情页,记录左侧上方的企业ID(在「我的企业」最底部也能找到)

第三步:安装Python依赖库

用Python调用企业微信API实现分层打标,告别私域运营粗放化

打开电脑终端(Windows用cmd或PowerShell,Mac用Terminal),逐行输入以下命令并回车执行:

``` pip install requests ```

第四步:编写Python代码实现核心功能

这一步完成后可以直接分层、打标,代码全可复制:

4.1 准备标签配置

先想好私域标签体系,比如按“消费金额”分高频、中频、低频,按“活跃度”分活跃、沉睡、流失,现在创建对应的Python字典,复制下面的内容存为config.py文件:

```python config.py 企业微信相关凭证 CORP_ID = "你的企业ID" SECRET = "你的应用Secret" AGENT_ID = "你的应用AgentId" 注意AgentId是数字类型?企业微信返回是字符串或数字都兼容,但严格按管理后台的类型填 自定义消费分层规则(可根据业务修改) CONSUME_RULES = { "高频用户": {"min": 1000, "max": float("inf")}, "中频用户": {"min": 200, "max": 999}, "低频用户": {"min": 0, "max": 199} } 自定义活跃度分层规则(按最后互动时间差天数) ACTIVITY_RULES = { "活跃用户": {"min": 0, "max": 7}, "沉睡用户": {"min": 8, "max": 30}, "流失用户": {"min": 31, "max": float("inf")} } 模拟用户数据(实际使用时可替换成从Excel/MySQL读取的真实数据) MOCK_USER_DATA = [ {"userid": "zhangsan", "external_userid": "wmAAAAAAA", "total_consume": 1200, "last_interact_days": 3}, {"userid": "lisi", "external_userid": "wmBBBBBBB", "total_consume": 500, "last_interact_days": 15}, {"userid": "wangwu", "external_userid": "wmCCCCCCC", "total_consume": 50, "last_interact_days": 40} ] ```

4.2 编写核心代码文件

再创建一个叫private_domain_automation.py文件,复制以下完整代码:

```python import requests import json from config import CORP_ID, SECRET, AGENT_ID, CONSUME_RULES, ACTIVITY_RULES, MOCK_USER_DATA 获取access_token def get_access_token(): url = f"https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={CORP_ID}&corpsecret={SECRET}" response = requests.get(url) data = response.json() if data["errcode"] == 0: return data["access_token"] else: print(f"获取token失败:{data['errmsg']}") return None 创建标签(避免重复创建) def create_tags(access_token): tags = [] for rule_name in list(CONSUME_RULES.keys()) + list(ACTIVITY_RULES.keys()): url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/add_corp_tag?access_token={access_token}" payload = {"group_name": "私域分层", "tag": [{"name": rule_name}]} response = requests.post(url, json=payload) data = response.json() if data["errcode"] == 0: tag_id = data["tag_group"]["tag"][0]["id"] tags.append({"name": rule_name, "id": tag_id}) elif data["errcode"] == 40071: 标签已存在,获取现有标签ID url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/get_corp_tag_list?access_token={access_token}" response = requests.post(url, json={"tag_names": [rule_name]}) data = response.json() if data["errcode"] == 0: tag_id = data["tag_group"][0]["tag"][0]["id"] tags.append({"name": rule_name, "id": tag_id}) else: print(f"创建/获取标签{rule_name}失败:{data['errmsg']}") return {tag["name"]: tag["id"] for tag in tags} 给用户打标签 def tag_users(access_token, tag_dict): for user in MOCK_USER_DATA: tags_to_add = [] 消费金额分层 for name, rule in CONSUME_RULES.items(): if rule["min"] <= user["total_consume"] <= rule["max"]: tags_to_add.append(tag_dict[name]) break 活跃度分层 for name, rule in ACTIVITY_RULES.items(): if rule["min"] <= user["last_interact_days"] <= rule["max"]: tags_to_add.append(tag_dict[name]) break 调用API打标 url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/mark_tag?access_token={access_token}" payload = { "userid": user["userid"], "external_userid": user["external_userid"], "add_tag": tags_to_add } response = requests.post(url, json=payload) data = response.json() if data["errcode"] == 0: print(f"给用户{user['userid']}打标成功") else: print(f"给用户{user['userid']}打标失败:{data['errmsg']}") if __name__ == "__main__": token = get_access_token() if token: tag_dict = create_tags(token) tag_users(token, tag_dict) ```

第五步:替换真实数据并运行代码

  1. 打开config.py文件,替换CORP_ID、SECRET、AGENT_ID为你刚才记录的真实值
  2. 把MOCK_USER_DATA替换成你的真实私域用户数据:
    • userid:企业成员的userid(在企业微信通讯录管理后台可查看)
    • external_userid:该成员添加的外部用户的external_userid(调用企业微信「获取外部联系人列表」API可批量获取)
    • total_consume:用户的历史总消费(从你的电商后台导出)
    • last_interact_days:用户最后一次与你互动的天数差(可从企业微信「客户联系」导出的互动时间计算)
  3. 在终端中进入两个文件所在的目录,输入以下命令并回车执行: ``` python private_domain_automation.py ```
  4. 执行完成后,打开企业微信手机端或电脑端,在「客户联系」→「客户」→「标签」中就能看到刚创建的分层标签和已打标的用户

第六步:优化进阶(可选但实用)

6.1 批量获取external_userid

可以用下面的代码批量获取,替换private_domain_automation.py的MOCK_USER_DATA获取逻辑:

```python 批量获取指定成员的external_userid def get_external_users(access_token, userid_list): all_users = [] for userid in userid_list: url = f"https://qyapi.weixin.qq.com/cgi-bin/externalcontact/list?access_token={access_token}&userid={userid}" response = requests.get(url) data = response.json() if data["errcode"] == 0: for external_user in data["external_contact"]: all_users.append({ "userid": userid, "external_userid": external_user["external_userid"], 其他字段可根据需要添加 }) else: print(f"获取成员{userid}的外部用户失败:{data['errmsg']}") return all_users ```

6.2 定时自动化运行

Windows系统可以用「任务计划程序」,Mac/Linux可以用crontab,定时调用代码。

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图