Skip to content

feat(s04): 飞书新增长连接 (WebSocket) 入站模式 - #17

Draft
sfenga wants to merge 1 commit into
shareAI-lab:mainfrom
sfenga:worktree-claw0-feishu-ws
Draft

feat(s04): 飞书新增长连接 (WebSocket) 入站模式#17
sfenga wants to merge 1 commit into
shareAI-lab:mainfrom
sfenga:worktree-claw0-feishu-ws

Conversation

@sfenga

@sfenga sfenga commented Jul 21, 2026

Copy link
Copy Markdown

What

FeishuChannel 原本只有 webhook 入站思路且未内置 HTTP 服务(入站实际跑不通)。本变更新增 lark-oapi 长连接 (WebSocket) 模式(默认):SDK 主动向飞书发起出站 WebSocket,无需公网域名 / 加密策略 / challenge 握手,本地 python sessions/zh/s04_channels.py 即可收飞书消息。

Why

飞书开放平台现在主推长连接,本地开发零配置(对比 webhook 需 ngrok 穿透 + 加密策略)。更贴合 claw0 「python xx.py 就能跑」的教学哲学。

Changes

  • FeishuChannel.parse_ws_event():解析 P2ImMessageReceiveV1 事件为 InboundMessage(复用 _parse_content;注意 ws 事件字段为 message_type 而非 msg_type),与 parse_event 同形不同源。
  • _ws_bot_mentioned():群聊检查 mention.id.open_id == bot_open_id
  • start_long_connection():守护线程跑 lark.ws.Client(auto_reconnect),事件塞入与 Telegram / CLI 共用的 msg_queue,agent 循环零改动
  • FEISHU_MODE=ws|webhook 开关(默认 ws)。
  • 修正 .env.example 中已与代码不同步的 FEISHU_DOMAIN(实际用 FEISHU_IS_LARK),补全 FEISHU_ENCRYPT_KEY / FEISHU_BOT_OPEN_ID / FEISHU_MODE 说明。
  • requirements.txt 增加 lark-oapi>=1.7.0(惰性导入,可选,与 httpx/websockets 一致)。
  • 排空循环标签 [telegram][{m.channel}](飞书消息现在与 Telegram 共用队列)。
  • 三语 (en/zh/ja) s04_channels.py + .md 同步。

Non-breaking

不设 FEISHU_MODE 或未装 lark-oapi 时,退回原有 webhook 解析路径;现有出站 send() 行为不变。

Verified

  • 三语 py_compile 通过。
  • 构造真实 P2ImMessageReceiveV1 payload 测试 parse_ws_event:p2p 文本、群聊无 @过滤 / 有 @通过、post 富文本、image 媒体均正确。
  • 单客户端独立进程实测:lark.ws.Client 正常拨号,假凭证得到真实鉴权错误(app_id is invalid),无 asyncio loop 冲突。

How to use

```sh
pip install lark-oapi

.env

FEISHU_APP_ID=cli_xxxxxxxx
FEISHU_APP_SECRET=xxxxxxxx

飞书开放平台 → 事件订阅 → 选「长连接」模式

python sessions/zh/s04_channels.py
```

FeishuChannel 原本只有 webhook 入站思路且未内置 HTTP 服务, 本变更新增
lark-oapi 长连接模式 (默认): SDK 主动向飞书发起出站 WebSocket, 无需公网
域名/加密策略/challenge 握手, 本地即可跑通入站.

- FeishuChannel 新增 parse_ws_event() 解析 P2ImMessageReceiveV1 事件为
  InboundMessage (复用 _parse_content; 注意 ws 事件字段为 message_type
  而非 msg_type), 与 parse_event 同形不同源.
- 新增 _ws_bot_mentioned() 检查群聊 @机器人 (mention.id.open_id).
- 新增 start_long_connection(): 守护线程跑 lark.ws.Client (auto_reconnect),
  事件塞入与 Telegram/CLI 共用的 msg_queue, agent 循环无需改动.
- FEISHU_MODE=ws|webhook 开关 (默认 ws); 修正 .env.example 中已与代码
  不同步的 FEISHU_DOMAIN (实际用 FEISHU_IS_LARK), 补全 ENCRYPT_KEY/
  BOT_OPEN_ID/MODE 说明.
- requirements.txt 增加 lark-oapi>=1.7.0 (惰性导入, 可选).
- 三语 (en/zh/ja) s04_channels.py + .md 同步.
- 排空循环标签由硬编码 [telegram] 改为 [{m.channel}] (飞书消息现在共用队列).

非破坏性: 不设 FEISHU_MODE 或未装 lark-oapi 时退回原有 webhook 解析路径,
现有出站 send() 行为不变.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant