前言
"我明明点了添加,怎么对方一直收不到验证消息?" —— 这是做微信自动化或日常使用时极高频出现的困惑。问题不只一种,可能是你的账号被限制了、可能是对方隐私设置拦了、可能是接口调用频率超标,也可能只是网络抖动。
本文梳理加好友失败的全部常见场景,包含人工操作和自动化调用两个维度,每种场景给出具体判断方法和修复步骤,读完按清单一项一项排查,多数问题都能定位。
一、先搞清楚:加好友流程到底经过哪几个节点
微信加好友本质上是一条"申请-审核-通知"的链路,任何一个节点出问题都会导致最终失败:
| 节点 | 说明 |
|---|---|
| 发起方发送申请 | 调用接口或点击"添加"按钮,微信服务端收到请求 |
| 服务端路由 | 判断发起方账号状态、频率、验证消息内容是否合规 |
| 对方端接收 | 对方手机/PC 在线、账号状态正常,才能弹出通知 |
| 对方隐私过滤 | 对方"加我为好友"设置决定验证消息是否进入待确认列表 |
| 对方手动确认 | 对方同意才正式建立好友关系 |
只要上面任意节点异常,结果就是"发出去-对方没收到"或"收到了-对方无法同意"。
二、发起方账号本身的限制
2.1 账号注册时间太短
新注册或近期首次激活的微信号,在账号"在线累计满 3 天"之前,加好友功能会受到微信风控限制,申请要么直接失败,要么发出后对方看不到。
判断方式:看账号创建/激活日期,不满 3 天就先等待,不要反复重试(重试会加重风控)。
2.2 账号触发频率限制
微信对主动添加好友有隐性频次上限。常见合理区间参考:
- 每 24 小时主动添加 5~15 人
- 每 2 小时内发起 ≤ 5 次申请
- 两次添加之间要有随机间隔,不能连续快速点击
超出后,当天的申请会静默失败——界面看起来发出去了,对方实际没收到通知。
判断方式:如果当天已加了很多人,停止操作等明天再试;记录每次申请时间,确认是否存在短时间内集中操作。
2.3 账号被风控或临时封禁
如果账号存在以下行为,会触发更严格的风控甚至封禁:
- 验证消息内容含广告词、外链
- 频繁被对方拒绝或举报
- 短时间内行为特征高度规律(机器人特征)
判断方式:用同一账号手动添加一个认识的人测试。如果手动也失败,账号本身有问题;如果手动成功,程序调用姿势有问题。
三、对方隐私设置的拦截
这是最容易被忽视的原因,且完全不在你的控制范围内。
3.1 对方关闭了"通过手机号/QQ号搜到我"
如果你是通过搜索手机号获取 wxid 再发申请,但对方在设置里关闭了"允许通过手机号搜索到我",搜索本身可能返回空,或者即使发出申请对方也不会收到。
3.2 对方开启了"加好友需要验证"但设置为仅限定人群
微信可以设置"加好友验证"仅允许"通过群聊""通过名片"等特定方式,其他方式来的申请会被过滤掉,不进入对方的"新的朋友"列表。
3.3 对方设置了好友数量上限
微信官方好友上限为 5000 人,达到上限后任何申请都会失败,且发起方不会收到明确提示。
应对思路:换一个可以确认双方都能正常加好友的账号做对照测试;或联系对方通过其他方式确认其账号状态。
四、自动化调用时的额外排查项
如果你在用程序通过 HTTP 接口批量调用加好友功能,除了上面的通用原因,还需要排查以下几点。
4.1 账号是否真正在线
接口调用加好友的前提是微信账号已登录且保持在线。部分框架在账号掉线后不会主动报错,返回数据看起来正常,但实际操作没有执行。
排查步骤:
- 先调用
checkOnline接口确认账号在线状态 - 返回
{"ret":200,"data":{"isOnline":true}}才进行后续操作 - 掉线后调用
getLoginQrCode重新拉起登录
pythonimport requests
BASE = "https://你的接口域名" # 注册后在官方文档获取
TOKEN = "你的Token"
APPID = "你的appId"
HEADERS = {"token": TOKEN} # 鉴权字段名以官方文档为准
def check_online():
resp = requests.post(
f"{BASE}/login/checkOnline",
headers=HEADERS,
json={"appId": APPID}
)
data = resp.json()
return data.get("ret") == 200 and data.get("data", {}).get("isOnline", False)
# 先检查在线状态,再做其他操作
if not check_online():
print("账号已掉线,请重新登录")
代码为示例,具体接口路径和字段以官方文档为准。
4.2 搜索接口是否先于添加接口执行
直接用微信号/手机号发起添加时,部分平台要求先调用 search(搜索联系人)获取对方的 wxid,再用 wxid 调用 addContacts。跳过搜索步骤直接用原始手机号调 addContacts 可能会失败。
正确流程参考:
pythondef search_and_add(phone_or_wxid: str, message: str = "你好,我是xx"):
# 第一步:搜索获取 wxid
search_resp = requests.post(
f"{BASE}/contacts/search",
headers=HEADERS,
json={"appId": APPID, "contactsInfo": phone_or_wxid}
)
search_data = search_resp.json()
if search_data.get("ret") != 200:
print("搜索失败:", search_data.get("msg"))
return
wxid = search_data.get("data", {}).get("wxid", "")
if not wxid:
print("未找到该用户")
return
# 第二步:发起添加,附上验证消息
add_resp = requests.post(
f"{BASE}/contacts/addContacts",
headers=HEADERS,
json={
"appId": APPID,
"wxid": wxid,
"addType": 6, # 具体 addType 枚举以文档为准
"addContent": message
}
)
print("添加结果:", add_resp.json())
代码为示例,具体接口路径和字段以官方文档为准。
4.3 调用频率是否过高
自动化场景最容易出现频率问题,代码循环速度远超人工操作。建议在每次添加之间加随机等待:
pythonimport time
import random
def add_with_delay(wxid: str):
# ... 调用 addContacts ...
wait = random.uniform(120, 480) # 每次随机等待 2~8 分钟
print(f"等待 {wait:.0f} 秒后继续")
time.sleep(wait)
搜索操作同样需要控速,每天搜索量建议控制在 10~20 次以内,避免触发风控。
4.4 验证消息内容是否合规
微信服务端会对验证消息内容做关键词过滤,含有以下内容的申请可能被拦截:
- 外部链接(http/https 开头的 URL)
- 明显的广告词、营销话术
- 特殊字符堆砌
处理方式:验证消息保持简短、自然,如"你好,我是 [你的名字],方便加个好友吗"。
4.5 使用托管 HTTP API 时的注意事项
如果你用的是托管 HTTP 接口,WechatApi 提供扫码登录、消息收发、好友与群管理等 REST 接口,HTTP 调用即可,除了接口调用逻辑,还需要确认:账号已完成扫码绑定、当前 appId 对应账号处于在线状态、token 没有过期。大多数加好友失败,根源还是账号状态或频率,而不是接口本身的问题。
五、系统性排查流程图
按以下顺序逐步排查,能覆盖 90% 以上的失败场景:
开始
│
▼
账号在线时间是否 ≥ 3 天?
├─ 否 → 等待 3 天后再试
└─ 是 ↓
今天已添加人数是否 > 10 人?
├─ 是 → 停止,明天继续(控制节奏)
└─ 否 ↓
用同一账号手动添加认识的人,是否成功?
├─ 否 → 账号被风控,联系平台客服或等待解除
└─ 是 ↓
是否通过手机号搜索对方 wxid 再添加?
├─ 否 → 检查接口调用顺序(search → addContacts)
└─ 是 ↓
验证消息是否含链接/广告词?
├─ 是 → 替换为简洁自然的问候语
└─ 否 ↓
联系对方确认:是否开启了限制好友来源 / 是否已达 5000 好友上限
└─ 根据对方反馈决定下一步
六、常见错误码与含义速查
| 返回情况 | 可能含义 | 处理方向 |
|---|---|---|
| ret ≠ 200,msg 含"频率" | 当天加人次数过多 | 停止操作,次日重试 |
| ret ≠ 200,msg 含"在线" | 账号掉线 | 重新登录后再操作 |
| ret = 200 但对方没收到 | 账号风控/对方隐私设置 | 参考第二、三节排查 |
| 搜索返回空结果 | 对方关闭了被搜索权限,或号码有误 | 核实信息,尝试其他搜索方式 |
| 添加后状态长期"等待验证" | 对方未处理 or 申请已被过滤 | 等待 24h 后确认 |
总结
加好友失败的原因分散在账号状态、隐私设置、内容合规、调用频率四个层面,按本文的清单逐项对照,大多数情况都能找到根源。解决问题的核心原则只有两个:保持账号正常"养号"状态,以及控制操作节奏不触发风控。
