本地电脑安装openclaw踩坑记录:飞书websocket与ngrok/natapp内网穿透配置 1. 本地跑 openclaw 接飞书为什么 websocket 回调总是不通openclaw 是一个可以跑在本地电脑上的多频道机器人框架支持把飞书、Telegram、Discord 等聊天工具接到你自己的大模型或自动化流程上。它最大的好处是数据不出本机配置全在自己手里适合想折腾私有化机器人、又不想把对话内容交给第三方托管的开发者。但很多人第一次装完 openclaw、把飞书频道配好日志里却一直刷 websocket 连接失败或者飞书后台显示事件推送超时机器人发消息过去毫无反应。我一开始也卡在这里。openclaw 版本 3.8飞书频道配置写好了connectionMode设成webhookdomain设成feishu本地openclaw start也能跑起来但飞书那边就是收不到回调。翻日志才明白飞书的事件订阅是服务端主动推送它需要从公网访问到你的回调地址。而你的 openclaw 跑在本地电脑上IP 是192.168.x.x或者127.0.0.1飞书的服务器根本够不着。这不是 openclaw 的 bug是网络拓扑决定的。所以核心矛盾就一句话本地服务没有公网入口飞书推不进来。解决办法是用内网穿透工具把本地的3030端口映射成一个公网可访问的地址再把这个地址填到飞书开放平台的事件订阅里。市面上常用的两种方案是 ngrok 和 natapp前者国际通用、免费版有随机域名后者国内节点多、延迟低、免费版给固定二级域名。这篇就把这两种方案的配置差异、openclaw 的配置文件片段、飞书事件订阅参数以及回调连通性的逐步验证清单全部梳理一遍你照着做基本能一次跑通。需要说明的是内网穿透只是把本地端口暴露出去openclaw 本身还是跑在你自己的电脑上模型调用、数据存储都在本地。如果你后面想让 openclaw 调用大模型 API可以用 TaoToken 这类兼容 OpenAI 协议的中转服务把 Base URL 指向https://taotoken.net/apiKey 在控制台生成模型 ID 按需选这样本地机器人就能直接对话了。下面先讲前置准备再讲两种穿透方案的完整配置。2. 前置准备openclaw 安装、飞书应用创建与 TaoToken Key 获取在配穿透之前有三样东西要先备齐openclaw 本体、飞书自建应用、以及一个可用的大模型 Key。这三样缺一个后面回调通了机器人也回不了话。openclaw 的安装按官方文档走即可Node.js 环境建议 18 以上。装完后用openclaw --version确认版本我这边是 3.8。首次运行会在用户目录下生成配置文件夹Windows 一般在C:\Users\你的用户名\.openclaw\macOS/Linux 在~/.openclaw/。配置文件通常是config.json或config.toml具体看你安装方式本文以 JSON 为例路径和字段名保持一致即可。飞书这边去飞书开放平台创建一个「企业自建应用」拿到App ID和App Secret。然后在「事件订阅」页面你会看到两个关键东西一个是Verification Token校验令牌一个是Encrypt Key加密密钥可选。这两个值要填到 openclaw 的飞书频道配置里。事件订阅的「请求地址」就是后面穿透工具给你的公网 URL 加上 webhook 路径比如https://xxxx.ngrok.io/webhooks/feishu。注意飞书要求这个地址能在 3 秒内返回 challenge 校验所以 openclaw 必须先跑起来、穿透必须先通再去点飞书的「保存」。大模型 Key 这块如果你用 TaoToken流程是打开https://taotoken.net/api-keys带 UTM 的完整链接是https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi_keysutm_campaignrewrite注册登录后在控制台生成一个 API Key。Base URL 填https://taotoken.net/api这个地址不加 UTM。模型 ID 可以在模型对话页面先试一下确认哪个模型可用再填到 openclaw 的模型配置里。这样你的本地机器人就有对话能力了。把这三样备齐后我们进入正题先配 ngrok再配 natapp对比两者的差异。2.1 ngrok 方案authtoken 获取与 3030 端口映射ngrok 的用法很直接。去 ngrok 官网注册账号登录后在 dashboard 里找到 Your Authtoken复制下来。然后下载对应系统的 ngrok 可执行文件Windows 是ngrok.exemacOS/Linux 是ngrok。第一次用要先绑定 authtokenngrok config add-authtoken 你的authtoken字符串绑定成功后启动穿透把本地 3030 端口暴露出去ngrok http 3030运行后终端会显示一个 Forwarding 地址类似https://a1b2-123-45-67-89.ngrok-free.app - http://localhost:3030。这个https://开头的地址就是你的公网入口。免费版每次重启域名会变所以每次重启 ngrok 后都要回飞书后台更新请求地址这点比较烦。付费版可以固定域名。ngrok 免费版还有个坑首次访问会弹一个浏览器警告页飞书的服务器请求时可能被这个页面拦截导致校验失败。解决办法是在请求头里加ngrok-skip-browser-warning但飞书后台没法加自定义头所以更稳妥的做法是升级付费版或者改用 natapp。这也是我后来换 natapp 的原因之一。2.2 natapp 方案国内节点、固定二级域名与启动命令natapp 是国内的内网穿透服务注册后实名认证然后在「我的隧道」里购买或领取一个免费隧道。免费隧道给的是一个固定的二级域名比如http://xxxx.natappfree.cc重启不变这点比 ngrok 友好。购买隧道时要选协议类型web 服务选「web」本地端口填3030。natapp 也需要 authtoken在隧道详情页能看到。下载 natapp 客户端后启动命令是natapp -authtoken你的authtokenWindows 下是natapp.exe -authtoken你的authtoken。运行后终端会显示Tunnel established和你的公网地址。注意 natapp 免费版给的是http地址飞书事件订阅要求https所以要么用 natapp 的付费 https 隧道要么在飞书后台填http地址试试部分场景飞书允许 http但生产环境建议 https。我实测免费版 http 地址在飞书事件订阅里能通过校验但飞书会提示不安全能用但不推荐长期用。两种方案对比一下对比项ngroknatapp域名稳定性免费版每次重启变免费版固定二级域名节点位置国外为主国内节点多协议支持https 免费https 需付费首次访问警告页有可能拦截飞书校验无启动命令ngrok http 3030natapp -authtokenxxx适合场景临时调试、国际网络国内长期挂机选哪个看你的网络环境和预算。国内用户长期挂机natapp 更省心临时调试、能接受域名变化ngrok 更快上手。3. 可复制配置openclaw 飞书频道 config.json 与穿透参数对照这一节是重点直接给可复制的配置片段。openclaw 的配置文件路径Windows 是C:\Users\你的用户名\.openclaw\config.jsonmacOS/Linux 是~/.openclaw/config.json。如果你用的是 TOML 格式字段名一样只是语法不同下面以 JSON 为准。飞书频道的配置片段如下注意webhookHost必须填0.0.0.0不能填127.0.0.1。原因是你用 natapp 或 ngrok 暴露的是本地 3030 端口穿透工具从外部转发进来的请求源地址不是本机回环如果 openclaw 只监听127.0.0.1外部转发进来的连接会被拒绝。填0.0.0.0表示监听所有网卡穿透工具才能把请求送进来。这是我最开始踩的坑日志里一直显示连接被拒改成0.0.0.0后立刻通了。{ channels: { feishu: { enabled: true, connectionMode: webhook, domain: feishu, appId: cli_你的AppID, appSecret: 你的AppSecret, verificationToken: 你的VerificationToken, encryptKey: 你的EncryptKey, webhookHost: 0.0.0.0, webhookPath: /webhooks/feishu, webhookPort: 3030 } }, models: { default: { provider: openai-compatible, baseUrl: https://taotoken.net/api, apiKey: 你的TaoTokenKey, model: 你的模型ID } } }几个字段说明一下。connectionMode设成webhook表示用 HTTP 回调模式不是长连接模式。webhookPath是/webhooks/feishu这个路径要和飞书后台请求地址的路径部分完全一致。webhookPort是 3030穿透工具映射的也是这个端口。appId、appSecret、verificationToken、encryptKey都从飞书开放平台拿。飞书后台的事件订阅参数这样填请求地址https://你的穿透域名/webhooks/feishungrok 用 https 地址natapp 免费版用 http 地址Verification Token和配置文件里的verificationToken一致Encrypt Key和配置文件里的encryptKey一致订阅事件至少勾选「接收消息」相关事件比如im.message.receive_v1填完后先别急着保存因为飞书会立即发一个 challenge 校验请求到你的地址。所以顺序是先启动 openclaw再启动穿透确认本地 3030 能访问最后回飞书点保存。启动 openclaw 的命令openclaw start看到飞书频道显示running就说明本地服务起来了。这时候用浏览器访问http://localhost:3030/webhooks/feishu如果返回 405 或 400 之类的错误说明服务在监听只是 GET 方法不对这是正常的。如果连接被拒说明 openclaw 没起来或者端口不对。穿透启动后用浏览器访问你的公网地址加路径比如https://xxxx.ngrok.io/webhooks/feishu应该也能看到同样的响应。如果看到 ngrok 的警告页说明被拦截了换 natapp 或升级 ngrok。如果看到 natapp 的欢迎页说明隧道没配对检查 authtoken 和端口。4. 验证请求从飞书 challenge 校验到配对码 approve 全流程配置填完接下来是验证。这一步要按顺序来跳步容易乱。第一步确认 openclaw 本地服务在跑。终端里openclaw start的输出应该显示飞书频道running。如果显示error或disconnected先解决本地问题别急着配穿透。第二步确认穿透隧道通了。ngrok 终端显示 Forwarding 地址natapp 显示 Tunnel established。用 curl 或浏览器访问公网地址加/webhooks/feishu能收到响应哪怕是错误码就说明转发通了。第三步回飞书开放平台在事件订阅页面填请求地址点保存。飞书会立即发 challenge 校验。如果配置正确页面会提示「保存成功」如果失败会提示「请求地址校验失败」这时候去看 openclaw 的日志通常能看到收到的 challenge 请求和返回内容。常见失败原因是路径不对、端口不对、或者 openclaw 没监听0.0.0.0。第四步校验通过后在飞书里给机器人发一条消息。这时候 openclaw 日志会显示收到消息但机器人可能回复一段提示OpenClaw: access not configured. Your Feishu user id: 5f98c4c Pairing code: XXXXXXXX Ask the bot owner to approve这是 openclaw 的安全机制默认不允许未配对的用户使用机器人。你需要拿到这个 Pairing code在命令行里执行配对openclaw pairing approve feishu 5f98c4c注意这里的5f98c4c是你的飞书 user id不是 pairing code命令格式是openclaw pairing approve feishu user_id。执行后会提示配对成功。然后再给机器人发消息这次就能正常对话了。第五步验证模型调用。发一句「你好」如果机器人回复正常内容说明 openclaw 到 TaoToken 的模型调用也通了。如果回复报错检查baseUrl是不是https://taotoken.net/apiapiKey是不是正确model是不是可用。可以先去模型对话页面确认模型 ID 拼写。整个验证清单可以浓缩成一张表步骤检查项预期结果1openclaw start飞书频道 running2访问 localhost:3030/webhooks/feishu有响应非连接拒绝3访问公网地址/webhooks/feishu有响应非警告页4飞书后台保存请求地址提示保存成功5飞书发消息收到 pairing code 提示6openclaw pairing approve feishu user_id配对成功7再发消息正常对话回复按这个顺序走基本不会卡住。如果某一步失败看下一节的排查对照。5. 常见报错排查401、local proxy failed、reading choices、OAuth 对照这一节把我在配 openclaw 飞书 websocket 回调过程中遇到的真实报错列出来对照解决。报错一websocket 连接失败 / connection refused日志里出现websocket connection failed或dial tcp 127.0.0.1:3030: connect: connection refused。原因通常是webhookHost填了127.0.0.1穿透工具转发进来的请求被拒。改成0.0.0.0即可。另外确认 openclaw 真的在跑端口没被占用。报错二401 Unauthorized调用模型时返回 401说明 API Key 不对或没带上。检查apiKey字段是不是完整的 TaoToken KeybaseUrl是不是https://taotoken.net/api注意结尾不要多加/v1除非文档明确要求。如果 Key 刚生成确认没有多余空格。报错三local proxy failed穿透工具报local proxy failed或dial tcp 127.0.0.1:3030: connect: connection refused。这是穿透工具连不上本地端口。检查 openclaw 是否在 3030 端口监听用netstat -ano | findstr 3030Windows或lsof -i:3030macOS/Linux确认。如果端口被别的程序占用改 openclaw 的webhookPort和穿透工具的映射端口两边保持一致。报错四reading choices / cannot read property choices模型返回格式解析失败日志里出现reading choices或undefined is not an object。这通常是模型 ID 填错或者 Base URL 指向了一个不兼容 OpenAI 格式的接口。确认model字段是 TaoToken 支持的模型 IDbaseUrl是https://taotoken.net/api。可以先用 curl 直接测一下curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer 你的Key \ -H Content-Type: application/json \ -d {model:你的模型ID,messages:[{role:user,content:hi}]}如果 curl 返回正常 JSON说明 Key 和模型没问题问题在 openclaw 配置如果 curl 也报错先解决 Key 或模型 ID。报错五OAuth / token 获取失败飞书频道报 OAuth 相关错误或者tenant_access_token获取失败。检查appId和appSecret是否正确飞书应用是否开启了机器人能力权限是否勾选了「获取与发送单聊、群组消息」。飞书自建应用需要在「权限管理」里添加im:message、im:message:send_as_bot等权限然后发布版本、等待审核通过。没发布的应用事件订阅和消息收发都不生效。报错六飞书 challenge 校验失败飞书后台保存请求地址时提示校验失败。检查请求地址路径是不是/webhooks/feishu和配置文件webhookPath一致协议是 https 还是 http和穿透工具给的地址一致openclaw 是否在跑穿透是否通。如果用的是 ngrok 免费版可能是警告页拦截换 natapp 或加ngrok-skip-browser-warning头但飞书后台加不了头所以换工具更实际。报错七配对码无效执行openclaw pairing approve feishu user_id提示无效。确认user_id是消息里显示的Your Feishu user id不是 Pairing code。命令格式是openclaw pairing approve feishu 5f98c4c中间是空格不是冒号。把这些报错对照一遍基本能覆盖 90% 的卡点。剩下的看日志openclaw 的日志会打印具体错误堆栈按堆栈定位。6. 跑通之后把 openclaw 接到 TaoToken 做长期编码助手回调通了、配对过了、模型也能回话了这套本地 openclaw 飞书机器人就算跑起来了。接下来你可以把它当成一个常驻的编码助手在飞书里发代码片段让它解释发报错让它排查或者接上 Coding Plan 做长期的 Agent 任务。TaoToken 的 Coding Plan 适合这种长期挂机的场景按量或包月都行具体在https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding_planutm_campaignrewrite看。如果你还想接 Claude Code 这类工具TaoToken 也提供了 Anthropic 兼容的接入方式文档在https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite。openclaw 这边只要把baseUrl和model换一下就行Key 还是同一个。最后提醒几个实操细节。natapp 免费版隧道有并发和流量限制长期挂机建议买付费隧道ngrok 免费版域名会变每次重启记得更新飞书后台地址。openclaw 的配置文件改完要重启才生效openclaw restart或先 stop 再 start。飞书应用改权限后要重新发布版本否则新权限不生效。配对是一次性的配对过的用户后续直接发消息即可不用重复 approve。这套方案跑通后你的本地电脑就是一个私有化的飞书机器人数据不出本机模型调用走 TaoToken穿透走 natapp 或 ngrok各环节解耦哪块出问题查哪块。回调不通先查webhookHost是不是0.0.0.0再查穿透是不是通最后查飞书后台地址对不对按这个顺序排基本不会绕弯路。