消息转发到指定账号,是多账号运营里的常见需求——客服号收到的咨询转给对应业务负责人,或者多个账号之间同步消息。转发听着简单,实际要解决转发规则、目标映射、防循环、失败回退四个问题,尤其防循环是必须处理的,不处理会出现两个账号无限转发。
一、转发规则与目标映射
转发不是收到就转,要先判断这条消息该不该转。规则按来源、关键词、消息类型三个维度组合——来自某个群的、包含"合作"的、属于图片类型的,分别可以配置不同的转发策略。
目标映射用配置表实现,不要写死在代码里。映射表记录"什么来源转给哪个账号",改需求只改配置。多目标转发要设上限——一条消息转给十个账号,转发风暴容易触发限流。
二、防循环与去重
转发最大的坑是循环。A账号的转发规则把消息转给B,B的转发规则又把消息转给A,两个账号之间无限转发下去,很快触发限流甚至封号。
防循环的工程实现是转发链标记。每条消息带一个转发链列表,记录这条消息经过的账号。转发前检查目标账号是否已在链中,在链中就不再转发。链是消息的一部分,转发时随消息一起传递。
去重是另一层保护。同一条消息可能因为规则重叠被多次转发,按消息ID加目标账号组合去重,避免重复投放。
三、转发失败处理
目标账号离线、转发接口超时,转发会失败。失败不能一丢了之,要有限重试并记录。重试次数设上限,超过上限的记录到失败队列并告警,原消息保留。
原消息保留是关键——转发失败后原消息如果也被删了,这条消息就彻底丢了。转发是附加动作,失败不应该影响原消息的处理。转发失败通知和消息发送的接口在 Eyun 开发文档 中有对应能力。
消息转发方案对照
环节 | 核心动作 | 工程要点 | 常见坑 |
|---|---|---|---|
规则匹配 | 判断是否转发 | 来源+关键词 | 规则重叠 |
目标映射 | 选转发目标 | 配置化 | 多目标风暴 |
防循环 | 转发链检查 | 随消息传递 | 无限转发 |
失败处理 | 重试+告警 | 保留原消息 | 消息丢失 |
消息转发与防循环实现
class MessageForwarder: def __init__(self): self.rules = ForwardRules() # 转发规则 self.mapping = TargetMapping() # 目标映射表 self.forwarded = set() # 去重缓存 def on_message(self, msg): # 规则匹配:是否该转发 rule = self.rules.match(msg) if not rule: return self.process(msg) # 不转发正常处理 targets = self.mapping.get_targets(rule.source) for target in targets: self.forward(msg, target) return self.process(msg) # 原消息照常处理 def forward(self, msg, target): # 防循环:转链中已存在的账号不再转 chain = msg.get("forward_chain", []) if target in chain: self.log_skip(msg, target) # 记录跳过 return # 去重:消息ID+目标 组合 key = (msg["msg_id"], target) if key in self.forwarded: return self.forwarded.add(key) msg["forward_chain"] = chain + [target] try: resp = requests.post( f"{API_BASE}/{target}/send", json={ "wxid": msg["to_wxid"], "content": msg["content"], "forward_chain": msg["forward_chain"] }, timeout=15 ) if not resp.ok: self.retry(msg, target) except Exception: self.retry(msg, target) # 失败进重试 def retry(self, msg, target): # 有限重试:最多2次 if msg.get("fwd_retry", 0) < 2: msg["fwd_retry"] = msg.get("fwd_retry", 0) + 1 self.schedule_retry(msg, target, delay=10) else: self.failure_queue.add(msg, target) # 超过上限告警 self.alert(msg, target)落地建议
转发规则和映射都配置化——来源、关键词、目标写配置表,改需求不动代码。防循环必须做——用转发链标记,转过的账号不再转,这是多账号转发的安全底线。去重加一层——消息ID加目标账号组合去重,防规则重叠重复投放。转发是附加动作——失败不丢原消息,原消息照常处理。微信侧的多账号消息发送和来源字段由Eyun这类个人微信API平台 提供,转发规则和链路检查在自建服务实现,接口字段以平台开发文档为准。