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

微信自动通过好友请求并发送欢迎语实战

分类:机器人·功能实战 · 标签:微信自动通过好友、微信机器人、欢迎语

前言

做私域运营的同学几乎都遇到过同一个问题:客户扫码加好友后,往往要等几分钟甚至几小时才收到一条欢迎语,等到那时候客户的注意力早就散了。如果账号粉丝量大,人工逐条通过申请、逐条发欢迎语更是不可能完成的任务。

本文从技术角度拆解这个问题:如何用 HTTP API + 消息回调机制,实现"好友申请秒通过 + 欢迎语自动触发"的完整闭环。文章会覆盖核心流程设计、关键接口说明、Python 示例代码,以及防封号的频率控制策略,帮你在实际项目中落地这套自动化流程。


一、整体流程梳理

在动手写代码之前,先把业务流程理清楚,避免返工。整个链路分为三个阶段:

1.1 设备登录与回调注册

微信账号必须先完成扫码登录,拿到 appId(设备标识),后续所有接口都依赖它。登录成功后,还需要调用 setCallback 接口把你的服务器地址注册进去,这样平台才会把实时事件(包括好友申请)推送过来。

登录时需要注意:扫码后账号会保持一个"在线"状态,这个状态需要持续维护。部分接口平台要求账号在线时长达到一定阈值(通常 24 小时以上)才能执行加好友、发消息等敏感操作,因此新账号接入后不建议立即启用自动通过逻辑,先让账号稳定在线一段时间再开启。

1.2 接收好友申请事件

当有人发起好友申请时,平台会向你注册的回调地址 POST 一条 JSON 消息,字段结构通常包含:

字段说明
appId当前登录的设备 ID
fromWxid申请人的微信 ID
type消息类型(好友申请对应特定值)
content申请附言内容
createTime事件时间戳
具体字段名以官方文档为准,不同平台或版本可能略有差异。

1.3 通过申请并发送欢迎语

收到好友申请事件后,业务逻辑如下:

  1. 解析回调,识别出事件类型为"好友申请"
  2. 调用 addContacts 接口通过申请
  3. 等待 1~3 秒(避免消息发得太快触发风控)
  4. 调用 postText 接口发送欢迎语

流程示意:

好友申请 ──▶ 回调触发 ──▶ 解析事件 ──▶ 通过申请 ──▶ 延迟 ──▶ 发欢迎语

二、关键接口说明

2.1 注册回调地址

httpPOST /setCallback

请求体示例:

json{
  "appId": "你的appId",
  "callbackUrl": "https://你的服务器/callback"
}

注册成功后,平台会把所有事件(好友申请、收到消息、被加群等)实时推送到 callbackUrl。你的服务器必须能被外网访问,且在收到推送后返回 HTTP 200,否则平台会判定回调失败并重试。

2.2 通过好友申请

httpPOST /addContacts

请求体示例:

json{
  "appId": "你的appId",
  "scene": 3,
  "v3": "从回调中提取的 v3 字段",
  "v4": "从回调中提取的 v4 字段",
  "content": "你好,已通过你的好友申请"
}

scenev3v4 等字段的具体含义以官方文档为准,通常在好友申请回调中可以直接拿到,直接透传即可。

2.3 发送文字欢迎语

httpPOST /message/postText

请求体示例:

json{
  "appId": "你的appId",
  "toWxid": "对方的微信ID",
  "content": "你好!欢迎添加,有任何问题随时联系我~"
}

返回格式统一为:

json{
  "ret": 200,
  "msg": "操作成功",
  "data": {}
}

ret == 200 表示调用成功。


三、Python 完整示例

下面给出一个基于 Flask 的最小可运行示例,涵盖"接收回调 → 通过好友 → 发欢迎语"全流程。

代码为示例,具体接口路径、字段名称以官方文档为准。

3.1 基础配置

pythonimport time
import random
import requests
from flask import Flask, request, jsonify

app = Flask(__name__)

BASE  = "https://你的接口域名"   # 注册后在官方文档获取
TOKEN = "你的Token"
APPID = "你的appId"
HEADERS = {"token": TOKEN}       # 鉴权字段名以官方文档为准

# 欢迎语模板(可配置多条随机选取,降低重复度)
WELCOME_MESSAGES = [
    "你好!欢迎添加,有什么需要帮忙的随时说~",
    "嗨!很高兴认识你,有任何问题可以直接问我。",
    "你好呀!欢迎加入,祝我们合作愉快~",
]

3.2 注册回调(启动时调用一次)

pythondef register_callback(callback_url: str):
    """向平台注册消息回调地址"""
    resp = requests.post(
        f"{BASE}/setCallback",
        json={"appId": APPID, "callbackUrl": callback_url},
        headers=HEADERS
    )
    data = resp.json()
    if data.get("ret") == 200:
        print("回调注册成功")
    else:
        print(f"回调注册失败: {data}")

3.3 通过好友申请

pythondef accept_friend_request(v3: str, v4: str, scene: int = 3):
    """通过好友申请"""
    payload = {
        "appId": APPID,
        "scene": scene,
        "v3": v3,
        "v4": v4,
        "content": "你好,已通过好友申请",  # 通过时附带的回应语
    }
    resp = requests.post(f"{BASE}/addContacts", json=payload, headers=HEADERS)
    return resp.json().get("ret") == 200

3.4 发送欢迎语

