1. 云上 OpenClaw 对接飞书,为什么卡在鉴权这一步
把 OpenClaw 部署到云服务器之后,真正让人头疼的往往不是编译安装,而是"接飞书"这一环。飞书开放平台要 App ID、App Secret,事件订阅要长连接,机器人要权限;与此同时 OpenClaw 自己还要调大模型,通义、豆包、DeepSeek 各给一把 Key,配置文件里散落着四五处凭证。只要有一处对不上,表现就是机器人"已读不回",日志里一堆 401、403,排查起来像大海捞针。
这篇就聚焦这个落地场景:云服务器上的 OpenClaw 与飞书机器人对接,用 TaoToken 的统一 Key 和 API 通道把"多工具鉴权分散"这件事收敛掉。目标是给你一套可复制的config.toml与settings.json骨架、飞书事件订阅回调配置,以及消息收发的联调验证动作,让云上对接链路一次性跑通。
适合谁看:已经在云主机上跑起 OpenClaw、准备接飞书做办公自动化的同学;或者本地能跑通、一上云就各种超时的同学。前置假设是你有一台能出网的云服务器(2 核 4G 起步比较稳),一个飞书企业自建应用,以及一个 TaoToken 账号。下面所有命令和配置都可以直接抄,改掉你自己的凭证即可。
2. TaoToken 前置:把分散的模型 Key 收成一把
OpenClaw 的模型调用走的是 OpenAI 兼容协议,这意味着只要有一个兼容端点,就能把后端模型换掉。TaoToken 提供的正是这样一个统一入口:你拿一把 Key,就能在同一个 API 通道里切换不同模型,不用为每个模型服务商单独维护一套鉴权。
对云上部署来说,这件事的价值很直接。第一,配置文件里只出现一个api_key字段,泄露面小、轮换成本低;第二,模型切换不用改代码,改一行model就行;第三,飞书侧和模型侧的凭证彻底解耦,排查问题时能快速定位是"通道问题"还是"飞书问题"。
你需要提前准备两样东西:
- 一把 TaoToken 的 API Key,在控制台的 API Keys 页面创建,形如
sk-开头的一串字符。 - 确认要用的模型名。TaoToken 的模型对话页面可以直接试跑,先确认模型能正常回话,再写进 OpenClaw 配置,能省掉一轮"配置写完才发现模型名写错"的返工。
注意:API Key 只创建时完整显示一次,创建后立刻复制到安全的地方。云服务器上建议用环境变量注入,不要硬编码进仓库。
如果你后续要做长期编码或 Agent 类任务,可以了解下 Coding Plan,它更适合高频、长上下文的调用场景;只是先跑通飞书对接的话,按量调用就够了。
3. 可复制配置:config.toml 与 settings.json 骨架
OpenClaw 的配置分两层:config.toml管模型与网关,settings.json管通道与插件。下面给的是最小可用骨架,字段名以你实际安装的版本为准,版本差异时优先看openclaw configure生成的默认文件。
先看模型层。把 TaoToken 作为 OpenAI 兼容端点接进去:
# ~/.config/openclaw/config.toml [gateway] host = "0.0.0.0" port = 18789 # 云上对外服务,务必配合防火墙白名单 [model] provider = "openai-compatible" base_url = "https://taotoken.net/api" api_key = "${TAOTOKEN_API_KEY}" model = "gpt-4o-mini" # 模型名以 TaoToken 模型对话页实际可用的为准 [model.params] temperature = 0.3 max_tokens = 2048 timeout = 60这里api_key用${TAOTOKEN_API_KEY}占位,实际值从环境变量读。在服务器上这样注入:
# 写入当前用户的 shell 配置,重启终端后生效 echo 'export TAOTOKEN_API_KEY="sk-你的实际Key"' >> ~/.bashrc source ~/.bashrc # 验证是否读到 echo $TAOTOKEN_API_KEY | head -c 8再看通道层。飞书通道的凭证放在settings.json:
{ "channels": { "feishu": { "enabled": true, "app_id": "cli_xxxxxxxxxxxx", "app_secret": "你的AppSecret", "connection_mode": "websocket", "event_types": [ "im.message.receive_v1", "im.message.message_read_v1", "im.chat.member.bot.added_v1", "im.chat.member.bot.deleted_v1" ] } }, "plugins": { "feishu": { "enabled": true, "reply_in_thread": false } } }connection_mode选websocket是关键:飞书的长连接模式由客户端主动连出去,云服务器不需要暴露公网回调地址,也就绕开了"回调 URL 必须 HTTPS 且可公网访问"的麻烦。对只有公网 IP、没配域名的轻量服务器来说,这是最省事的路径。
配置写完后重启网关让改动生效:
openclaw gateway restart openclaw gateway status # 期望输出包含 Gateway service: running4. 飞书侧配置与联调验证
飞书开放平台的操作顺序会影响成败,建议按"应用 → 权限 → 事件 → 发布"来走。
第一步,创建企业自建应用,在凭证页拿到 App ID 和 App Secret,填进上面的settings.json。第二步,添加"机器人"能力,并开通消息相关权限。权限可以用批量导入,把下面这段贴进权限管理页:
{ "scopes": { "tenant": [ "im:message", "im:message.p2p_msg:readonly", "im:message.group_at_msg:readonly", "im:message:send_as_bot", "im:resource", "im:chat.members:bot_access" ] } }第三步,事件订阅选"长连接接收事件",添加im.message.receive_v1等事件。第四步,创建版本并发布,个人自建应用通常免审即时生效。
配置齐了之后,做一次端到端验证。先在服务器上确认网关和通道状态:
openclaw gateway status openclaw channels list # 期望看到 feishu 通道状态为 connected然后在飞书里给机器人发一条私聊消息,比如"你好"。观察服务器日志:
openclaw gateway logs --follow # 正常应看到收到 im.message.receive_v1 事件,并触发模型调用如果机器人正常回复,说明"飞书 → OpenClaw → TaoToken → 模型 → 飞书"整条链路通了。想单独验证模型通道是否正常,可以绕过飞书直接打一次请求:
curl -s https://taotoken.net/api/v1/chat/completions \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "gpt-4o-mini", "messages": [{"role": "user", "content": "ping"}] }' | head -c 300返回里带choices字段就说明 Key 和通道都没问题,此时若飞书仍无响应,问题一定在飞书侧或通道配置,排查范围立刻缩小一半。
5. 本篇常见错排查
报错 401 Unauthorized。九成是 Key 没读到或写错。先echo $TAOTOKEN_API_KEY确认环境变量存在,再检查config.toml里是不是漏了${}直接写了明文却拼错。注意 Key 前后不要有空格,复制时容易带上换行。
报错 403 Forbidden。模型名不在你的可用范围内,或者飞书权限没生效。前者去模型对话页确认模型名拼写;后者检查飞书应用是否已发布版本,权限申请后需要重新发布才生效。
飞书机器人已读不回。按这个顺序查:openclaw channels list看通道是否 connected;openclaw gateway logs --follow看有没有收到im.message.receive_v1;如果事件收到了但没回复,问题在模型调用,回到上一条的 curl 验证。如果事件压根没收到,检查飞书事件订阅是否选了长连接、事件是否添加完整。
连接超时 / connection refused。云服务器出网被安全组拦了。确认服务器能访问taotoken.net,用curl -I https://taotoken.net/api测一下。另外确认网关监听的是0.0.0.0而不是127.0.0.1,否则外部连不进来。
配对码过期。飞书通道首次连接会生成临时配对码,有效期很短。如果提示配对失败,重新触发一次消息,拿到新配对码后立刻执行openclaw pairing approve feishu 你的配对码。
改了配置不生效。OpenClaw 不会热加载所有配置,改完config.toml或settings.json后必须openclaw gateway restart。养成"改完就重启、重启就看 status"的习惯,能省掉大量"我明明改了"的困惑。
6. 把链路固定下来,再谈扩展
跑通之后,建议做两件收尾的事。一是把开机自启配上,避免服务器重启后机器人掉线:
systemctl enable openclaw-node systemctl start openclaw-node systemctl status openclaw-node二是把凭证管理规范化。TaoToken 的 Key 放在环境变量里,飞书的 App Secret 如果条件允许也走环境变量注入,settings.json里用占位符。这样即使配置文件被误传到仓库,也不会直接泄露凭证。
后续要扩展多通道(企业微信、钉钉)或者加定时任务,思路是一样的:通道层各自配凭证,模型层统一走 TaoToken 这一把 Key。鉴权收敛之后,每加一个通道的成本就只剩通道本身的配置,模型侧完全不用动。
需要的话,可以从 API Keys 页面管理你的 Key,接入细节看接入文档,模型可用性在模型对话页面直接试。链路跑通只是起点,把它稳定地跑下去才是云部署真正的价值。