1. 为什么微信消息总是落到默认代理上
如果你正在用 openclaw 做多代理协作,大概率会遇到这个场景:主代理跑得好好的,你想给微信单独拉一个独立代理,让它专门处理微信渠道的消息,结果配置完发现——微信发过来的消息还是被默认代理接走了,新代理像个摆设。
我试过最典型的翻车路径是这样的:先让 openclaw 帮忙创建一个代理,它默认给你建了个子代理(subagent),而不是独立代理;然后你手动补配置,代理之间通讯又报错;接着装微信插件,Gateway 重启失败;最后好不容易通道通了,消息却全部路由到默认代理,因为绑定规则里少写了accountId。
这一串问题的根子在于:openclaw 的代理隔离和渠道绑定是两套独立机制,代理建对了不代表微信会找它,渠道装好了也不代表路由会命中。微信渠道的消息天然带一个accountId(类似a261d3edb3b1-im-bot这种),绑定规则里如果不显式写这个accountId,匹配就会失败,消息回落到默认代理。
这篇就围绕 openclaw 多代理场景,把「创建独立代理 → 配置 accountId 隔离 → Gateway 转发路由 → 验证微信消息正确分发」这条完整链路拆开讲。适合已经在跑 openclaw、想给微信渠道做代理隔离的人,也适合刚踩完上面那些坑想找一份可复制配置的人。下面所有配置片段都可以直接改改就用。
2. 前置准备:TaoToken 与 openclaw 环境
openclaw 本身要调用大模型能力,代理的model字段需要指向一个可用的模型服务。我这边统一用 TaoToken 来做模型接入,它的 API 地址是https://taotoken.net/api,兼容常见的模型调用格式,配置起来比较省事。
如果你还没配模型服务,先去控制台拿一个 API Key:
控制台入口:https://taotoken.net/console?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
拿到 Key 之后,在 openclaw 的模型配置里填上 base URL 和 key。openclaw 的模型配置一般挂在models或代理的model字段里,具体字段名以你本地版本为准。我这边代理配置里model指向的就是 TaoToken 提供的模型名。
环境侧需要确认三件事:
第一,openclaw 本体能正常跑,openclaw config get agents.list能返回当前代理列表。第二,微信插件 CLI 能执行,也就是npx -y @tencent-weixin/openclaw-weixin-cli@latest这条命令可用。第三,Gateway 服务可控,Windows 上尤其要注意,openclaw gateway restart有时候会失败,得能手动重启服务。
注意:微信插件的安装命令会自己生成
channels.openclaw-weixin和plugins相关配置,这部分不要手动去改,改了反而容易冲突。你要动的只有bindings和代理本身的配置。
3. 创建独立代理:一次配全,别分批打补丁
创建独立代理最容易犯的错,就是分多次小补丁去试。openclaw 的配置补丁是整体应用的,你分三次打,中间任何一次结构不完整都可能导致代理注册失败或者通讯异常。正确做法是一次性写好完整补丁 JSON,再config patch应用。
先看当前配置,确认没有重名代理:
openclaw config get agents.list然后写补丁文件,比如patch-agent.json。这个文件必须包含完整结构:agents.list[]里加新代理,tools.agentToAgent.allow里加新代理 ID,并且给新代理加上subagents.allowAgents: ["*"]。
{ "agents": { "list": [ { "id": "wechat-agent", "name": "WeChat Agent", "workspace": "D:\\data\\openclaw\\workspace\\wechat-agent", "agentDir": "C:\\Users\\<user>\\.openclaw\\agents\\wechat-agent\\agent", "model": "taotoken-default", "subagents": { "allowAgents": ["*"] } } ] }, "tools": { "agentToAgent": { "allow": ["wechat-agent"] } } }这里几个字段别漏:id是代理唯一标识,后面绑定规则要用;workspace和agentDir是两个必须存在的目录,缺了代理起不来;subagents.allowAgents控制这个代理能调度哪些子代理,写["*"]表示不限制。
补丁写好后,先手动把两个目录建出来,别指望 openclaw 自动创建:
mkdir "D:\data\openclaw\workspace\wechat-agent" mkdir "C:\Users\<user>\.openclaw\agents\wechat-agent\agent"然后应用补丁:
openclaw config patch --file patch-agent.json应用完必须完整重启 Gateway。Windows 上openclaw gateway restart可能返回失败,这时候直接去服务管理器手动重启 openclaw 的 Gateway 服务,或者用openclaw gateway stop再openclaw gateway start。重启完再验证代理是否注册成功:
openclaw config get agents.list看到wechat-agent出现在列表里,且tools.agentToAgent.allow包含它,这一步才算过。
4. 接入微信:accountId 隔离与 Gateway 路由骨架
代理建好了,接下来是微信渠道。先跑安装和扫码:
npx -y @tencent-weixin/openclaw-weixin-cli@latest install安装过程会生成channels.openclaw-weixin配置,这部分保持原样,不要动。安装完 openclaw 可能会重启失败,手动重启一次 Gateway 即可,微信通道本身的配置是正常的,不需要重复执行安装。
关键在绑定规则。微信消息自带一个accountId,你必须从实际会话里把它捞出来,写进bindings。先看会话列表:
openclaw sessions_list在返回结果里找微信渠道的会话,里面会有一个类似a261d3edb3b1-im-bot的accountId。拿到它之后,在bindings数组里加规则:
{ "bindings": [ { "agentId": "wechat-agent", "match": { "channel": "openclaw-weixin", "accountId": "a261d3edb3b1-im-bot" } } ] }这里有个坑要划重点:理论上只写channel不写accountId应该也能匹配,但实际因为微信消息自带accountId,不写反而匹配不上,消息会直接路由到默认代理。所以accountId必须写,而且必须是微信安装后实际生成的那个值,不能自己编。
Gateway 的路由逻辑就是按bindings顺序匹配的:消息进来先看channel,再看accountId,两个都对上才转发给对应agentId。所以你的绑定规则里channel和accountId缺一不可。
配置改完,再次完整重启 Gateway:
openclaw gateway stop openclaw gateway start5. 验证独立代理生效与消息分发
重启完先别急着发微信,先在本地验证代理和路由。
第一步,确认代理在线:
openclaw config get agents.list第二步,用sessions_send测试代理间通讯,确认wechat-agent能被调度:
openclaw sessions_send --agent wechat-agent --message "ping"如果返回正常,说明代理本身没问题。如果报通讯错误,回去检查tools.agentToAgent.allow里有没有加wechat-agent,以及subagents.allowAgents是否配了["*"]。
第三步,微信发一对一消息。发完之后再看会话列表:
openclaw sessions_list重点看这条微信会话的agentId字段。如果显示的是wechat-agent,说明路由命中,独立代理生效;如果还是默认代理的 ID,说明accountId没匹配上,回去核对绑定规则里的accountId和sessions_list里实际的是否一致。
第四步,看 Gateway 日志确认转发路径。日志里会打印消息匹配到哪条 binding、转发给哪个 agent。如果日志显示匹配到了openclaw-weixin但 agent 是默认的,基本就是accountId写错或者漏写。
验证通过后,微信消息就会稳定落到wechat-agent,和默认代理完全隔离。你可以给这个代理单独配 workspace、单独配模型,互不干扰。
6. 常见报错排查清单
代理创建后不生效:八成是补丁结构不完整。检查agents.list[]、tools.agentToAgent.allow、subagents.allowAgents三处是否都在同一个补丁里,别分批打。
代理间通讯报错:tools.agentToAgent.allow里没加新代理 ID,或者subagents.allowAgents没配。补上后重启 Gateway。
目录缺失导致启动失败:workspace和agentDir两个目录必须手动建,openclaw 不会自动创建。路径里的<user>换成你实际的 Windows 用户名。
微信插件安装后 openclaw 重启失败:手动重启 Gateway 服务即可,微信通道配置是安装命令生成的,不用重装也不用改。
微信消息路由到默认代理:绑定规则里漏了accountId,或者accountId写错了。从sessions_list里捞实际值,别自己猜。
Gateway 重启后配置没生效:Windows 上openclaw gateway restart可能静默失败,用stop+start两步走,或者直接手动重启服务。
绑定规则写了但不匹配:确认channel写的是openclaw-weixin,和channels里的键名一致;accountId和会话里的完全一致,包括大小写和连字符。
7. 后续接入与模型调用入口
代理和微信通道都跑通之后,如果你还想继续扩展,比如给这个独立代理接更多渠道、或者调模型能力做更复杂的任务,可以从这几个入口走:
模型对话调试:https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
长期编码和 Agent 场景的套餐:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
API Key 管理:https://taotoken.net/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
ClaudeCode Anthropic 相关:https://taotoken.net/claudecode-anthropic?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite
最后留一个我踩过的坑:绑定规则改完一定要完整重启 Gateway,别只 reload。我有一次改完accountId没重启,微信消息还是走默认代理,排查了半天以为是accountId写错了,结果重启一下就好了。配置这东西,改完就重启,能省很多事。