1. 为什么要在飞书里养一只 OpenClaw
OpenClaw 是一个开源的 AI 助手框架,能读写文件、执行 Shell 命令、维护跨会话记忆,还能通过 sessions_spawn 调度子代理处理复杂任务。简单说,它像一个能操作你服务器的数字员工。而飞书是国内团队协作里最顺手的入口之一,把 OpenClaw 接进飞书群,你就能在聊天窗口里 @它 查文档、跑脚本、整理项目笔记,不用再切终端。
这篇要解决的核心问题是:本地部署 OpenClaw 之后,模型调用通道怎么统一管理。很多人卡在模型 Key 上——今天用这家、明天换那家,配置文件改来改去,飞书机器人一报错就得翻日志。我的做法是用 TaoToken 做统一 Key 和 API 通道,OpenClaw 的 config.toml 里只写一份 base_url 和 key,后面换模型只改一个字段,飞书侧完全不用动。
适合谁看:想快速搭一个专属 AI 助手、又不想在模型接入上反复折腾的开发者。全程给可复制的 config.toml 和飞书事件订阅骨架,跟着做就能在飞书群里 @机器人 对话。
2. 前置准备:TaoToken 统一 Key 与 OpenClaw 环境
先说 TaoToken 这边要拿到什么。打开官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= 注册后进控制台,在 API Keys 页面创建一个 Key。这个 Key 就是后面 config.toml 里的 api_key,所有模型调用都走它。
TaoToken 的 API 入口是 https://taotoken.net/api,注意这个地址不带 UTM 参数,直接写进配置即可。它的作用是把你对多个模型的请求收敛到一个通道,OpenClaw 不需要为每个模型单独配 endpoint。
如果你打算长期跑编码类任务或者接 Agent 工作流,可以看下 Coding Plan 页面,按套餐走比按量计费更省心;只是临时验证模型效果,用模型对话页面先试通再落到配置里也行。创建 Key 的具体入口在 API Keys 页,文档细节在接入文档里都有。
OpenClaw 环境这边,你需要一台能跑服务的机器,2 核 2GB 起步,系统用常见的 Linux 发行版即可。装好 OpenClaw 后确认openclaw gateway status能看到服务状态。飞书侧需要一个企业自建应用,拿到 App ID 和 App Secret,这个后面配置事件订阅要用。
3. 可复制配置:config.toml 与飞书事件订阅骨架
3.1 OpenClaw 的 config.toml 模型段
OpenClaw 的模型配置集中在 config.toml。下面这份是接 TaoToken 的最小可用骨架,把 api_key 换成你自己的:
[model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" model = "claude-sonnet-4-20250514" max_tokens = 4096 temperature = 0.7 [model.request] timeout = 120 retry = 2几个参数说明一下。provider 用 openai-compatible 是因为 TaoToken 的 API 走标准兼容格式,OpenClaw 直接认。base_url 一定写 https://taotoken.net/api,不要带末尾斜杠,也不要加 UTM。model 字段填你想用的模型名,换模型只改这一行。timeout 给 120 秒,长任务不容易断;retry 给 2,网络抖动时自动重试。
如果你同时想保留多个模型切换,可以写成数组形式:
[model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "sk-你的TaoToken密钥" default = "claude-sonnet-4-20250514" [[model.candidates]] name = "claude-sonnet-4-20250514" max_tokens = 4096 [[model.candidates]] name = "gpt-4o" max_tokens = 4096这样 OpenClaw 内部调度时可以在候选模型里选,但对外始终是同一个 Key 和 base_url。
3.2 飞书事件订阅配置骨架
飞书开发者后台里,事件与回调都选长连接模式,这样不用公网回调地址。事件订阅添加「接收消息」,权限用批量导入:
{ "scopes": { "tenant": [ "im:message", "im:message.group_at_msg:readonly", "im:message.p2p_msg:readonly", "im:message:send_as_bot", "im:chat", "im:chat:read", "im:resource", "contact:user.base:readonly" ], "user": [ "im:chat.access_event.bot_p2p_chat:read" ] } }这份权限比全量精简了不少,够群内 @机器人 和单聊用。导入后创建版本并发布,等审核通过。
3.3 把飞书凭证写进 OpenClaw
OpenClaw 侧的消息平台配置段:
[platform.feishu] enabled = true app_id = "cli_你的AppID" app_secret = "你的AppSecret" connection_mode = "websocket" event_types = ["im.message.receive_v1"]connection_mode 用 websocket 对应飞书的长连接模式。event_types 里 im.message.receive_v1 就是接收消息事件。改完配置后重启 gateway:
openclaw gateway stop openclaw gateway start openclaw gateway statusstatus 显示 running 且日志里出现飞书长连接建立成功的字样,就说明通道通了。
4. 验证请求:从 curl 到飞书群 @机器人
4.1 先用 curl 验证 TaoToken 通道
在配 OpenClaw 之前,先确认 Key 和 base_url 是通的:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer sk-你的TaoToken密钥" \ -H "Content-Type: application/json" \ -d '{ "model": "claude-sonnet-4-20250514", "messages": [{"role": "user", "content": "回复:通道正常"}], "max_tokens": 32 }'返回里 choices[0].message.content 有内容,说明通道没问题。这一步能省掉后面一半的排障时间。
4.2 验证 OpenClaw 本地对话
OpenClaw 装好后可以用命令行先测一轮:
openclaw chat --message "你好,报一下当前模型"如果返回正常,说明 config.toml 的模型段被正确加载。如果报 401,回去检查 api_key;报 404,检查 base_url 是不是写成了带 /v1 的完整路径——TaoToken 这边 base_url 只到 /api,OpenClaw 会自己拼 /v1/chat/completions。
4.3 飞书群内 @机器人 验证
打开飞书,进入一个群,@你创建的机器人发一句「你好」。预期结果是机器人回复一段文本。如果没反应,按下面顺序查:
先看 OpenClaw 日志:
openclaw logs --follow日志里如果出现 feishu websocket connected,说明长连接在;如果出现 event received 但没回复,多半是模型调用失败,回去看 4.1 的 curl 结果。如果日志里连 event received 都没有,说明飞书事件订阅没生效,检查事件配置里是否勾了「接收消息」,以及应用版本是否已发布。
单聊验证也一样,在工作台找到应用直接发消息即可。群聊和单聊都通了,接入就算完成。
5. 本篇常见错排查
报错一:401 Unauthorized。九成是 api_key 写错或过期。去 TaoToken 控制台 API Keys 页面重新生成一个,粘贴时注意别带空格。如果 Key 没问题,检查 config.toml 里是不是有多个 model 段,后一个覆盖了前一个。
报错二:404 Not Found。base_url 写错了。正确写法是 https://taotoken.net/api,不要写成 https://taotoken.net/api/v1,也不要带末尾斜杠。OpenClaw 内部会补全路径。
报错三:飞书长连接建立失败。先确认 App ID 和 App Secret 没填反。然后去飞书后台看应用是否已发布——未发布的应用长连接建不起来。如果提示「未建立长连接」,把 OpenClaw 的 gateway 重启一次,再回飞书后台刷新事件配置页。
报错四:群内 @机器人 无响应,但单聊正常。这是群权限问题。检查权限里有没有 im:message.group_at_msg:readonly,没有就补上重新发布版本。另外确认机器人被拉进了群,且群设置里允许机器人接收消息。
报错五:模型返回超时。把 config.toml 里 timeout 调到 180,retry 调到 3。如果还超时,换一个候选模型试试,可能是当前模型负载高。
报错六:OpenClaw 启动后 status 显示 stopped。看日志里有没有 config parse error。TOML 对缩进和引号敏感,检查 api_key 那行有没有漏引号,或者 model 段下面有没有非法字符。
6. 后续怎么用:统一 Key 的长期价值
接入跑通之后,你手里其实有两套东西:一套是 OpenClaw 的本地能力(文件、终端、记忆),一套是 TaoToken 的统一模型通道。后面想换模型,只改 config.toml 里 model 那一行,飞书侧不用重新发布应用,也不用动事件订阅。想加新能力,OpenClaw 支持 Skills 扩展,装完在配置里启用即可。
如果你打算把这个助手长期挂在团队飞书里,建议走 Coding Plan,按套餐计费比按量更可控,尤其是多人共用的时候。只是自己验证着玩,用模型对话页面先试模型效果,确认顺手了再落到 config.toml。
最后留一个实用习惯:每次改完 config.toml,先openclaw gateway stop再start,别直接 reload,避免旧连接没断干净导致飞书侧收到重复事件。日志用openclaw logs --follow挂着,出问题第一时间能看到是哪一层断的。