pythondef send_welcome(to_wxid: str):
    """发送欢迎消息"""
    content = random.choice(WELCOME_MESSAGES)
    payload = {
        "appId": APPID,
        "toWxid": to_wxid,
        "content": content,
    }
    resp = requests.post(f"{BASE}/message/postText", json=payload, headers=HEADERS)
    return resp.json().get("ret") == 200

3.5 回调路由(核心逻辑)

python@app.route("/callback", methods=["POST"])
def callback():
    data = request.json or {}
    msg_type = data.get("type")

    # type 值以官方文档为准,此处仅为示意
    # 好友申请通常对应一个特定的 type 值(如 37 或 "friendVerify" 等)
    if msg_type == "friendVerify":  # 请替换为文档中实际的 type 值
        from_wxid = data.get("fromWxid", "")
        v3 = data.get("v3", "")
        v4 = data.get("v4", "")
        scene = data.get("scene", 3)

        # 通过好友申请
        ok = accept_friend_request(v3, v4, scene)
        if ok:
            # 随机等待 1~3 秒后发欢迎语,避免过于机械触发风控
            wait = random.uniform(1.0, 3.0)
            time.sleep(wait)
            send_welcome(from_wxid)

    # 必须返回 200,否则平台会持续重试
    return jsonify({"code": 200}), 200


if __name__ == "__main__":
    # 生产环境请用 gunicorn 或 uWSGI 部署
    app.run(host="0.0.0.0", port=8080)

四、欢迎语内容设计建议

自动化流程搭好之后,欢迎语本身的质量同样关键。以下几点值得注意:

4.1 避免所有账号发一模一样的内容

如果你管理多个账号或者日发量较大,建议维护一个欢迎语池,每次随机抽取,并且定期更换池中的内容。上面示例中的 WELCOME_MESSAGES 列表就是这个思路。

4.2 个性化插值

如果回调中能拿到对方昵称(通常在 data.get("fromNickname") 或类似字段里),可以用它做插值,让欢迎语显得更有温度:

pythonname = data.get("fromNickname", "朋友")
content = f"你好,{name}!欢迎添加,有什么需要随时说~"

4.3 欢迎语长度

建议控制在 30~80 字之间。太短显得敷衍,太长会让人感觉是群发模板,反而引起警惕。

4.4 加入引导动作(可选)

欢迎语里可以加一句自然的引导,比如"你是怎么找到我的?"或者"有什么问题可以直接说",能有效拉开对话,增加后续转化机会。

4.5 多媒体欢迎组合

纯文字欢迎语之后,可以考虑在 2~5 秒后再发一条图片或小程序卡片,例如产品目录图、活动海报、或者品牌介绍的小程序。这种"文字 + 图片"的组合节奏更接近真人操作,既提升了欢迎语的信息量,也降低了单一文本触发平台检测的概率。需要注意的是,图片消息接口与文字接口是分开的,调用前请查阅对应文档确认参数格式。


五、频率控制与防封策略

这是整套方案里最容易被忽视却最重要的部分。微信对异常行为有检测机制,以下策略能有效降低风险:

5.1 被动通过好友请求的频率

场景建议上限
单账号每天被动通过≤ 200 个
新账号(在线不足 3 天)建议不调接口,先养号
连续通过的间隔每条随机延迟 1~5 秒

5.2 欢迎语发送频率

欢迎语属于主动发送消息,虽然是一对一,但批量触发同样需要控制:

5.3 服务端异步处理

回调触发时,不要在 HTTP 请求周期内同步执行所有操作。正确做法是:

收到回调 → 立即返回 200 → 把任务放入队列 → 后台 Worker 异步处理

这样既保证了平台不会因为超时而重试,也避免了单次回调处理耗时过长带来的问题。可以用 Python 的 threading.Thread 做简单的异步,生产环境推荐 Celery + Redis。

5.4 关于 REST 接口服务选型

目前市面上有一些专门为微信自动化场景设计的 REST 接口服务,WechatApi 提供扫码登录、消息收发、好友与群管理等 REST 接口,HTTP 调用即可,适合不想自己维护底层协议的团队。


六、常见问题排查

Q1:回调收不到好友申请事件

Q2:addContacts 返回失败

Q3:欢迎语发出去但对方看不到

Q4:同一个人收到多条欢迎语

pythonimport redis

r = redis.Redis()

def is_duplicate(msg_id: str) -> bool:
    key = f"processed:{msg_id}"
    # SET NX 原子操作,已存在返回 None,否则设置并返回 True
    result = r.set(key, 1, nx=True, ex=3600)  # 1小时过期
    return result is None

七、小结

微信自动通过好友加发欢迎语的核心是:回调机制驱动 + 接口串联 + 频率克制。把这三点做好,一套稳定的自动化私域接待流程就能跑起来,既节省人力,也能保证新好友第一时间得到响应。

在工程实现上,有几个原则值得反复强调:第一,回调要立即返回 200,把实际业务逻辑放到队列里异步执行;第二,每一步操作之间加入随机延迟,模拟真人节奏;第三,欢迎语内容要定期轮换,避免大量重复触发平台检测;第四,新账号务必先养号再开自动化,不要急于上线。遵循这套节奏,整体风险可以控制在可接受范围内,同时也能获得可观的运营效率提升。

接口层面的细节(字段名、type 枚举值、鉴权方式等)以实际对接的平台官方文档为准,本文所有示例代码均为原理演示,不代表任何特定平台的真实参数格式。

想动手试试?

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

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

相关产品页

🔗 微信机器人开发(产品页)🔗 微信群管理机器人(产品页)🔗 微信SCRM(产品页)

相关文章

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