1. 多飞书 bot 共用一个网关,为什么配置总是打架
如果你正在用 openclaw 接飞书,而且手上不止一个机器人账号,大概率会遇到这种局面:bot1 是客服号、bot2 是运营号、bot3 是内部工具号,三个账号各自要有独立人设、独立会话、独立权限,但你把它们塞进同一份openclaw.json之后,消息开始串台,A 群的问题被 B 号回答,或者干脆只有一个 bot 能连上。
openclaw 的多 bot 模型其实很清晰,它把「平台通道」「机器人账号」「智能体」拆成了三层。channel 是平台大类,比如 feishu、wechat 各算一条通道;bot 是通道里的具体账号,一个 channel 可以挂多个 bot;agent 是真正干活的大脑,带思考、人设、会话和技能。规则上,一个 bot 只能绑一个 agent,但一个 agent 可以被多个 bot 复用。理解这三层关系,多 bot 配置就不会乱。
这篇聚焦的是落地:在一套配置里管理多个飞书 bot,每个 bot 路由到自己的 agent,同时所有模型请求统一走 TaoToken 的 Key 和 API 通道,不用给每个 bot 单独配一套模型凭证。适合需要单网关跑多个飞书账号的开发者。下面给出一份可直接复制的settings.json骨架,再逐字段说明路由逻辑,最后附上启动后的验证动作。
2. 接入前先把 TaoToken 的 Key 和通道准备好
多 bot 场景下最容易踩的坑,是每个 bot 各配一份模型 Key,改一次要改 N 个地方。更省事的做法是让 openclaw 的模型请求统一走一个入口,TaoToken 就是干这个的:它提供统一的 API 通道和 Key,openclaw 里所有 agent 共用同一个 Key,换模型、调额度都只动一处。
你需要先拿到两样东西:一个 API Key,以及确认接入地址。Key 在控制台的 API Keys 页面创建,地址是 https://taotoken.net/api ,注意这个地址不带任何查询参数,直接作为 base URL 填进配置即可。创建 Key 的入口在 https://taotoken.net/console/api-keys ,登录后新建一个,复制出来先存好,后面配置里要用。
如果你还没决定用哪个模型,可以先去模型对话页面试一下手感,确认某个模型在中文对话和工具调用上的表现符合预期,再写进配置。地址是 https://taotoken.net/model-chat 。对于长期跑编码类 agent 的场景,比如让某个飞书 bot 专门做代码助手,可以考虑 Coding Plan,入口在 https://taotoken.net/coding-plan ,它更适合高频、长会话的编码任务。
这里有个细节值得强调:TaoToken 是作为模型 API 通道接入的,不是替代 openclaw 本身。openclaw 负责网关、通道、bot 和 agent 的编排,TaoToken 负责把 agent 的模型请求稳定地送出去。两者职责分开,配置才不会互相污染。
3. 可复制的 settings.json 骨架与多 bot 路由字段
openclaw 的主配置默认在~/.openclaw/openclaw.json,部分版本读取settings.json,字段结构一致。下面这份骨架把「模型通道」「飞书多账号」「bot 到 agent 的路由」三块放在一起,你可以整体复制后替换成自己的值。
{ "models": { "provider": "openai-compatible", "baseUrl": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "defaultModel": "你的默认模型名" }, "channels": { "feishu": { "enabled": true, "connectionMode": "websocket", "domain": "feishu", "groupPolicy": "open", "requireMention": true, "accounts": { "bot1": { "appId": "cli_你的bot1_appId", "appSecret": "你的bot1_appSecret", "groupPolicy": "allowlist", "groupAllowFrom": ["oc_你的群组会话ID"] }, "bot2": { "appId": "cli_你的bot2_appId", "appSecret": "你的bot2_appSecret" }, "bot3": { "appId": "cli_你的bot3_appId", "appSecret": "你的bot3_appSecret" } } } }, "bindings": [ { "agentId": "bot2", "match": { "channel": "feishu", "accountId": "bot2" } }, { "agentId": "bot3", "match": { "channel": "feishu", "accountId": "bot3" } } ] }逐块说明。models这一段就是统一通道的关键:baseUrl填 TaoToken 的 API 地址,apiKey填你刚创建的 Key,所有 agent 默认都走这里,不需要在每个 agent 里重复写模型凭证。channels.feishu.accounts下每个键就是一个 bot 账号,键名(bot1/bot2/bot3)是你自己起的逻辑名,appId和appSecret从飞书开放平台对应应用里复制。bot1 额外加了groupPolicy: allowlist和groupAllowFrom,表示它只在指定群组里响应,其他 bot 不设就沿用通道级的open。
bindings是路由表,也是多 bot 最容易写错的地方。每条 binding 的agentId要和后面创建的 agent 名字一致,match.accountId要和accounts下的键名一致。上面只显式绑定了 bot2 和 bot3,bot1 没写 binding,它会落到默认 agent 上。如果你希望 bot1 也独立,就照葫芦画瓢再加一条。
创建 agent 的工作空间用命令行更省事,它会自动生成好各类 md 模板:
openclaw agents add bot2 --workspace ~/.openclaw/workspace-bot2 openclaw agents add bot3 --workspace ~/.openclaw/workspace-bot3设置人设时注意一个坑:下面这条命令只写入 json 配置,不会改动 workspace 里的 md 文件。
openclaw agents set-identity --agent bot2 --name "账号运营" --theme "选题规划、账号运维"真正决定对话中机器人自我认知的,是 workspace 下的IDENTITY.md。你手动改完它再 restart,openclaw agents list显示的就是文件里的设定,而不是 config 里的临时值。如果只跑了 set-identity 没改 md,机器人对话时还会反过来问你「给我起个名字吧」。
4. 启动服务并验证每个 bot 是否按预期绑定
配置写完先别急着发消息,按顺序验证三件事:网关是否起来、通道是否连上、agent 绑定是否正确。
openclaw gateway restart openclaw gateway status openclaw channels status feishu openclaw agents listgateway restart让改动的 config、channel、agent 生效,这一步不能省。channels status feishu会列出每个 bot 账号的连接状态,正常应该是 connected 或 online。agents list会显示每个 agent 的 id 和 name,如果 name 显示的是 config 而不是你写在IDENTITY.md里的内容,说明 md 没生效,回去检查文件路径和 restart。
验证请求是否走统一通道,可以看网关日志里模型请求的目标地址,确认是https://taotoken.net/api而不是其他地址。再进飞书里分别 @ 三个 bot,观察是不是各自按预期的人设和权限回应:bot1 只在白名单群响应,bot2、bot3 在各自绑定的 agent 下工作。如果某个 bot 不响应,先看channels status里它是否在线,再看bindings里的accountId有没有拼错。
群组白名单可以用命令补设,不用手改 json:
openclaw config set channels.feishu.accounts.bot2.groupPolicy allowlist openclaw config set channels.feishu.accounts.bot2.groupAllowFrom '["oc_你的群组会话ID"]'群组会话 ID 建议在飞书手机 App 的群设置最底部查看,电脑端有时找不到。如果某个 bot 的dmPolicy设成了pairing,需要先在机器人对话框里随便发一条消息,它会返回一个配对码,把配对码填进命令行完成绑定,否则私聊不会响应。
5. 本篇常见错误排查
bot 连不上、channels status 显示离线。九成是appId或appSecret复制时带了空格或漏字符。重新从飞书开放平台复制,注意别把应用凭证和机器人凭证搞混。改完 restart 再看状态。
消息串台,A 号回了 B 群的问题。检查bindings里每条match.accountId是否和accounts的键名严格一致,大小写都算。再确认没有两个 bot 绑到同一个 agent 却期望不同人设——一个 agent 被多个 bot 共用时,它们共享同一套人设和会话上下文,这是设计如此,不是 bug。
agent list 显示 config 而不是自定义名字。说明你只跑了set-identity,没改 workspace 里的IDENTITY.md。进对应 workspace 改文件,restart 后生效。
改了 json 但行为没变。忘了openclaw gateway restart。config、channel、agent 的改动都要重启才生效。
模型请求报鉴权失败。检查models.apiKey是否是有效的 TaoToken Key,baseUrl是否精确为https://taotoken.net/api,不要多加斜杠或路径。Key 失效就去控制台重新生成一个。
群组里 @ 了没反应。确认requireMention为 true 时确实 @ 了机器人,以及该群是否在groupAllowFrom白名单内。白名单模式下非白名单群一律不响应。
6. 把统一通道和多 bot 路由固化下来
多 bot 配置真正省心的地方,是模型通道只维护一份。所有 agent 共用 TaoToken 的 Key 和 API 地址,新增一个飞书 bot 时,你只需要在accounts加一段、在bindings加一条,模型侧完全不用动。接入文档在 https://taotoken.net/doc ,里面有 base URL、鉴权和常见模型名的说明,配置前扫一眼能少走弯路。
如果你更习惯先验证模型再写配置,模型对话页面可以直接试;长期跑编码或 Agent 类 bot,Coding Plan 的额度模型更适合高频调用。Key 管理统一在控制台的 API Keys 页面,轮换或新增都在那里操作。把这份骨架存成模板,下次加 bot 就是复制粘贴改三个字段的事。