
消息转发到指定账号是多账号运营里的常见需求——客服号收到的咨询转给对应业务负责人或者多个账号之间同步消息。转发听着简单实际要解决转发规则、目标映射、防循环、失败回退四个问题尤其防循环是必须处理的不处理会出现两个账号无限转发。一、转发规则与目标映射转发不是收到就转要先判断这条消息该不该转。规则按来源、关键词、消息类型三个维度组合——来自某个群的、包含合作的、属于图片类型的分别可以配置不同的转发策略。目标映射用配置表实现不要写死在代码里。映射表记录什么来源转给哪个账号改需求只改配置。多目标转发要设上限——一条消息转给十个账号转发风暴容易触发限流。二、防循环与去重转发最大的坑是循环。A账号的转发规则把消息转给BB的转发规则又把消息转给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] }, timeout15 ) 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, delay10) else: self.failure_queue.add(msg, target) # 超过上限告警 self.alert(msg, target)落地建议转发规则和映射都配置化——来源、关键词、目标写配置表改需求不动代码。防循环必须做——用转发链标记转过的账号不再转这是多账号转发的安全底线。去重加一层——消息ID加目标账号组合去重防规则重叠重复投放。转发是附加动作——失败不丢原消息原消息照常处理。微信侧的多账号消息发送和来源字段由Eyun这类个人微信API平台 提供转发规则和链路检查在自建服务实现接口字段以平台开发文档为准。