mirror of
https://github.com/NanmiCoder/cc-haha
synced 2026-07-16 13:03:31 +08:00
Remove .claude/ and docs/superpowers/ from git tracking as they are local-only config and planning files. Also remove stale screenshots and update docs/channel content. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.5 KiB
4.5 KiB
飞书接入
飞书 Adapter 的实际接入说明,基于当前仓库代码。
适用场景
飞书方案适合在中国区环境下通过企业自建应用私聊 Claude Code。当前实现只处理 p2p 私聊,不处理群聊。
实现入口:adapters/feishu/index.ts
启动前准备
1. 创建飞书应用
在飞书开放平台创建企业自建应用,拿到:
App IDApp Secret
2. 配权限
至少确认这些能力可用:
im:messageim:message:send_as_botim:resource
3. 配事件订阅
当前实现使用飞书 WebSocket 长连接接事件,不需要公网回调地址。
需要注册的事件:
im.message.receive_v1card.action.trigger
4. 发布应用
应用至少需要处于可用发布状态,否则 bot 无法正常收发消息。
在 Desktop Webapp 里配置
打开 Settings -> IM 接入 -> 飞书,填写:
App IDApp SecretEncrypt Key,按你的事件配置填写Verification Token,按你的事件配置填写Allowed Users,可选Streaming Card
配置结构示例:
{
"serverUrl": "ws://127.0.0.1:3456",
"defaultProjectDir": "/Users/me/workspace/my-project",
"feishu": {
"appId": "cli_xxx",
"appSecret": "xxx",
"encryptKey": "",
"verificationToken": "",
"allowedUsers": ["ou_xxx"],
"streamingCard": false
}
}
环境变量也可覆盖配置文件:
export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"
export FEISHU_ENCRYPT_KEY=""
export FEISHU_VERIFICATION_TOKEN=""
export ADAPTER_SERVER_URL="ws://127.0.0.1:3456"
启动
cd adapters
bun install
bun run feishu
首次配对
飞书侧的配对和 Telegram 一样,都是走 Webapp 生成的全局配对码。
流程:
- 在 Desktop Webapp 里生成 6 位配对码
- 飞书私聊 bot
- 直接发送配对码
adapters/common/pairing.ts验证成功后,把当前open_id写进feishu.pairedUsers
注意:
- 当前实现把飞书用户标识存成
open_id allowedUsers也是按open_id比较- 码一次性使用,60 分钟过期
日常使用流程
首次消息
adapters/feishu/index.ts 处理逻辑:
- 通过长连接收到
im.message.receive_v1 - 提取文本内容
- 只接受
p2p - 校验授权
- 没有 session 时:
- 先尝试恢复
adapter-sessions.json - 否则按
defaultProjectDir建 session - 如果没默认项目,则列最近项目让用户回复编号
- 先尝试恢复
项目选择
没有默认项目时,adapter 会调用 GET /api/sessions/recent-projects,然后在飞书里发编号列表。
用户回复编号后:
- adapter 调
POST /api/sessions - 建立
/ws/:sessionId连接 - 把映射写入
~/.claude/adapter-sessions.json
支持的命令
飞书当前支持文本命令和中文别名:
/projects或项目列表/new或新会话/stop或停止
权限审批
飞书使用交互卡片,而不是 Telegram 的 inline button。
当 Claude 请求权限时:
- adapter 构造 interactive card
- 用户点击允许/拒绝
- 飞书回调
card.action.trigger - adapter 调用
bridge.sendPermissionResponse(...)
返回消息的表现
飞书侧也支持流式更新,但渲染方式和 Telegram 不同:
- 普通文本通过
post消息发送 - 权限审批通过卡片发送
- 流式内容优先 patch 同一条消息
- 完成后按 30000 字左右分片
streamingCard 字段当前已经进入配置模型,但 adapters/feishu/index.ts 里实际消息渲染仍以文本 patch / card 为主,文档里不应把它写成一个已经成型的独立体验开关。
常见问题
收不到消息
优先检查:
- App ID / App Secret 是否正确
- 应用是否已发布
- 是否启用了
im.message.receive_v1 - 是否启用了
card.action.trigger - 是否真的是和 bot 的私聊,而不是群聊
权限按钮点了没反应
通常是 card.action.trigger 没配置好,或者事件订阅鉴权配置和本地 encryptKey / verificationToken 不匹配。
一直提示未授权
优先检查:
- 配对码是否还在有效期
- 发送的是不是当前有效码
allowedUsers填的是不是open_idfeishu.pairedUsers里是否已写入当前用户
会话没恢复
检查:
~/.claude/adapter-sessions.json是否成功写入- Desktop server 里的 session 是否仍存在
源码入口
adapters/feishu/index.tsadapters/common/pairing.tsadapters/common/session-store.tsadapters/common/ws-bridge.tsadapters/common/http-client.ts