"通过好友→拉进群→发欢迎语"这条链路,单看每一步都是一次接口调用,连起来就有两个经典问题:拉群失败时已经通过的好友怎么办、群满了之后新来的人往哪放。这篇把链路的事务性和群容量管理讲清楚。
一、链路的三个动作与依赖关系
三个动作有严格顺序:先通过好友(拿到好友关系),才能拉群(只有好友才能被拉进群),最后发欢迎语(确认进群后才有意义)。顺序反了就会报错——没通过好友就拉群,接口直接返回失败。
动作之间的间隔也要有:通过后等 3 秒再拉,拉完等 2 秒再发欢迎语。连续无间隔调用容易触发限流,而且真人操作本来就有节奏。三个接口的参数结构在 Eyun 开发文档 中有对应说明。
二、拉群失败:不回滚,进补偿队列
拉群失败最常见的原因是群满(500 人上限)或对方设置了"需要确认才能被拉群"。这时候不要把已通过的好友关系回滚掉——好友关系留着有价值,只是群暂时进不去。
正确做法是把拉群任务放进补偿队列,标记失败原因,定期重试。群满类的失败等开了新群再批量补拉;需要确认类的失败改为私聊发送入群邀请链接,让用户自己点。
三、群满裂变:自动开新群并迁移策略
运营群迟早会满。裂变策略:主群人数到阈值(比如 450)就自动创建新群,新成员统一拉进新群,旧群停止进人但保留服务。新群创建后要把群名、群公告、机器人配置一并初始化,别只建个空群。
两个群的编号规则要提前定好——比如"福利 1 群""福利 2 群",欢迎语里带上群编号,用户转述时不混乱。
四、欢迎语发在哪:群里@还是私聊
两种做法各有场景。群里发并 @ 新人——公开透明,老成员看到会觉得群活跃,适合运营群。私聊发——内容可以更长更个性化(比如发资料包链接),不打扰群成员,适合服务群。
也可以两者结合:群里发一句简短的"@xxx 欢迎加入",详细的指引走私聊。欢迎语模板按来源渠道配置,扫码渠道 A 的和渠道 B 的内容不同,方便后续统计渠道效果。
链路动作对照
动作 | 前置条件 | 间隔 | 失败处理 |
|---|---|---|---|
通过好友 | 申请事件 | - | 重试3次转人工 |
拉群 | 已是好友 | +3秒 | 进补偿队列 |
发欢迎语 | 已在群 | +2秒 | 私聊补发 |
群满裂变 | 人数≥450 | - | 建群+初始化配置 |
完整链路实现
import time class GroupOnboarder: THRESHOLD = 450 # 裂变阈值 def __init__(self, api, store): self.api = api self.store = store self.compensation = [] # 补偿队列 def current_group(self): # 取当前活跃群,满了自动裂变 gid = self.store.get("active_group") members = self.api.get(f"/group/{gid}/members").json() if len(members["items"]) >= self.THRESHOLD: gid = self._spawn_new_group() self.store.set("active_group", gid) return gid def _spawn_new_group(self): idx = self.store.incr("group_index") r = self.api.post("/group/create", { "name": f"福利 {idx} 群", }).json() gid = r["group_id"] self.api.post("/group/announce", { "group_id": gid, "content": self.store.get("notice_tpl")}) return gid def onboard(self, req): # 1. 通过好友 self.api.post("/friend/accept", {"req_id": req["req_id"]}) time.sleep(3) # 2. 拉群,失败进补偿队列 gid = self.current_group() r = self.api.post("/group/add", { "group_id": gid, "members": [req["wxid"]]}).json() if r.get("code") != 0: self.compensation.append({ "wxid": req["wxid"], "reason": r.get("msg"), "next_retry": time.time() + 300}) return "pending" time.sleep(2) # 3. 群内@欢迎 + 私聊发详细指引 self.api.post("/send", { "group_id": gid, "content": f"@{req['nickname']} 欢迎加入福利群"}) time.sleep(3) self.api.post("/send", { "wxid": req["wxid"], "content": self.store.get("guide_tpl")}) return "done"落地建议
链路顺序必须是通过好友→拉群→欢迎语,反了接口直接报错。拉群失败不回滚好友关系,进补偿队列标记原因定期重试;群满到阈值自动建新群,群名公告机器人一并初始化。欢迎语分两层——群里一句 @ 简短欢迎,详细指引走私聊,模板按来源渠道配置。微信侧的好友、群管理接口由Eyun这类个人微信API平台 提供,链路与裂变逻辑在自建服务实现,具体字段以平台开发文档为准。