起因
想让飞书里"克劳德"这个自建应用能自动回复消息,找 Claude Code 生成了一个 bot.js,思路是:Express 起服务 → 订阅飞书消息接收事件 → 收到消息调用大模型生成回复 → 发回去。听起来是个很标准的闭环,实际操作下来,卡在了一连串环环相扣的小问题上,最后没跑通,先记录一下,以后有空再回来填坑。

踩过的坑,按顺序过一遍

  1. auto 模式卡死 一开始 Claude Code 用的是 auto 权限模式,写文件前会先调用一个安全分类器(deepseek-v4-pro)判断安全性,结果这个模型当时不可用,导致 Write 操作一直卡住重试。后来手动切回普通权限模式解决。

  2. 依赖没装全 第一次 npm install 显示"up to date",但实际上 package.json 里没写全依赖,express 等包根本没装上。后来改成显式 npm install express axios @anthropic-ai/sdk dotenv 才真正装好。

  3. API Key 混乱 .env 里填的 ANTHROPIC_API_KEY 格式不对(不是 sk-ant- 开头),大概率是别的平台的 Key 误填了进去,一直没来得及去 Anthropic 控制台重新生成核对。

  4. ngrok 需要额外注册 npm 装的新版 ngrok 首次使用要注册账号、绑定 authtoken,多了一步没预料到的操作,好在最后跑通了,拿到了公网转发地址。

  5. 飞书订阅方式选错 飞书后台默认的"事件与回调"订阅方式是长连接,而 bot.js 写的是 Webhook 逻辑,两者对不上,机器人自然收不到消息。后来手动切换成"发送至开发者服务器"模式,把 ngrok 地址填进去。

  6. 验证请求返回格式错误 配置完回调地址后,飞书返回报错"返回数据不是合法的JSON格式"——这是飞书标准的 URL 验证流程,服务需要正确解析 challenge 字段并原样以 JSON 格式返回,bot.js 这块处理得有问题。

  7. .env 疑似又没读到 最后一次重启服务,日志显示 injected env (0) from .env,配置又变回没读取到的状态,怀疑是记事本保存的时候把文件存成了 .env.txt 而不是 .env,这是 Windows 记事本一个常见的坑,最后卡在这一步没继续排查下去。

为什么没搞定

回头看,问题不是出在某一个"大坑"上,而是每一步都环环相扣:环境配置、依赖安装、密钥管理、网络转发、飞书后台设置、代码里的验证逻辑,任何一环出岔子,前面做对的部分也白搭。中间来回切换终端窗口、来回改配置,很容易把"哪一步已经做对了、哪一步还没做"搞混,尤其是 .env 文件反复出现"读取到 0 个变量"这种情况,说明基础配置这一层始终没有稳定下来。

下次接着做,建议这么切入
先把 .env 的问题彻底解决:直接用 dir 或 Get-ChildItem 确认文件名到底是不是 .env(无扩展名),必要时用 VS Code 之类的编辑器打开保存,别用记事本,避免自动加 .txt 后缀。
API Key 单独核对一遍:去 Anthropic 控制台重新生成一个 sk-ant- 开头的 Key,飞书那两个也去开发者后台"凭证与基础信息"重新确认复制。
确认订阅方式和代码逻辑匹配:既然已经写的是 Webhook 版本的 bot.js,就保持飞书后台选"发送至开发者服务器",不要来回切换。
单独测试 /feishu/event 这个路由:可以先用 Postman 或者简单的 curl 命令,手动模拟飞书发一个带 challenge 字段的请求过去,确认 bot.js 能不能正确原样返回 JSON,不用每次都靠飞书后台报错来排查。

这次没跑通,但每一步卡在哪、为什么卡,基本都定位清楚了,下次照着这个清单从头过一遍,应该能省不少来回折腾的时间。

posted on 2026-08-12 13:43  chenyun_922  阅读(15)  评论(0)    收藏  举报