前言¶
把 DeepSeek Harness 的 Agent 会话接到飞书聊天里,常见的问题是:机器人怎么收发消息、Agent 执行过程怎么展示、工具调用结果怎么呈现,以及没有公网地址时如何保持连接。
下面介绍的 dsh-feishucard 是一个面向 DSH 的飞书桥接插件。它使用官方 SDK 的 WebSocket 长连接收发飞书消息,无需公网 IP、域名或隧道;在飞书卡片里流式展示回复过程,并为每个聊天维护独立会话。
这是什么¶
dsh-feishucard 是 cmfok 维护的 DeepSeek Harness 与飞书(Lark)之间的自研桥接插件,许可证为 MIT。
它解决的问题比较集中:
- 通过飞书官方 SDK 长连接接收和发送消息
- 在飞书卡片中流式更新 Agent 回复
- 为每个飞书聊天维护独立 Agent 会话
- 提供基本聊天命令、处理中表情回执、主动发消息工具和审批卡片
- 支持多机器人配置和运行保活
单包内包含三类内容:Host 插件、长连接 helper 子进程,以及自动注册 bundle 补丁。
核心功能¶
长连接收发¶
插件通过官方 SDK WebSocket 长连接接收飞书消息,再把消息注入 Agent 会话,并以交互卡片回复同一会话。
这条链路不需要公网 IP、域名或隧道,适合本地或内网环境使用。
流式回复卡片¶
飞书回复采用卡片形式,支持:
- 实时
PATCH更新 - 过程话语内联显示
- 工具调用折叠面板
- 限流、退避、熔断和纯文本兜底
当卡片链路不可用时,可以降级为纯文本回复。
每个聊天独立会话¶
每个飞书聊天对应独立的专属 Agent 会话,会话状态会持久化,并在重启后恢复。
聊天内支持以下命令:
/new [名称]
/switch <序号>
/list
/help
处理中表情回执¶
消息到达后,插件可以添加处理中表情回执。默认是 OnIt,也可配置为 none 关闭。
模型工具¶
插件提供 feishu_send 模型工具,支持 Agent 主动发消息。
审批卡片¶
当会话需要审批时,飞书侧会给出交互卡片,包含“允许一次”和“拒绝”按钮。
审批卡片有以下行为:
- 5 分钟超时自动拒绝
- 会话取消时自动取消审批
多机器人支持¶
一个实例可以配置多个飞书机器人,每个机器人可以绑定各自的工作区。
保活机制¶
插件包含以下保活能力:
- helper 崩溃后自动重启,并有
5s冷却 - 凭据变更时自动重连
- 使用 SDK 自带重连能力
安装与启用¶
使用以下命令安装插件,然后重启 dsh web:
dsh plugin --profile web add dsh-feishucard
dsh web
首次安装时,如果 pnpm 拦截 protobufjs 构建脚本,并在日志中出现 ERR_PNPM_IGNORED_BUILDS,需要允许该构建脚本。
将对应 profile 的 pnpm-workspace.yaml 中 allowBuilds.protobufjs 设为 true:
allowBuilds:
protobufjs: true
然后重跑安装命令:
dsh plugin --profile web add dsh-feishucard
本地开发安装时,也可以使用本包目录:
dsh plugin --profile web add <本包目录>
或使用 file: 协议:
dsh plugin --profile web add file:<本包目录>
飞书开放平台配置¶
在飞书开放平台侧,需要完成一次性配置:
- 创建企业自建应用,并启用机器人能力。
- 添加所需权限。
- 在事件与回调中订阅长连接事件
im.message.receive_v1。 - 创建版本并发布。
需要配置的权限包括:
im:message.p2p_msg:readonly
im:message.group_at_msg:readonly
im:message:send_as_bot
im:message.reaction
其中 im:message.reaction 为可选权限。
配置示例¶
插件配置独立存放于:
~/.dsh-feishucard/feishu.config.json
配置文件与仓库解耦。示例如下:
{
"bots": [
{
"name": "我的机器人",
"workspace": "C:\\path\\to\\workspace",
"appId": "cli_xxxxxxxxxxxxxxxx",
"appSecret": "your_app_secret",
"reactionEmoji": "OnIt"
}
]
}
配置支持热更新,轮询周期为 10 秒,改完配置后无需重启。
会话状态持久化在:
~/.dsh-feishucard/state-<appId>.json
如果检测到旧生态路径:
~/.cc-connect/
且其中存在配置,插件首次启动时会自动迁移一次。
典型用法¶
安装并配置机器人后,在飞书聊天中可以直接使用:
/new
创建新会话。
/new 订单排查
创建带名称的新会话。
/list
查看会话列表。
switch 2
或:
/switch 2
切换到第 2 个会话。
/help
查看帮助。
需要主动发消息时,可以由 Agent 调用 feishu_send 工具。需要审批时,按飞书卡片中的按钮进行“允许一次”或“拒绝”。
开发与排障¶
本地开发时可以先安装依赖:
npm i
语法检查:
npm run check
冒烟测试:
npm run smoke
插件的依赖要求包括:
"@deepseek-ai/dsh-tools": "^0.1.0-rc.5"
以及:
"@larksuiteoapi/node-sdk": "^1.73.0"
在 Windows 下使用 file: 依赖安装时,profile 中的 node_modules/dsh-feishucard 可能是实体副本,而不是软链。修改源文件后,需要同步副本,或重新执行安装命令后再重启。
适用场景与注意¶
这个插件适合以下场景:
- 想在飞书里直接使用 DSH Agent 会话
- 希望看到 Agent 的过程话语和工具调用面板
- 不想依赖公网 IP、域名或隧道
- 需要每个聊天独立会话和重启后恢复
- 需要审批卡片和主动发消息工具
使用前需要注意:
- 不要与其他 DSH 飞书插件同时安装。同一飞书 App 的 WS 长连接会互踢。
- 插件以当前
dsh进程权限运行。安装前应检查源码与许可证。 - 飞书开放平台需要正确配置权限、事件订阅和版本发布。
- 首次安装可能遇到
ERR_PNPM_IGNORED_BUILDS,需要允许protobufjs构建脚本。 - 本地开发使用
file:安装时,注意 Windows 下副本同步问题。
链接¶
GitHub 地址: