首页 / 博客 / 机器人·功能实战

微信自动通过好友并打标签机器人

分类:机器人·功能实战 · 标签:微信自动通过好友、微信打标签机器人、微信自动化运营

前言

私域流量运营中,每天通过好友申请、手动给新粉丝打标签是最枯燥的重复劳动。稍有疏忽就会漏掉高意向客户,或者因为标签混乱导致后续营销严重跑偏。本文从技术角度拆解如何用 WechatApi 个人微信API 搭建一套"自动通过好友 + 智能打标签"的机器人系统,覆盖核心原理、接口调用、标签策略到异常处理,帮助开发者快速落地。


一、为什么要做自动通过好友与标签管理

手动操作的三大痛点

效率瓶颈:一个运营账号每天可能收到几十甚至上百条好友申请。人工逐条处理不仅耗时,还容易因切屏操作失误导致误操作——把重要客户拒掉,把羊毛党通过。

标签错乱:人工打标签依赖运营人员的主观判断,不同人对同一类用户的标签定义往往不一致。时间一长,CRM 系统里的标签体系就会变成一锅粥,后续精准营销几乎无从下手。

时间窗口错失:好友申请有 3 天有效期。若是深夜或节假日无人值守,大量申请会自动过期,白白损失潜在用户。

机器人的价值正是在这里:7×24 小时不间断响应,通过预设规则在秒级内完成"通过申请→识别用户特征→打标签→触发欢迎语"的完整链路。

自动化的合理边界

值得说明的是,这套机器人并非无脑通过所有申请。成熟的方案应该包含风险过滤层:


二、技术选型:为什么选 WechatApi iPad 协议方案

目前市面上个人微信的自动化方案主要分三类:

方案类型稳定性功能完整度维护成本封号风险
Xposed/Hook 注入低,依赖微信版本高,每次更新需适配
PC 端 UI 自动化(模拟点击)中,界面变动即失效
iPad 协议对接高,协议层稳定高,支持完整好友/标签接口低,API 化调用低,行为更接近真实设备
企业微信官方 API受限(不能管理个人号)

WechatApi 基于微信 iPad 协议封装了一套完整的 HTTP API,开发者无需关心底层协议细节,只需按标准 REST 调用即可驱动微信账号完成好友管理、标签操作等动作。相比 Hook 方案,iPad 协议在微信后台留下的设备指纹更接近真实 iPad,行为更自然。

接口鉴权约定(全文统一):


三、核心接口梳理:好友申请与标签管理

在动手写机器人之前,先理清需要用到的接口族,避免开发到一半才发现功能缺口。

3.1 获取新好友申请列表

机器人需要轮询(或通过 Webhook 回调)获取待处理的好友申请。每条申请记录包含申请人的微信号、昵称、来源渠道(扫码/搜索/手机号/群聊等)、附言内容。

来源渠道是后续打标签的重要依据。例如"从某个推广二维码添加的用户"和"搜索微信号主动添加的用户",在私域运营里的意向权重截然不同,应该打不同的标签。

3.2 通过/拒绝好友申请

接受好友申请需要传入申请记录中返回的 encryptUsername(加密用户标识)和 ticket(申请凭证),缺一不可。这两个字段在申请列表接口的返回体中可以直接取到。

3.3 给联系人打标签

微信个人号的标签体系分两层:先创建标签(获得 labelId),再把联系人批量绑定到标签。WechatApi 的接口也遵循这个逻辑,开发者需要在初始化阶段把标签体系建好,运行时直接用 labelId 绑定即可,不要每次都重复创建标签。

3.4 发送欢迎消息

通过好友后通常需要发送一条欢迎消息(文字/图片/小程序卡片均可)。这一步放在打标签之后触发,确保消息内容可以根据标签做个性化拼接。


四、完整机器人实现:分步骤拆解

Step 1:初始化标签体系

在机器人启动前,先把业务需要的所有标签在微信账号上建好,并把 labelId 维护到本地配置文件或数据库里。

pythonimport requests

BASE_URL = "https://api.example-wechatapi.net"   # 示意域名,以控制台实际地址为准
TOKEN = "your_token_here"
APP_ID = "your_appId_here"

HEADERS = {
    "VideosApi-token": TOKEN,
    "Content-Type": "application/json"
}

def create_label(label_name: str) -> int:
    """创建标签,返回 labelId"""
    payload = {
        "appId": APP_ID,
        "labelName": label_name
    }
    resp = requests.post(f"{BASE_URL}/label/create", json=payload, headers=HEADERS)
    data = resp.json()
    if data["ret"] == 200:
        label_id = data["data"]["labelId"]
        print(f"标签 [{label_name}] 创建成功,labelId={label_id}")
        return label_id
    else:
        raise RuntimeError(f"创建标签失败: {data['msg']}")

# 初始化标签字典
LABEL_MAP = {
    "扫码添加": create_label("扫码添加"),
    "搜索添加": create_label("搜索添加"),
    "群聊添加": create_label("群聊添加"),
    "高意向客户": create_label("高意向客户"),
    "待跟进": create_label("待跟进"),
}

Step 2:轮询好友申请并按规则处理

pythonimport time

def get_friend_requests() -> list:
    """获取待处理的好友申请列表"""
    payload = {"appId": APP_ID}
    resp = requests.post(f"{BASE_URL}/friend/requestList", json=payload, headers=HEADERS)
    data = resp.json()
    if data["ret"] == 200:
        return data["data"].get("list", [])
    return []

def decide_and_accept(request_item: dict):
    """根据申请信息决策:通过、拒绝或入人工队列"""
    scene = request_item.get("scene", 0)    # 来源场景码
    content = request_item.get("content", "")  # 申请附言
    encrypt_username = request_item["encryptUsername"]
    ticket = request_item["ticket"]

    # 风控过滤:附言含特定垃圾词直接忽略
    SPAM_KEYWORDS = ["兼职", "日结", "招募代理"]
    if any(kw in content for kw in SPAM_KEYWORDS):
        print(f"疑似垃圾申请,跳过: {encrypt_username}")
        return

    # 通过申请
    accept_payload = {
        "appId": APP_ID,
        "encryptUsername": encrypt_username,
        "ticket": ticket,
        "type": 3   # 3=同意,2=拒绝
    }
    accept_resp = requests.post(
        f"{BASE_URL}/friend/acceptRequest",
        json=accept_payload,
        headers=HEADERS
    ).json()

    if accept_resp["ret"] != 200:
        print(f"通过好友失败: {accept_resp['msg']}")
        return

    wxid = accept_resp["data"]["wxid"]   # 对方微信 ID
    print(f"已通过好友: {wxid}")

    # 根据来源场景打标签
    # scene 值含义示例:1=搜索,4=扫码,6=群聊(实际以接口文档为准)
    scene_label_map = {
        1: "搜索添加",
        4: "扫码添加",
        6: "群聊添加",
    }
    label_name = scene_label_map.get(scene, "待跟进")
    label_id = LABEL_MAP[label_name]

    # 打标签
    tag_payload = {
        "appId": APP_ID,
        "wxids": [wxid],
        "labelIds": [label_id]
    }
    tag_resp = requests.post(
        f"{BASE_URL}/contact/setLabel",
        json=tag_payload,
        headers=HEADERS
    ).json()

    if tag_resp["ret"] == 200:
        print(f"已为 {wxid} 打标签: {label_name}")
    else:
        print(f"打标签失败: {tag_resp['msg']}")

    # 发送欢迎消息(根据标签个性化)
    welcome_text = (
        f"你好!我已收到你的添加请求~\n"
        f"你是通过【{label_name}】找到我的,有什么需要随时告诉我 😊"
    )
    msg_payload = {
        "appId": APP_ID,
        "toWxid": wxid,
        "content": welcome_text
    }
    requests.post(f"{BASE_URL}/message/sendText", json=msg_payload, headers=HEADERS)

def run_bot(interval_seconds: int = 30):
    """主循环,每 interval_seconds 秒轮询一次"""
    print("机器人启动,开始轮询好友申请...")
    while True:
        try:
            requests_list = get_friend_requests()
            for item in requests_list:
                decide_and_accept(item)
                time.sleep(2)   # 单次操作间隔,模拟人工节奏
        except Exception as e:
            print(f"轮询异常: {e}")
        time.sleep(interval_seconds)

if __name__ == "__main__":
    run_bot(interval_seconds=60)

Step 3:用 Webhook 替代轮询(推荐生产环境)

轮询方案简单,但有延迟且浪费请求配额。WechatApi 支持配置 Webhook 回调,当有新好友申请时主动推送事件到你的服务器,实现真正的实时响应。

bash# 用 curl 注册 Webhook 回调地址(示意)
curl -X POST https://api.example-wechatapi.net/webhook/set \
  -H "VideosApi-token: your_token_here" \
  -H "Content-Type: application/json" \
  -d '{
    "appId": "your_appId_here",
    "callbackUrl": "https://your-server.com/wechat/callback",
    "events": ["friendRequest", "newContact"]
  }'

服务端收到回调后,直接处理事件体中的申请信息,调用通过好友接口,延迟可以压到 1 秒以内。


五、标签策略设计:从"打了标签"到"用起来"

打标签只是手段,用标签做精准运营才是目的。以下是几种常见的标签分层策略:

来源维度标签(系统自动打)

意向维度标签(结合对话行为打)

生命周期标签(时间维度)

业务属性标签(人工补充)

多标签并存时,同一个联系人可以同时拥有"扫码添加 + 高意向客户 + 新用户"三个标签,后台筛选时用 AND 逻辑交叉过滤,精准度远超单标签方案。


六、关键参数与异常处理备忘

在实际对接 WechatApi 微信机器人开发 过程中,以下参数和异常场景是踩坑最多的地方:

返回体结构示例

json{
  "ret": 200,
  "msg": "success",
  "data": {
    "wxid": "wxid_xxxxxxxx",
    "nickname": "张三",
    "scene": 4,
    "content": "我是从朋友那里得到你微信的",
    "encryptUsername": "v3_xxxxx",
    "ticket": "v4_xxxxx"
  }
}

常见错误码:

ret 值含义处理建议
200成功继续后续流程
400参数错误检查 appId / ticket 是否正确
401Token 无效或过期刷新 Token,重新鉴权
429请求频率过高增加操作间隔,加入速率限制
500服务端异常重试 3 次,超出后告警
1001设备未登录检查账号登录状态,触发重登流程

频率控制建议

微信对账号行为有风控机制,自动化操作需要模拟人工节奏:


七、部署架构建议

一套完整的生产级自动通过好友机器人,推荐以下轻量化架构:

[微信账号设备]
      ↕ iPad协议
[WechatApi 云端网关]
      ↕ Webhook推送
[你的业务服务器]
  ├── Webhook 接收层(FastAPI/Express)
  ├── 规则引擎(过滤/分类/决策)
  ├── 任务队列(Redis + Celery/BullMQ)
  └── CRM/标签数据库(MySQL/MongoDB)

引入任务队列的原因是:Webhook 回调需要快速响应(通常要求 5 秒内返回 200),真正的通过好友、打标签等操作放入队列异步执行,避免因业务逻辑耗时导致回调超时重试,造成重复处理。

如果你的业务还涉及群管理、客服自动回复等场景,可以参考 WechatApi 微信SCRM 方案,把好友管理、标签体系、会话分配整合进一套统一的私域运营平台。


小结

"自动通过好友 + 智能打标签"是私域流量运营自动化的基础模块,也是最能直接感受到 ROI 提升的环节。本文梳理的核心要点:

  1. 选对协议层:iPad 协议稳定性优于 Hook/UI 自动化,是个人微信自动化的首选路径。
  2. 先建标签体系,再写自动化逻辑:标签混乱是后期运营的最大隐患,务必在开发初期把标签规范定清楚。
  3. 生产环境用 Webhook 替代轮询:实时性好、资源消耗低,是规模化运营的正确姿势。
  4. 频率控制和异常重试不可少:自动化操作必须模拟人工节奏,并做好熔断和告警机制。

WechatApi 提供完整的个人微信 HTTP API 能力,开箱即用,前往控制台注册 即可获取 Token 和 appId,结合本文代码示例,通常半天内可以跑通完整流程。更多接口细节可查阅 开发文档

想动手试试?

WechatApi 提供扫码登录、消息收发、好友与群管理等 REST 接口,注册后几分钟跑通。

立即免费注册查看开发文档

相关产品页

🔗 个人微信API(产品页)🔗 微信iPad协议(产品页)🔗 微信机器人开发(产品页)

相关文章

30 分钟做一个微信自动回复机器人(完整实战)微信机器人接入 GPT,实现智能自动回复微信群管理机器人开发实战:自动迎新、答疑、踢人微信客服机器人怎么做?7×24自动应答+转人工方案
© 2025 WechatApi · 企业级微信智能机器人接入平台
官网价格帮助文档博客
苏ICP备2024128799号 · 苏ICP备2023038368号