个人微信API风控避坑指南
微信的风控规则不会公开,但有一些规律可循。这篇把我在实际项目中总结的风控避坑经验写出来,包括发送频率、账号安全、内容规范三个方面。全是真金白银换来的教训。
一、什么场景最容易触发风控
先说说哪些操作容易中招,心里有数才能避坑:
1. 电商群发促销
双 11、618 这种节点,商家想给所有客户群发促销信息。一个号发 500 条,内容还都一样(秒杀、限时、优惠),微信分分钟识别为营销,直接封号。
2. 客服机器人秒回
机器人收到消息 0.1 秒就回复,一天回 1000 条。微信一看,这哪是人,分明是机器,限流或封号。
3. 自动加好友
私域引流,一天加 50 个好友,验证消息还是"你好我是某某"。微信对加好友频率很敏感,新号尤其容易被封。
4. 群聊批量操作
一口气建 20 个群,或者一分钟拉 100 人进群,这种批量操作很容易触发风控。
5. 朋友圈刷屏
一天发 20 条朋友圈,5 分钟发一条,内容还是广告。微信会判定为营销号,限流或封号。
这些都是高危操作,做之前一定要有风控意识。详见 API 使用与安全。
二、发送频率控制
1. 单条消息间隔
经验值:
单条消息间隔至少 3 秒
批量发送加随机抖动,比如 3-6 秒
同一个群,1 分钟内不超过 5 条
import time import random class RateLimiter: def __init__(self, min_interval=3, max_interval=6): self.min_interval = min_interval self.max_interval = max_interval self.last_send_time = 0 def wait(self): """发送前调用,自动等待""" now = time.time() elapsed = now - self.last_send_time interval = random.uniform(self.min_interval, self.max_interval) if elapsed < interval: time.sleep(interval - elapsed) self.last_send_time = time.time() # 使用 limiter = RateLimiter(3, 6) for user in user_list: limiter.wait() client.send_text(w_id, user, "通知内容")2. 日发送量限制
不要用一个号一天发几千条,建议:
单号日发送量不超过 200 条
批量任务分账号轮换
高峰期(晚上 8-10 点)降速
3. 分散发送
别在整点集中发送,加随机延迟。我朋友每天早上 9 点准时群发,发了一周号被封。改成 8:50-9:10 随机时间发,再没出过问题。
三、账号安全
1. 不要用主号测试
这是最重要的。测试用小号,实名认证过、有一定使用历史的号最好。新号容易被风控。
2. 登录网络要稳定
微信对登录 IP 敏感,IP 频繁变动会触发风控。三种登录网络方式:
平台代理:省事,但 IP 跟手机微信可能不一致
自定义代理:用自己的代理 IP,可控
本地代理(Aid):IP 跟手机一致,最稳定
生产环境建议用 Aid 本地代理,详见 Aid 本地代理。
3. 实例监控
账号掉线要及时发现,不然消息发不出去客户还以为你故意不回:
def check_instance_status(w_id): """定时检查实例状态""" try: resp = client.check_online(w_id) if resp.get("code") != "1000": send_alert(f"微信实例 {w_id} 离线!") client.reconnect(w_id) except Exception as e: send_alert(f"状态检查失败: {e}") # 每 60 秒检查一次 while True: check_instance_status(w_id) time.sleep(60)状态查询:查询微信是否在线,断线重连:断线重连。
4. 多账号轮换
批量任务不要压在一个号上,准备 3-5 个号轮换:
class AccountPool: def __init__(self, accounts): self.accounts = accounts self.index = 0 def get_available(self): """获取可用账号(日发送量未超限)""" for _ in range(len(self.accounts)): account = self.accounts[self.index] self.index = (self.index + 1) % len(self.accounts) if account["daily_count"] < 200: return account return None四、内容规范
1. 文本长度
单条文本不超过 500 字,超了会被截断。长文本分段发:
def send_long_text(w_id, wc_id, text): """长文本分段发送""" chunks = [text[i:i+400] for i in range(0, len(text), 400)] for i, chunk in enumerate(chunks): limiter.wait() client.send_text(w_id, wc_id, chunk) if i < len(chunks) - 1: time.sleep(1)2. 敏感词
微信对敏感词检测严格,避免:
营销类:秒杀、限时、优惠、折扣、抢购
金融类:投资、理财、收益、返利、稳赚
联系方式:微信号、手机号、二维码(批量发时)
3. 内容多样化(别群发一样的)
批量发送时,内容要有差异:
import random templates = [ "你好 {name},你的订单 {order_id} 已发货", "{name}您好,订单 {order_id} 已发出,请注意查收", "亲爱的 {name},您的订单 {order_id} 已经在路上啦" ] def send_order_notification(user, name, order_id): template = random.choice(templates) content = template.format(name=name, order_id=order_id) client.send_text(w_id, user, content)给 500 个客户发同一条通知,内容一字不差,被微信识别为群发,限流了。加了随机模板后正常。
五、客服机器人怎么避免风控
客服机器人是风控重灾区,我做过几个项目,总结的经验:
1. 回复加延迟
别秒回,模拟人工节奏:
import random def bot_reply(customer_wxid, content): """机器人回复""" reply = generate_reply(content) if reply: # 随机延迟 3-8 秒,模拟人工 delay = random.uniform(3, 8) time.sleep(delay) client.send_text(w_id, customer_wxid, reply)2. 复杂问题转人工
机器人别试图回复所有问题,识别不了的转人工:
def generate_reply(content): if "发货" in content: return "您的订单已发出,请耐心等待" elif "退款" in content: return "退款申请已收到,客服将处理" # 无法识别的,不回复,转人工 return None3. 控制日回复量
一个号一天回复不超过 200 条,超了换号。
六、踩坑记录
坑1:整点群发被封
前面说过,9 点准时群发,一周被封。改成随机时间后正常。
坑2:群发内容完全一样
500 条一字不差,被识别为群发。加了随机模板后正常。
坑3:掉线没发现
实例掉线了不知道,继续发消息,全部失败。加了状态监控和告警后,掉线 1 分钟内就能收到通知。
坑4:加好友太频繁
一天加 30 个好友,号被封了。后来改成一天不超过 10 个,验证消息多样化,再没出问题。
七、小结
风控的核心就两个字:像人。人发消息不会整点准时、不会一字不差、不会一分钟发几百条。把频率降下来、内容多样化、监控到位,基本能避开大部分风控。
账号安全这块,测试用小号、生产用多号轮换、登录用本地代理,这三点做到位就差不多了。
- Eyun平台
