dsh-feishu-bind:浏览器扫码绑定飞书机器人

前言

在 DeepSeek Harness(dsh)里接飞书,常见做法是 SSH 进机器跑向导,或依赖 dsh 自带的 web 界面完成应用创建与凭据配置。步骤分散在终端和多个界面里,换绑、多机器人并行时还要自己管 env 文件和 systemd 单元。

dsh-feishu-bind 由社区维护者 smallwhitelin 发布,归类为联网工具。插件在本地起一个极小的 HTTP 服务:浏览器打开即出二维码,飞书 App 扫码授权后,凭据写入指定 env 并可选自动重启桥;不依赖 dsh web 表面的 profile 也能跑。下面介绍它的定位、能力与安装用法。

这是什么

浏览器扫码绑定飞书机器人 —— 给 dsh 用的小插件。插件自带 node:http 服务(默认 127.0.0.1:3001),inject: [],零 web 依赖。

整体流程可以概括为:

浏览器 ──GET /──► 插件自带 HTTP 服务(默认 127.0.0.1:3001)
                        │
                        ├─ registerApp ──► 飞书授权页(扫码 → 新建应用 / 更新既有应用)
                        │
                        └─ 授权成功 → 写 env 文件 → 重启桥 → 页面绿勾(已接线)

维护仓库:https://github.com/smallwhitelin/dsh-feishu-bind
社区目录页:https://www.skillhub.cn/plugins/smallwhitelin/dsh-feishu-bind
许可证:MIT(README 与 package.json 一致)。当前资料中 package 版本为 0.4.1,运行要求 Node.js >= 24。

核心功能

以下能力均来自仓库 README,按使用场景归纳。

网页扫码与状态

能力 说明
网页扫码 打开页面即出二维码,手机或电脑浏览器均可
绿勾状态 扫完后写凭据并重启桥;仅当日志里出现比绑定更新的 long connection ready 才显示绿勾
刷新换码 每次刷新页面开启新一轮授权,旧二维码作废
点绿勾换码 绑定后点击绿勾同样生成新码,扫码即改绑定

应用与权限

  • 复用既有应用:env 或配置里已有 FEISHU_APP_ID 时走「更新该应用并重新授权」,机器人身份不变;没有则新建。forceCreate: true 可强制每次新建。
  • 预置权限:授权页已勾选 im:message、im:message:send_as_bot、im:resource,以及 im.message.receive_v1 事件、card.action.trigger 回调。
  • 零重依赖:飞书设备码流程在 lib/register-app.js 自实现,不拉 @larksuiteoapi/node-sdk,避免 pnpm 构建脚本拦截。

多机器人并行(独立实例)

「新建应用」可派生一套完全隔离的实例:独立 DSH_HOME、凭据、systemd 用户服务;插件树、模型配置、记忆、技能各持副本,与现有机器人并行。绑定页只在主实例运行(派生实例 DSH_BIND_ENABLED=0)。页面上可用「用新应用绑定」并指定实例名(默认 feishu2、feishu3 等)。

健壮性

缺依赖、端口占用、写文件失败时仅记日志并在页面报错,不会 throw 到插件树。纯逻辑与外部副作用可注入,npm test 无需网络与真实 SDK。

安装与启用

安装前请自行审阅仓库源码与 MIT 许可证;插件以当前 dsh 进程权限运行,绑定页能新建飞书应用并把凭据写入本机,等价于本地开通入口。

从 GitHub 安装(推荐)

README 给出的直接安装方式:

dsh plugin --profile <你的 profile> add github:smallwhitelin/dsh-feishu-bind
systemctl --user restart dsh-<你的桥>.service   # 或你启动 dsh 的其它方式

本地打包安装

若需从源码目录安装,README 说明需先 npm pack(会跑测试),再添加生成的 tgz:

cd dsh-feishu-bind
npm pack

dsh plugin --profile <你的 profile> add ./dsh-feishu-bind-<版本>.tgz
systemctl --user restart dsh-<你的桥>.service

启动后,dsh 日志中应出现类似一行:

