上个月我把 OpenClaw 接到了飞书工作群里,效果比预想中好太多。原本要人肉盯着多维表格更新、手动@机器人查状态、在群里反复搬运消息的活儿,现在全部变成了群里一句指令和一张自动回传的卡片。这篇就是我对 OpenClaw 和飞书从零到能跑完整流程的记录,包含开放平台配置、OpenClaw 侧参数设置、多维表格上报、消息卡片回调,以及这段时间踩过的所有坑。如果你也是第一次接触 OpenClaw,想拿飞书当日常操作入口,这篇可以直接照着抄。
1. 先搞清楚 OpenClaw 是什么,以及为什么非要接飞书
1.1 OpenClaw 的核心定位与能力边界
OpenClaw 是一个跑在本地的 Agent Runtime,不是一个简单聊天机器人。它最大的特点是“事件驱动 + 工具调用”:你定义好一系列技能(Skill),它根据收到的消息内容自动决定调用哪个技能、执行什么操作,然后把结果通过消息卡片或普通文本回复回来。它的核心进程基于 Node.js,所以部署门槛其实很低,Windows、Linux、macOS 都能跑,甚至安卓手机上通过 Termux 也能拉起服务。
很多人第一次用 OpenClaw 会误以为它是个“需要申请账号的云端产品”,其实恰恰相反。OpenClaw 更接近一个“本地大脑”,算力来源完全由你自己决定。你可以只配置 API 接口,也可以把 Ollama、LM Studio 这类本地推理引擎挂进去,让所有请求都不出内网。这一点对于企业团队特别重要,因为消息内容可能包含敏感的业务数据,走本地模型避免了外部传输的风险。
它的能力边界也需要注意:OpenClaw 本身不提供前端界面,所有操作入口都要通过对话渠道来打通。这些渠道包括飞书、钉钉、Slack 这类 IM 平台,也包括 HTTP Webhook。如果没有接飞书,OpenClaw 就像一台没装显示器的服务器,能力再强也没有日常入口。这也是为什么“OpenClaw × 飞书”这个组合如此重要——飞书在这里不只是聊天工具,而是控制面板。
1.2 飞书在接入中充当什么角色
飞书在整体架构里承担了三层角色。第一层是消息入口:用户直接在飞书群里 @机器人,或者私聊机器人,所有指令都通过飞书开放平台的事件订阅推送给你配置的 OpenClaw 服务。第二层是可交互的输出界面:飞书机器人可以发送交互式卡片,卡片上能带按钮、下拉框、日期选择器,用户点一下按钮,卡片回调事件又会传回 OpenClaw,这样就能实现“点按钮完成任务”的操作闭环。第三层是业务数据底座:飞书多维表格、飞书云文档、待办接口都可以被 OpenClaw 调用,这就让机器人的权限范围从“聊天”扩展到了“改表格、建待办、发通知”,真正进入工作流内部。
很多团队之前也想做自动化,但卡在“没有合适的控制中枢”。自研一个企业内部机器人,要处理消息加解密、事件回调、权限体系,开发成本不低。直接用别人现成的 SaaS 机器人,又没法满足定制需求。OpenClaw 接飞书就是中间路线:飞书负责渠道,OpenClaw 负责理解和执行,你只需要写技能逻辑,不用重复造轮子。
1.3 适合哪些场景和人群
从实际落地看,这套组合最适合三类情况。第一类是数据运营团队:每天要把多维表格里的进展汇总出来发到群里,还要按不同项目维度筛选、统计,过去靠人肉复制粘贴,现在一条指令就能生成报表。第二类是运维值班人员:OpenClaw 配上 HTTP 技能后,可以直接对接内部监控接口,群里输入“查一下生产环境状态”就能得到实时反馈,省去登录跳板机的时间。第三类是敏捷项目组:利用飞书审批流和待办接口,机器人能根据消息内容自动创建任务卡片和审批请求,减轻项目经理的事务性负担。
如果你是个人开发者,只是想体验 Agent 自动化的乐趣,这套方案同样成立。飞书开放平台个人也可以创建企业自建应用。后面我会把每一步拆开讲,包括需要准备哪些东西、每个配置项到底填什么,尽量没有基础也能一步步做完。
2. 环境准备:先把运行底座搭稳
2.1 你需要准备哪些东西
在碰飞书开放平台之前,先把本机环境准备好。OpenClaw 是 Node.js 应用,所以第一件事是安装 Node.js。建议直接去官网下 LTS 版本,不要用尝鲜版,因为 OpenClaw 依赖较多,凡是遇到node: internal/modules/cjs/loader一类报错,大多和 Node.js 版本过新或过旧有关。我本机用的 Node.js 20 LTS 版本,全程没碰到兼容问题。
除了 Node.js,还要准备一个 HTTP 服务能访问到的地址。飞书事件订阅要求你的服务必须有公网可回调地址,或者至少在内网中能通过反向代理暴露出去。你可能会问:我本地开发,没有公网怎么办?最简单的方案是内网穿透,但要注意选择合规、稳定的服务;如果有云服务器,直接把 OpenClaw 部署在服务器上会更省心。生产环境我个人强烈建议用云服务器,因为飞书回调要求低延迟和稳定性,本地电脑关机后整个机器人就断了。
如果你在 Windows 上跑,还需要确认 WSL 环境是否正常。OpenClaw 的官方安装脚本在 Linux 环境下更顺滑,Windows 下通过 WSL 2 运行是主流选择。启动 WSL 前先打开 PowerShell 执行一下wsl --status,确认默认版本是 2,如果显示的是 WSL 1,需要升级内核。很多人报错“无法安全验证 WSL 环境”,大部分就是因为 Windows 版本太老导致 WSL 内核没更新。
2.2 三种安装方式怎么选
OpenClaw 的安装方式和 Node.js 项目类似,主要有三种路径。第一种是官方脚本一键安装,适合不想纠结细节的人,命令会在终端里自动拉取依赖;第二种是通过 npm 直接全局安装,适合后续想频繁更新或切换版本的开发者;第三种是 Docker 容器部署,适合已经有 Docker 环境的服务器,隔离性好,但需要额外处理端口映射和日志挂载。
| 安装方式 | 优点 | 缺点 | 适合人群 |
|---|---|---|---|
| 官方脚本 | 自动处理依赖 | 可定制性差 | 新手 |
| npm 全局安装 | 便于更新和回滚 | 需要手动装依赖 | 开发者 |
| Docker 部署 | 环境隔离,迁移方便 | 资源占用略高,需要学习 Docker | 服务器运维 |
我个人的建议是:如果你想赶紧看到效果,用官方脚本;如果你打算长期维护、以后还要加各种技能,就直接 npm 全局安装。Docker 方案不是不好,只是对飞书这种长连接和回调场景来说,端口映射和重启策略如果没有配置好,反而会让故障排查变得复杂。
2.3 安装过程中的环境坑
安装阶段最常见的三个问题,我依次说。一是权限不足,Linux 下如果直接用sudo安装,后续 OpenClaw 运行时产生的缓存文件可能因为没有写权限而报错。建议使用非 root 用户执行安装命令,或者安装完成后再授权目录。二是网络环境受限,npm 下载依赖时如果频繁超时,考虑更换 npm 镜像源。三是混合架构问题,例如在 Apple Silicon 的 Mac 上运行 x64 版本的 Node,部分原生模块会编译失败,需要使用 arm64 版本,这一点对做安卓 Termux 部署的人同样重要。
Termux 部署要额外说一句:OpenClaw 在 Termux 里跑通是可以的,但要先安装nodejs-lts和build-essential,否则 npm 编译原生模块会直接报错。安卓本身就是受限环境,目录权限和进程后台保活都需要额外处理,适合折腾型玩家,不适合作为团队生产方案。
3. 飞书开放平台配置:从零创建机器人
3.1 创建企业自建应用并开通机器人能力
飞书开放平台后台比较简洁,进入“开发者后台”后点击“创建企业自建应用”。这一步要选“企业自建”,不要选“商店应用”,因为后者上架审核流程复杂,而且机器人能力受平台限制。创建时填的应用名称会展示在群成员列表里,建议起一个一眼能认出来的名字,例如“OpenClaw助手”,头像也可以换成 OpenClaw 的图标。
创建完成后进入应用详情页,在“应用能力”里找到“机器人”并启用。启用机器人后,应用会自动获得一个机器人 ID,这个后续在 OpenClaw 配置中未必需要,但要在权限管理里注意区分“应用级别权限”和“机器人权限”。如果你的机器人需要在群里被 @,还要在“权限管理”中开通im:message、im:message.group_at_msg、im:chat等权限。不同版本的开放平台对权限名称略有差异,搜索“读取用户发给机器人的单聊消息”“读取群消息”“发送消息”这几个关键词就能找到对应开关。
注意:权限不是开通了就立刻生效。飞书开放平台会在修改权限后要求“创建版本并发布”,发布后权限才会真正落地。本地调试时虽然可以用测试企业,但正式群要用测试版还是正式版,需要提前规划好。
3.2 配置事件订阅与回调地址
机器人要收到消息,靠的是事件订阅机制。飞书在配置回调地址时,会先发送一个 URL 验证请求,你的服务必须正确响应才能保存。具体逻辑是:飞书 GET 请求你的回调地址,带上challenge参数,你的服务需要把challenge原样返回。这一步如果失败,页面会直接提示“请求地址验证失败”,很多接入问题都出在这。
在 OpenClaw 里,飞书适配器会自动处理 URL 验证,但你仍然需要先在开放平台把“事件订阅”里的请求地址填成http://你的域名:端口/feishu/event这样的路径。端口号要和 OpenClaw 配置的监听端口一致。我建议回调路径统一用/feishu/event,这样配置文件和事件订阅地址对应关系一目了然。
事件类型至少要订阅两个:im.message.receive_v1(接收消息)和card.action.trigger(卡片回调)。如果你之后要做多维表格联动,还需要订阅drive.file相关事件。订阅事件数量不是越多越好,每多一个事件,回调处理逻辑就多一分复杂度,建议按需开启。
3.3 拿到 App ID、App Secret 和加密密钥
这一步是连接飞书和 OpenClaw 的钥匙。在应用详情页的“凭证与基础信息”里,能看到 App ID 和 App Secret。App ID 是公开的,App Secret 要像密码一样保管,千万别提交到代码仓库。配置时还需要一个 Encrypt Key,在“事件订阅”页面底部开启“加密”后会生成。OpenClaw 和飞书之间的所有回调内容都会用这个 Key 做 AES 加密,配置错误的表现通常是回调时提示“解密失败”。
还有个容易混淆的概念是 Verification Token,很多旧教程会提到。新版飞书开放平台已经用 Encrypt Key 替代了大部分 “Verification Token” 场景,配置 OpenClaw 时以 Encrypt Key 为准。我见过不少人拿旧教程去填 token,结果一直报验签失败,排查半天才发现是字段名对不上。
4. 把 OpenClaw 和飞书真正连起来
4.1 一步步配置 config 文件
OpenClaw 的配置文件一般叫openclaw.json,放在初始化目录下。编辑这个文件前,先备份一份原始文件。重点配置飞书通道相关的几个字段:enabled设为true,appId填上面拿到的 App ID,appSecret填 App Secret,encryptKey填加密密钥,port填你希望 OpenClaw 监听回调的端口。
配置好后不要急着启动,先仔细检查 JSON 格式。很多人会犯的低级错误是字符串末尾多了一个逗号,导致整个配置加载失败。我建议用带语法检查的编辑器打开配置,保存后顺手node -e "JSON.parse(fs.readFileSync('openclaw.json'))"校验一下,免得启动时才发现格式错误。
4.2 启动 OpenClaw 并验证回调通路
启动命令是openclaw start,也可以加--verbose参数打开详细日志。启动后终端会打印监听端口和已加载技能列表。看到类似Feishu adapter started的输出,说明适配器正常运行。这时回到飞书开放平台事件订阅页面,点“重试”验证回调地址。如果 OpenClaw 正常运行,页面会提示验证成功。
先用私聊测试是最稳妥的。在飞书里找到刚才创建的机器人,给它发一句“你好”。正常情况下 OpenClaw 会回一条消息,说明消息链路已经通了。如果没反应,先看 OpenClaw 日志里有没有出现message.receive字样。有的话说明飞书推送到了服务端,问题出在回复环节;没有则说明事件订阅或权限有问题。
4.3 通过日志定位连通性问题
连通性问题的排查逻辑其实很简单:一层一层看消息流。飞书客户端 -> 开放平台 -> 你的服务器 -> OpenClaw -> 模型调用 -> 回复消息,这条链路中任何一环断了都会表现为“机器人不理人”。我总结了一个快速判断方法:先看飞书开放平台的“事件接收记录”,里面会记录每一次回调是否成功送达。如果这里显示成功,但 OpenClaw 日志没有对应记录,大概率是端口映射或路径配置不对。
如果日志里能看到消息内容,但 OpenClaw 没有回复,就要检查模型通道是否正常。可以用一个简单的测试技能,让它固定返回“OK”而不调用模型,这样就能确认是模型问题还是技能逻辑问题。实测下来很多“机器人不回复”的案例,最后都指向模型 API 配置失效,而不是飞书接入问题。
5. 实战玩法:把多维表格变成 OpenClaw 的“记忆库”
5.1 为什么我推荐用多维表格
应用场景里用得最多的是“把多维表格变成机器人的数据库”。飞书多维表格本身就是在线数据库,支持字段类型、视图筛选、自动化流程,而且有现成的开放 API。OpenClaw 不需要自己建数据库,只要配置好多维表格的 API 访问凭证,就能直接读写表格数据。
这种方案的好处是“人在哪个界面都能看见数据”。团队成员即使完全不懂 OpenClaw,也可以直接打开多维表格看数据、改内容。机器人在后台读写同一张表,两边数据完全同步,不会出现“ChatOps 里的数据只有机器人知道”的情况。相比之下,如果你把数据存到 OpenClaw 本地文件里,团队其他成员想查看就很麻烦。
5.2 用 Skill 封装表格读写逻辑
在 OpenClaw 里,表格读写要靠自定义 Skill 实现。一个 Skill 本质上是一个包含说明和代码执行逻辑的任务单元,OpenClaw 收到符合触发条件的内容后,自动运行这段逻辑。我建议先写一个“查询表格”技能:输入条件是表格 token 和视图 ID,输出是筛选后的记录列表。
从操作步骤来看,首先要在飞书开放平台申请多维表格权限,包括bitable:app和bitable:record权限;然后把 App ID 和 App Secret 用到获取 tenant_access_token 的请求中;最后用这个 token 调用多维表格 API。注意 token 有有效期,建议在 Skill 里加一层缓存逻辑,避免每次查询都重新获取。我这里给一个简单的 Node.js 伪代码示例,帮助理解调用链:
async function getBitableRecords(appToken, tableId) { const token = await getTenantAccessToken(); const url = `https://open.feishu.cn/open-apis/bitable/v1/apps/${appToken}/tables/${tableId}/records`; const resp = await fetch(url, { headers: { Authorization: `Bearer ${token}` } }); return resp.json(); }这个 Skill 跑通后,群里输入“查一下本周任务”这种指令,OpenClaw 就会去多维表格拉数据并格式化回复。相比纯聊天,这个能力让 OpenClaw 真正“碰得到数据”。
5.3 机器人把表格发送到群里
很多热词都在搜“飞书机器人发送表格”,这里有两种方式。第一种是发送文本摘要:OpenClaw 调用表格 API 拿到记录后,自己拼成文本或 Markdown 消息,适合数据量少、关注重点的场景。第二种是发送表格链接和附件:OpenClaw 可以直接发送多维表格链接,用户点开就能看到完整表格,适合数据量大、需要进一步操作的场景。
实际使用时我通常两者结合:OpenClaw 在消息里先发送几条关键数据的摘要卡片,同时附上多维表格链接。这样既能让群里人快速了解重点内容,又能保留完整数据的入口。发送多维表格链接时,注意链接权限要设置为“组织内可阅读”,否则别人点开会提示无权限。如果你需要机器人自动生成一个表格文件发到群里,可以调用飞书的电子表格 API 创建文件,再通过消息接口上传,这是另一个相对较重的方案,适合定期报表场景。
6. 进阶:卡片交互、审批流与多群协作
6.1 用交互式卡片实现“点一下完成任务”
做到这一步,OpenClaw 就不仅仅是被动问答了。飞书交互卡片支持按钮、日期选择器、下拉菜单等多种组件。OpenClaw 收到消息后,可以返回一个 JSON 卡片配置,让用户点击按钮确认。用户点按钮后,飞书把回调数据发回 OpenClaw,OpenClaw 根据按钮标识执行对应任务,再更新卡片内容。
实际部署中我做过一个“审批确认”的示例。群里有人说“发起采购申请”,OpenClaw 自动表单化消息内容,返回一张带“通过”和“拒绝”按钮的卡片。审批人点“通过”,回调事件触发 OpenClaw 去飞书审批接口提交审批流;点“拒绝”,则直接在卡片上标记原因。整套交互不需要额外开发前端页面,所有信息都在一张卡片里流转,效率提升非常明显。
卡片配置的一个大坑是“卡片签名校验”。飞书在回调时会把card.action.trigger事件加密发送到你的事件订阅地址,如果 Encrypt Key 配置不正确,卡片回调会直接解密失败。另一个坑是“按钮回传值长度限制”,不要在 button value 里塞太长的 JSON 结构,建议只放一个短的 action 标识,具体的数据通过后端查询获得。
6.2 接入审批流与待办接口
飞书开放平台提供了审批和待办接口,OpenClaw 可以通过这些接口把任务写入系统。比如机器人收到“帮我创建一个待办,明天上午十点提醒我”,OpenClaw 解析时间、任务内容,调用待办 API 创建记录。更进一步,可以监听多维表格里某个字段的变化,变化后自动创建审批流。这相当于把 OpenClaw 从“聊天问道”升级成了“工作流引擎”。
在实施之前,要明确一个边界:审批流涉及流程规范,如果一个操作要直接发起审批,权限控制非常关键。建议 OpenClaw 发起审批前先向用户确认一次,用消息卡片的方式让用户明确确认后再发起。这样即使解析词义出错,也不会产生无效审批单。
6.3 单机多群与权限隔离
一个 OpenClaw 实例可以同时服务多个飞书群,但要注意消息隔离。默认情况下 OpenClaw 会把所有群的消息交给同一个技能引擎处理,如果你希望不同群用不同的技能集,建议开启群组隔离配置。飞书回调事件里带有chat_id字段,OpenClaw 可以根据这个字段做路由分发,每个群对应一组技能。
权限隔离同样要重视。建议让 OpenClaw 根据open_id识别用户角色,配置一个“管理员白名单”,只有白名单成员能触发执行类技能,其他人只能查询。这个配置一定要提前做,因为一旦机器人有了“写表格”“发起审批”的能力,任何群里成员都能触发,后果可能很麻烦。安全意识的优先级必须高于自动化程度。
7. 常见问题与排查实录
7.1 OpenClaw 启动失败,终端直接报错
症状:执行openclaw start后提示缺少模块、配置解析失败或端口占用,OpenClaw 连日志都没打印。常见原因有三个:Node.js 版本过低、配置 JSON 格式错误、依赖没有完整安装。排查时先看报错堆栈的“关键字”,如果是Cannot find module,就重新执行npm install;如果提示listen EADDRINUSE,说明端口被占用,改配置里的端口即可;如果提示SyntaxError: Unexpected token,直接打开配置文件检查 JSON。
有些人在 Windows 下会遇到 Node.js 报 DLL 相关的错误,这通常和运行库有关。安装 Windows 桌面运行库后重启再试。如果你是通过 WSL 运行 OpenClaw,注意 WSL 里的 Node.js 和 Windows 本机的 Node.js 是两套环境,别配置混了。
7.2 飞书开放平台验证回调地址失败
症状:在飞书后台保存事件订阅地址时,提示“URL 验证失败”或“请求超时”。先确认 OpenClaw 已经启动,端口已监听;再确认回调地址能被公网访问,可以在浏览器直接打开回调地址看响应内容,如果显示 “ok” 或一段 JSON,说明服务可访问。如果内网能访问但公网不能,就是反向代理或安全组的问题,检查服务器防火墙是否放行了对应端口。
还有一个隐蔽问题:很多人在回调地址后面加了不正确的路径,比如/feishu/event/带斜杠结尾,飞书可能会 404。建议使用完全一致的路径,并在开放平台页面保存后立刻查看 OpenClaw 日志,看有没有收到验证请求。如果日志显示收到请求但响应格式错误,通常是 Encrypt Key 没配对或响应结构没按飞书要求返回。
7.3 机器人收到消息但不回复
这是接入后最让人抓狂的问题。按我的排查顺序,先看日志中是否出现message receive字样。没有出现,说明消息根本没送达到 OpenClaw,检查事件订阅是否包含im.message.receive_v1、应用是否已发布、机器人是否在群内、用户是否把机器人拉进群。如果日志有收到消息,但没触发技能,则检查技能描述是否和消息内容匹配,OpenClaw 的意图识别依赖技能说明,如果技能描述写得和触发词差别太大,就会匹配不上。
如果技能已经触发,但回复失败,也许是模型通道问题。我有一次排查了很久,最后发现是模型费用耗尽导致 API 返回 429。这类问题日志里通常会有明确的状态码,不会束手无策。最后还要注意飞书对消息发送频率和内容长度有限制,超长消息或高频发送会被限流。
7.4 多维表格数据乱码和重复发送
处理多维表格时比较常见的问题是“时区错乱”。飞书时间字段默认使用 UTC,如果 OpenClaw 所在的服务器时区配置不对,展示到表格里的时间就会差 8 小时。解决方法是统一在环境变量里设置TZ=Asia/Shanghai,在写入表格之前格式化时间字符串。还有一个问题是“重复发送”:技能在模型超时后自动重试,可能把同一条消息写入两次。解决办法是在 Skill 里加入“幂等性判断”,例如检查当前周期内有没有相同 content 的记录,有就直接跳过。
表格内容里如果包含大量文本,需要注意飞书 API 请求体长度限制。特别长的文本建议先存入云文档,再把云文档链接写入表格字段,避免单条记录过大导致保存失败。
8. 快速排查速查表
| 症状 | 可能原因 | 快速解决办法 |
|---|---|---|
| 回调地址验证失败 | 服务没启动 / 端口不通 / 路径不对 | 检查服务监听状态、防火墙、路径一致性 |
| 机器人不回复 | 事件订阅缺失 / 技能匹配失败 / 模型通道异常 | 看日志确认送达,逐段排查链路 |
| 解密失败 | Encrypt Key 配置错误 | 从开放平台重新复制密钥,重启 OPENCLAW |
| 权限不足 | 应用未发布新版本 | 发布版本后重试 |
| 表格时间差 8 小时 | 服务器时区为 UTC | 设置 TZ 环境变量 |
| 数据重复写入 | 技能重试机制导致 | 增加幂等性判断 |
| 卡片按钮无效果 | 卡片回调事件未订阅 / 签名校验失败 | 订阅card.action.trigger,核对加密配置 |
我相信很多人已经开始尝试把本地 Agent 接进 IM 工具,OpenClaw 加飞书是我目前用过最顺手的组合。整个接入过程真正繁琐的不是代码,而是把飞书开放平台的权限、事件、加密这三座大山翻过去。翻过去之后,你会发现本地 Agent 的能力边界一下子被撑开了:消息即指令,卡片即操作,表格即记忆。我个人的经验是先跑通最简单的“私聊回复”,再逐步加技能,不要一上来就上多维表格和审批流,否则排查问题时变量太多,很容易劝退。后面我再分享一套我写好的飞书多维表格 Skill 模板,感兴趣的可以先把环境搭起来,回头直接套用。