事情得从上周说起。OpenClaw 已经在我 Windows 机器上跑了好几天,命令行里问它问题、让它整理资料都挺顺手,但每次都得切回终端窗口,确实憋屈——白天在工位还好,一离开电脑就彻底断了。后来我琢磨着给它接个飞书机器人,让它住进飞书群,同事@一下就能用,手机上也随时能问,文件直接拖进会话里让它处理。想法很好,实际折腾了一整天,踩了一堆坑,从 Windows 环境部署、飞书开放平台后台配置、事件订阅、消息收发,到本地 Ollama 模型接入、手机 Termux 上跑,全捋了一遍。这篇教程就是按我跑通的路径写的,照着做,别跳步骤,基本能一次成功。
1. 先搞清楚一件事:OpenClaw 和飞书机器人之间到底怎么通信
1.1 整体架构其实只有三层
很多人一上来就急着装软件,结果装完发现机器人和 OpenClaw 各说各话,根本连不上。原因很简单:你还没搞明白这三个角色各干什么。
- 飞书机器人:本质是飞书开放平台上创建的一个"应用"。它不是独立程序,你的消息发到它那里,它只是把消息转发给一个后台服务。
- OpenClaw:真正干活的 Agent。它收到消息后调用模型做推理、调用工具执行操作,再把结果吐给机器人去展示。
- 模型:OpenClaw 不负责思考和生成内容,它只是一个调度器。你既可以用云厂商的 API 模型,也可以用本地 Ollama 跑的模型,这部分后面会专门说。
用大白话讲:飞书机器人是前台接待,OpenClaw 是办公室里的执行人,模型是执行人的脑子。前台接到客户问题,转给执行人,执行人想清楚再让前台回复。
1.2 事件订阅:选长连接还是 webhook
这是新手最容易卡住的地方。飞书机器人接收消息有两种方式:一种是你在开放平台后台填一个公网回调地址,飞书把消息 POST 到这个地址上,这叫 webhook 模式;另一种是机器人主动和飞书服务器建立一条长连接(WebSocket),飞书有消息直接推过来,这叫长连接模式。
我的建议是:个人开发、公司内网环境,优先选长连接。原因很直接——webhook 模式要求你的 OpenClaw 进程能被公网访问到,家里宽带没有公网 IP 的话,还得搞内网穿透那一套,既麻烦又不稳定。长连接模式是机器人主动往外连,电脑只要能正常上网就行,不需要任何公网端口。飞书开放平台在创建应用时也支持选择"使用长连接接收事件",非常省事。
1.3 权限和安全边界
飞书机器人不是开了就能随便收发消息的。你在后台必须给应用开权限,常见的有im:message(发送消息)、im:message.p2p_msg:readonly(读取单聊消息)、im:message.group_at_msg:readonly(读取群聊中 @ 机器人的消息)。这些权限不开,后面消息要么收不到,要么发不出去,而且飞书报错提示往往很模糊,容易让你误以为是代码问题。
安全方面要注意一点:App Secret和Encrypt Key等同于是机器人身份的钥匙,谁拿到谁就能冒充你的机器人发消息。配置进 OpenClaw 的配置文件后,这个文件不要提交到 Git 仓库,也不要截图发群里。我见过不止一个人把 Secret 贴在飞书群里问为啥报错,然后整组人都能用他的机器人发消息,场面一度非常尴尬。
2. 环境准备:Node.js、WSL2 和那个报错的真正解法
2.1 Node.js 版本别乱装
OpenClaw 的核心跑在 Node.js 上,这一步最不起眼但也最容易埋雷。去 Node.js 官网下载 LTS 版本就行,我装的是 20.x,实测很稳。装完之后在 PowerShell 里验证:
node -v npm -v如果你机器上原来装过旧版 Node,建议先卸干净再装新的,不然可能出现 npm 全局包路径混乱的问题。另外,不要图省事直接装最新 Current 版,有些依赖对最新版支持不及时,装 OpenClaw 的时候容易编译报错。
2.2 "无法安全验证 WSL2 环境":这个报错我帮你们趟过了
很多网上的 OpenClaw 教程都要求先在 Windows 上配好 WSL2,然后跑wsl --status检查环境。我最初就是在这里卡死的,报错信息写得很吓人——OpenClaw 提示无法安全验证 SL2 环境,让我在 PowerShell 里运行wsl --status。
实际上这个问题 90% 不是 OpenClaw 的问题,而是你的 WSL 压根没初始化好。排查步骤很简单:
wsl --status如果提示没有已安装的分发版,或者版本是 WSL1,那就需要升级:
wsl --update wsl --set-default-version 2然后安装一个分发版:
wsl --install -d Ubuntu-22.04装完之后重启一次终端,再跑wsl --status,看到"默认版本:2"基本就稳了。这里分享一个实操心得:OpenClaw 在 Windows 上检测 WSL2,主要目的其实是确认它能调用 WSL 内部的一些命令工具。如果你只是想让飞书机器人跑基本对话,不涉及文件系统跨 WSL 操作,这个警告有时候不影响使用,但保险起见还是配好,因为后面一些 Skill 会依赖它。
2.3 Ollama 要不要提前装
如果你打算用本地模型,这一步建议先装 Ollama。官网下载 Windows 版安装包,装完它会在后台自动跑服务,默认端口11434。验证方式:
ollama list能列出模型列表就说明服务正常。先拉一个模型备用,我常用的是qwen2.5:7b,尺寸和效果比较均衡:
ollama pull qwen2.5:7b如果你机器配置一般,可以先装qwen2.5:3b,跑飞书群里那些日常问答完全够用。这一步先装好,第五章节配置的时候能省不少时间。
3. 在 Windows 上安装并初始化 OpenClaw
3.1 下载安装包还是用 npm
OpenClaw 的安装方式有两种:一种是从官方仓库的 releases 页面下载 Windows 安装包,双击安装;另一种是用 npm 全局安装核心 CLI。我的建议是:新手直接下载安装包,别折腾源码编译。
我用的是这种方式下载的版本是 0.6.x,安装完成后在 PowerShell 里执行:
openclaw --version能打印出版本号就说明装好了。如果你更习惯用包管理器,也可以:
npm install -g openclaw两种方式本质一样,选一种就行,不用都装。
3.2 初始化配置:先让它在本地跑起来
安装完先初始化一份配置。执行:
openclaw init它会生成一个配置文件,通常在你的用户目录下的.openclaw/config.yaml(不同版本文件名可能略有差异)。第一次生成时里面内容很少,不要太惊讶。这时候先配置一个模型,让 OpenClaw 至少能自己说话。如果用云 API,在配置文件里加:
model: provider: openai-compatible base_url: "https://api.example.com/v1" api_key: "sk-xxxxxxxx" model_name: "gpt-4o-mini"如果你走本地 Ollama,则是:
model: provider: ollama base_url: "http://127.0.0.1:11434" model_name: "qwen2.5:7b"配置完保存,然后在终端跑:
openclaw run如果看到模型正常加载、没有报错,就说明 OpenClaw 本体已经活了。这一步的目的很简单:先确认它自己会思考,再考虑接入飞书。不然飞书都连好了,结果模型没配对,机器人就像个空壳,一问三不知。
3.3 Windows Companion 是什么,要不要管
如果你是 Windows 用户,安装包里通常还会带一个叫 Windows Companion 的组件。我的理解是,它负责 Agent 调用 Windows 桌面能力的配合部分,比如系统托盘、剪贴板、本地通知这些。OpenClaw 默认会尝试连接它,路径一般在配置文件里的companion节点。
配置方式很简单:
companion: enabled: true host: "127.0.0.1" port: 8739如果你不需要 Agent 操作本机桌面,可以先enabled: false,不影响飞书功能。但如果你想让机器人帮你定时打开某个软件、读取剪贴板内容,那这个必须开着。注意:Companion 和 OpenClaw 主程序要放在同一台机器上,因为它监听的是本地端口,跨机器访问需要额外配置网络白名单,一般没必要。
4. 飞书开放平台后台配置:创建一个真正的机器人
4.1 创建企业自建应用
登录飞书开放平台(open.feishu.cn),进入开发者后台,点"创建应用",选"企业自建应用"。名字随便起,我起的是"得力助手",图标随便传一个。创建完成后,你会进入应用详情页,这里就是整个机器人的大本营。
这里有一个很多人忽略的点:应用创建后默认是"未发布"状态,只有你自己和少数测试成员能用。如果想让整个部门都能在搜索里找到它、在群里@它,需要走一遍发布审核流程。个人测试阶段用"未发布"完全够,别急着发布,等功能稳定了再说。
4.2 添加机器人能力和事件订阅
在应用详情页左侧菜单找到"添加应用能力",添加"机器人"。添加完成后,应用就具备了一个机器人的基本身份。
然后进入"事件与回调"页面,这一步非常关键。订阅事件选择im.message.receive_v1(接收消息),这是机器人能不能收到用户消息的核心开关。如果你连的是长连接模式,这里要选择"使用长连接接收事件",然后点保存。
事件订阅这里有几个坑,我一个个说:
- 如果你选了 webhook 模式,必须填一个公网可达的地址,并且要能在飞书的"URL 验证"环节返回
challenge字段。OpenClaw 如果支持 webhook 模式,一般会自动处理验证,但前提是你的地址能通。 - 长连接模式虽然不用填公网地址,但要求你的应用开启"长连接"开关,有些版本还在"事件订阅"旁边多一个"连接方式"选项,别漏了。
- 事件订阅列表里只加你真正需要的事件,加多了会增加消息推送量,也可能导致安全问题。
4.3 获取凭证与安全设置
保存完事件订阅,去"凭证与基础信息"页面,能看到两个关键东西:
- App ID:格式是
cli_开头的一串字符,相当于应用的用户名。 - App Secret:相当于密码,点"重置"可以重新生成。
同时在"事件与回调"页面可以看到Verification Token和Encrypt Key。这四个值,是 OpenClaw 和飞书对接的全部凭据。把它们记下来,一会儿配置要用。
安全设置上,建议打开"IP 白名单"(如果 OpenClaw 部署在固定 IP 的机器上),并且把Encrypt Key开着。开启加密后,所有事件消息都会用 AES 加密传输,OpenClaw 需要配置相同的 Key 才能解密。多一层加密多一点安心,代价只是配置时多填一个值,值。
5. 把 OpenClaw 和飞书机器人接起来
5.1 配置 App ID、App Secret 和事件回调
OpenClaw 的配置文件里一般有feishu或channels.feishu节点,把刚才拿到的四个值填进去。下面是我这边能跑通的示例:
channels: feishu: enabled: true app_id: "cli_xxxxxxxxxxxxxxxx" app_secret: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" encrypt_key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" verification_token: "xxxxxxxxxxxxxxxx" event_mode: "websocket" receive_event: "im.message.receive_v1"几点说明:
app_secret和encrypt_key如果填错,最常见的表现是:日志里能收到推送但解密失败,报invalid signature或decrypt failed。别慌,先检查这两个值是否和后台一致,尤其注意复制的时候别多复制了空格或换行。event_mode必须是websocket,如果你选 webhook,则要改成webhook并额外配一个callback_url。我是长连接派,所以全文按 websocket 走。- 如果你的 OpenClaw 版本配置项命名略有不同,比如叫
feishu_bot,以你实际版本生成的模板为准,字段含义是等价的。
5.2 启动和联调:第一次在飞书里收到回话
配置保存后,重启 OpenClaw:
openclaw run看到日志里有类似feishu bot connected或websocket connected的输出,说明长连接已经建立。这时候打开飞书,找到你的机器人,给它发一句"你好"。正常的链路是:消息发到飞书 → 飞书通过长连接推给 OpenClaw → OpenClaw 调模型思考 → 返回结果 → 飞书展示回复。
我第一次跑通时,机器人回了句"你好呀,有什么可以帮你?",那一刻真的有点小激动。如果你发消息后机器人毫无反应,先不要怀疑代码,先怀疑三点:事件订阅没保存、长连接没连上、权限没开全。依次排查,基本能定位。
5.3 联调中最容易翻车的三个场景
第一个是群聊场景。机器人默认不会响应群里所有消息,只有在群里被 @ 的时候才会收到事件(除非你额外开通了读取全部群消息的权限,不建议)。测试时记得在群里 @它,不要干等它自己说话。
第二个是消息超时。本地 7B 模型在 CPU 机器上推理可能要几十秒,飞书那边如果等太久可能会认为是超时。实测下来,OpenClaw 对长耗时任务会把"正在处理"的状态先回给用户,或者通过异步方式处理,体验还算能接受。如果你发现消息经常丢,可以考虑换更小的模型,或者把思考过程缩短。
第三个是重复回复。有段时间我的机器人一句话回两遍,排查了半天发现是我开了两个openclaw run进程,两个进程都在收同一个长连接事件。记住:长连接模式下,一定只保留一个运行实例。这也是新手很容易犯的错——开着测试窗口忘了关,又新开一个窗口跑。
6. 实测场景:让机器人在飞书里真正干点活
6.1 文本对话与角色设定
接好之后,OpenClaw 在飞书里就是一个能对话的 Agent。你可以通过配置文件给 AI 设定人设,让它在群里更符合你的工作场景。比如我给它设定的是"擅长数据整理和写作的助手,回复简洁直接",这样它在飞书里的回复不会长篇大论刷屏。
实际感受:单聊模式下,对话体验最好。因为群聊要每次都 @ 它,对话连贯性会差一些,而且群成员都能看到内容,有些涉及内部信息的提问不合适。我的建议是:日常提问用单聊,团队协作场景再拉进群里。
6.2 让机器人发一张表格
"飞书机器人发送表格"这个需求,我猜很多人都会遇到,毕竟工作里表格是刚需。OpenClaw 发表格基本有两条路:
第一条路,让模型把数据整理成 Markdown 表格,用交互卡片(interactive card)发出来。飞书对 Markdown 表格的渲染很漂亮,直接就是一条带表格的卡片消息,适用数据量不大的场景。我给机器人发一句"把本周任务整理成表格",它给我返回一张四列十几行的卡片表格,群里看着特别正规。
第二条路,数据量大或者对方需要二次编辑时,就让 OpenClaw 生成 CSV 或 XLSX 文件,然后通过飞书文件上传接口发到会话里。飞书的上传接口是:
POST https://open.feishu.cn/open-apis/im/v1/files传参格式是表单数据,file_type填stream,file_name填文件名,file是文件内容。OpenClaw 内置的文件发送工具封装的就是这个接口,你只需要在配置里允许它调用文件工具即可。实测发 CSV 文件给同事,对方在飞书里能直接预览,体验很好。
6.3 和飞书多维表格的结合
如果不想发文件,还有一个进阶玩法:让 OpenClaw 直接往飞书多维表格里写数据。你需要在开放平台额外开通多维表格的权限(bitable:app),并把表格的app_token和table_id配给它。这个适合做数据看板场景,比如机器人每天自动把运行指标写入表格。不过这一步涉及的权限较多,建议等基本功能跑稳之后再折腾。
7. 更省算力的玩法:接入本地 Ollama 模型
7.1 "OpenClaw 只能用 API 接算力吗"——这是误会
网上老有人问 OpenClaw 是不是只能通过 API 方式使用算力,我最初也这么以为,后来搞明白了:OpenClaw 本身是 Agent 调度框架,不内置模型,所以它必须有一个"模型来源"。模型来源无非两类:云端 API(各家大模型厂商)和本地推理(Ollama、llama.cpp 这类)。所以答案很明确:不是只能用 API,本地推理完全支持,而且我推荐个人使用优先考虑本地。
本地跑的好处是隐私性好,消息不出你机器;坏处是速度取决于硬件。我的主力机器是 16G 内存、无独立显卡的轻薄本,跑qwen2.5:7b的 CPU 推理速度大约每秒 5-8 个 token,对话短还好,长文本会明显感觉到"打字慢"。后来换成qwen2.5:3b,流畅度提升明显,日常对话足够。
7.2 在 OpenClaw 里配置 Ollama
配置方式前面提到过,展开说一下。首先确保 Ollama 在后台运行:
ollama serve然后 OpenClaw 配置里指定:
model: provider: ollama base_url: "http://127.0.0.1:11434" model_name: "qwen2.5:3b" temperature: 0.7 max_tokens: 2048temperature控制随机性,工作场景我一般调到 0.7 以下,太放飞会经常给你编内容。max_tokens控制单次回复长度,飞书场景 2048 够用,太长卡片消息展示也很累。
这里有一个经验:如果你同时配了云 API 和本地 Ollama,OpenClaw 一般支持按渠道或按任务分流。比如复杂任务走云 API,日常闲聊走本地模型。不同版本配置方式可能不一样,但思路是对的——能省则省。
7.3 什么时候还是得用 API
本地模型也有明显的天花板。让它整理内部文档、做格式转换、提取表格数据,7B 模型完全够用;但让它写复杂代码、做长文写作、处理逻辑链很长的推理任务,本地小模型就容易"一本正经地胡说八道"。我的做法是:飞书机器人默认走本地模型,省成本;真遇到复杂任务,我在配置里单独指定一个云模型渠道,手动切过去。
顺带说一句,如果你单位有内部部署的模型服务,只要接口兼容 OpenAI 格式,都可以通过openai-compatible方式接入 OpenClaw,不一定非要用公网大厂 API。
8. 进阶玩法:Skills 扩展和手机 Termux 部署
8.1 什么是 Skill,怎么装
Skill 是 OpenClaw 的可扩展能力包,相当于给 Agent 装插件。装一个"定时任务"Skill,它就能在飞书里说"每天早上九点提醒我开会";装一个"网页搜索"Skill,它就能帮你查资料并把链接甩到群里。
安装方式一般是把 Skill 放到 OpenClaw 的skills目录下,然后在配置里启用。以官方仓库下载的 Skill 为例:
skills/ schedule/ manifest.yaml main.py web-search/ manifest.yaml main.py配置文件里加一行skills_enabled: ["schedule", "web-search"],重启生效。这里必须提醒一句:Skill 是有代码执行能力的,别从不可信的第三方来源乱装。官方仓库和社区高星项目相对靠谱,陌生人私传的 Skill 压缩包,跑之前先打开代码看一眼,这是最基本的自我保护。
8.2 手机 Termux 上能不能装 OpenClaw
这个问题我也试过。Termux 是安卓上的终端模拟器,确实能装 OpenClaw,但你要明白一件事:手机端适合做"管理入口"和"轻量对话",不适合跑重活。手机上装 OpenClaw 主要分三步:
pkg update && pkg upgrade pkg install nodejs-lts git python npm install -g openclaw openclaw init装完之后,它和 Windows 上的几乎一样,可以配置模型和飞书。但有两个现实问题:一是安卓后台进程容易被系统回收,锁屏一会 OpenClaw 就被杀了,飞书机器人自然就失联;二是手机网络切换(WiFi 切流量)可能导致长连接断开,需要加自动重连机制。
我的建议是:主力还是放 Windows 或 Linux 机器上,手机 Termux 只做应急查看和简单操作。让一台电脑 24 小时跑 OpenClaw,手机作为飞书客户端来使用,体验远好于在手机上直接跑。
8.3 Windows Companion 的更多配置细节
如果你想让 OpenClaw 能操作本机软件,Windows Companion 值得认真配一下。除了前面说的enabled、host、port,Companion 一般还支持设置允许的自动化操作列表。我的经验是:能不开的权限尽量不开,能用 Skill 做的事不要让 Agent 直接点鼠标。因为自动化操作一旦失控,比如它自己打开浏览器乱跳、误删文件,代价可能比收益大得多。把 Companion 的能力限制在"剪贴板读写、系统通知、打开白名单应用"这三项,对我足够用了。
9. 踩坑记录与排查思路
9.1 启动时报 WSL 相关错误
如果你参考了某些教程,启动时看到:
OpenClaw 无法安全验证 sl2 环境,请在 PowerShell 中运行 wsl -- status按我之前说的,跑一遍wsl --status看看是哪个环节没到位。常见情况有三种:WSL 内核太旧(wsl --update解决)、没有默认分发版(wsl --install -d Ubuntu-22.04解决)、默认版本还是 1(wsl --set-default-version 2解决)。处理完重开一个 PowerShell 窗口再启动 OpenClaw,别在旧窗口里重试,因为 WSL 环境变量不会自动刷新。
9.2 消息收不到,先查事件订阅
我记得有一次折腾到凌晨,日志里什么错误都没有,OpenClaw 也显示连接正常,但飞书里发消息它就是不理人。后来才发现是事件订阅里im.message.receive_v1压根没保存上——后台页面有"添加"和"保存"两个按钮,我只点了添加没点保存。这种低级错误非常典型,排查顺序建议是:
- 检查开放平台后台"事件与回调"里的订阅列表,确认事件在列表里。
- 检查 OpenClaw 日志,看有没有收到推送记录(长连接模式下收到事件会打日志)。
- 检查机器人是否在群里有 @(单聊一般不用)。
- 检查权限列表是否包含读取消息相关权限。
9.3 日志怎么看才不头大
OpenClaw 的日志默认在用户目录下的.openclaw/logs/里,按天滚动。排查问题时不要从头翻到尾,直接用关键词过滤:
grep -i "feishu" ~/.openclaw/logs/xxx.log | tail -50重点关注几个关键词:connected(长连接状态)、receive(收到消息)、send(发出消息)、error、timeout。我处理问题时的习惯是:先在日志里确认"收没收到",再确认"发没发出去",就能快速把问题切到飞书侧还是 OpenClaw 侧。如果日志显示收到了但回复失败,那大概率是模型接口或权限问题;如果日志压根没收到,那问题出在飞书后台配置。
整套流程走下来,最花时间的其实就是后台权限和事件订阅那几步,代码层面反而很简单。我自己跑完之后的体会是:飞书机器人 + OpenClaw + 本地模型这套组合,最大的价值不是炫技,而是把原本锁在终端里的 Agent 能力真正搬到了日常聊天工具里——同事在群里 @ 一下就能用,我在地铁上也能让它整理思路、查资料。最后分享一个小建议:配置稳定之后,给 OpenClaw 配一个开机自启服务(Windows 上用计划任务或者 nssm 都行),别再用手工窗口跑,不然哪天重启电脑忘记拉起,飞书里的人还得跑过来问你"机器人怎么又死了"。