[feishu-bind] 绑定页已就绪:http://127.0.0.1:3001/

配置

默认值可直接用;覆盖项写在 profile 的 cordis.patch.yml 里,按插件 id feishu-bind patch,不要改插件自带的 patch 文件。

- id: feishu-bind
  config:
    host: '127.0.0.1'
    port: 3001
    token: 'feishu888'       # 务必改成自己的;空串=不需要口令
    envFile: '~/.config/dsh-feishu.env'
    stateFile: '~/.dsh/feishu-bind-state.json'
    serviceUnit: 'dsh-feishu.service'
    logFile: ''
    appId: ''
    appName: 'DSH Agent'
    appDesc: 'DeepSeek Harness 飞书机器人'
    autoRestart: true
    forceCreate: false

要点:

  • host / port:默认只监听本机 127.0.0.1:3001。
  • token:默认 feishu888,生产环境请改为足够长的随机串;'' 则关闭口令(页面会警告:任何能访问该 URL 的人都能尝试扫码绑定)。
  • envFile:按行更新 FEISHU_APP_ID / FEISHU_APP_SECRET / FEISHU_TENANT,其它键与注释保留,权限 600。留空则凭据仅显示在页面上供手动配置。
  • serviceUnit:绑定成功后重启的 systemd user 单元;留空不自动重启。
  • independentInstances(README 配置表):默认 true,新建应用时派生独立实例;false 则覆盖当前实例凭据。

从其它设备访问需自行做端口转发或反向代理;若地址可能被他人访问,必须设置 token,可用 ?k=<token> 打开页面。

典型用法

经过上面的安装与重启,按 README 使用流程操作:

  1. 浏览器打开 http://127.0.0.1:3001/ → 输入访问口令(默认 feishu888)→ 页面出现二维码。
  2. 飞书 App 扫码 → 首次确认应用名并授权;已有应用会提示更新并重新授权。
  3. 页面显示「已授权,正在写入凭据并重启桥…」,随后变为 ✓ 已绑定,桥已接线。
  4. 在飞书私聊机器人,消息进入 dsh。
  5. 换绑:刷新页面或点绿勾 → 新二维码 → 再扫一次。

HTTP 接口(自动化或排查时可参考):

方法 路径 说明
GET / 绑定页
GET /api/state 状态 JSON
POST /api/qr 新开一轮扫码
POST /api/apply 手动重写凭据并重启桥
POST /api/login 提交口令
GET /healthz 存活探针

phase 流转:idle → waiting → authorized → applying → bound / error。

适用场景与注意

适合谁

  • 已在用 dsh + 飞书桥,希望用浏览器完成建应用、写 env、重启,少碰终端向导。
  • 需要刷新或点绿勾快速换绑,且希望「已接线」以日志里更新的 long connection ready 为准,而不是页面假成功。
  • 同一台机器上要多个飞书机器人并行,且接受独立实例下插件树、记忆、技能各一份副本(改配置可能要改多份)。

安全

  • 默认仅本机监听;暴露到局域网或公网时必须改 token。
  • 未设口令时,扫码者需是其飞书租户管理员,但绑定的应用归其租户控制。

排查(常见现象)

现象 处理
页面打不开 查 dsh 日志 [feishu-bind];ss -ltnp \| grep <port> 看端口占用
一直等待扫码 二维码约 10 分钟过期,点换码;确认机器能访问飞书
一直等待桥重启接线 systemctl --user status <serviceUnit>;日志需有 long connection ready

Windows 无 systemd 时,仓库 windows/ 目录提供计划任务版流程与隔离审计工具 node windows/verify-iso.js <实例名>,语义与 Linux 侧独立实例一致。

DSH 生态强调「一切皆插件」;SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。选用插件前请自行核对源码与权限需求。

结尾

dsh-feishu-bind 把飞书机器人的绑定收成「打开本机页 → 扫码 → 写 env → 可选重启桥」一条线,并支持换码重绑与多实例隔离。若你的 workflow 以 systemd 用户服务跑 dsh 飞书桥,可按 README 安装并在 cordis.patch.yml 里收紧 token 与路径。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye