DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

eighteentang /

eighteentang/dsh-plugin-im-bridge

Verified

把 QQ / 微信等 IM 接成 DSH 的对话入口:手机上给机器人发消息,电脑上的 agent 干活(QQ 与微信可收发并接 agent,企微 / 飞书 / 钉钉目前只能收)

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@750922e5

dsh-plugin-im-bridge

把 IM 机器人接成 DSH 的对话入口:手机上给机器人发消息,电脑上的 agent 干活。

DSH 是一个能读写文件、执行命令、跑长任务的编码 agent。 这个插件让它在手机上有个"嘴"和"耳朵" —— 出门在外也能给它派活。

你的手机                          你的电脑
┌──────────────┐               ┌───────────────────────────────┐
│ 给机器人      │  平台服务器    │ DSH 客户端                     │
│ 发一条消息    │ ──────────▶  │  └─ 本插件                     │
│              │               │      └─ 专用会话(有全套工具)  │
│ 收到回答      │ ◀──────────  │           改文件 / 跑命令 /…    │
└──────────────┘               └───────────────────────────────┘

零、现在支持哪些平台

平台 状态 怎么连
QQ ✅ 完整可用 收发 + agent。要自己申请一个 QQ 机器人(见下)
微信 ✅ 完整可用 收发 + agent。走官方 iLink / ClawBot 通道,扫码即可,不用申请凭据
企业微信 ⚠️ 只能收 官方长连接已接;回复帧格式官方未公开,发不回去
飞书 ⚠️ 只能收 入站已接;出站未实现,且要另装约 30 MB 的官方 SDK
钉钉 ⚠️ 只能收 入站已接;出站未实现(Stream 通道本身不能回复)

设置页里每个平台都如实标注完成度 —— 没做完的不会假装能用。

内核与平台无关,只有传输层是各平台专属的

共用内核:队列 / 专用会话 / 会话面板 / 权限预设 / 回复分派
             ↑ 这些一份代码,所有平台都用
传输层    :QQ(WebSocket 长连接)/ 微信(HTTP 长轮询)/ …各自一份

所以新接一个平台=只写它的传输层,内核不用动 (企微/飞书/钉钉的入站就是这么接上的)。


一、能做什么

场景 说明
远程派活 在手机上让电脑上的 agent 干活,回到电脑看结果
随手查 让它读某个文件、列目录、搜代码,结果直接回到手机上
长任务 发起一件事然后走开,回来在 DSH 里看完整过程
双向对话 不只是"发指令" —— 它会回话、会追问、会报告进度

每个平台各有一条独立的专用会话(QQ 和微信互不干扰), 也和你电脑上正在进行的会话互不干扰。


二、开始之前:准备凭据

两条路,选一条就行:

路线 A:微信(最省事,不用申请任何东西)

只要手机微信是 8.0.70 或更高,并且「我 → 设置 → 插件」里能看到 「微信 ClawBot」。连的时候会出现一个二维码,扫码即可。

这条路的凭据(bot_token)存在本机,重启客户端不用重扫。

路线 B:QQ(要自己申请,约 15 分钟)

这一步只能你自己做(要实名、要用你自己的 QQ 号)。

1. 注册并创建机器人

去 https://q.qq.com → 登录 → 创建机器人应用。

⚠ 需要实名认证。个人开发者可以创建,但要走审核。

2. 拿到 AppID 和 AppSecret

创建完成后,进机器人后台 → 「开发设置」 页面,里面有:

AppID       —— 一串数字,例如 1903121969
AppSecret   —— 一串字母数字,**不要外传**

AppSecret 等于你机器人的密码。 泄露了别人就能用你的机器人。 本插件把凭据存在本机(~/.dsh/.credentials.yaml),不会上传到任何地方。

3. 把你自己加进沙箱白名单(⚠️ 最容易漏、漏了会静默失败)

在机器人后台 → 「沙箱配置」 → 找到 「消息列表单聊」 → 把你的 QQ 号加进去。

不加会怎样:机器人收不到任何消息,而且不报错 —— 你会以为插件坏了,其实消息根本没到。这是最常见的"装好了但没反应"。

4. 想上正式环境?多半不行(要知道为什么)

插件默认走沙箱环境,原因很实际:

沙箱 正式
网关 sandbox.api.sgroup.qq.com api.bot.qq.com
限制 只有白名单里的 QQ 号能用 要配置 IP 白名单
家用宽带 ✅ 能用 ❌ 没有固定公网 IP,过不去

所以家用宽带就用沙箱 —— 你自己用完全够。要上线给很多人用, 得有固定公网 IP 的服务器。


三、安装插件

前提

已经装好 DSH 并能正常对话(能登录、能发消息)。

方式:命令行安装

DSH 自带插件管理命令:

dsh plugin --profile <你的profile名> add github:eighteentang/dsh-plugin-im-bridge#v1.2.4

--profile 的名字:填你自己的 profile 名 —— 看 ~/.dsh/profiles/ 下的目录名就是它。

⚠ 上面示例里的 web 是 DSH 随附的模板名,不必然是你的 profile 名。 用 dsh --profile <名字> --from-default-profile <模板> 新建过的 profile 会是别的名字(例如 desktop)。写错名字 = 装到另一个 profile,当前客户端看不到。

装完后重启 DSH 客户端。

验证装上了

重启后 DSH 客户端里应该出现:

· 设置 → 连接 IM          ← 配置凭据的地方
· 侧边栏一个企鹅图标       ← 点开是 QQ 会话面板

看不到? 检查两件事:

  1. 插件装到了正确的 profile(dsh plugin --profile <名字> list 能看)
  2. 客户端真的重启了 —— 只禁用再启用不够,Node 的模块缓存会让它继续用旧代码

钉住版本(推荐)

上面的命令装的是 main 的最新提交 —— 上游随时可能变。 想要一个不会自己变的版本,就用标签:

# 装某个具体版本
dsh plugin --profile <你的profile名> add github:eighteentang/dsh-plugin-im-bridge#v1.2.4

# 看有哪些版本可选
#   https://github.com/eighteentang/dsh-plugin-im-bridge/tags

⚠ 微信用户请用 v1.2.2 或更新。 v1.2.1 及更早的版本发微信回复时缺一个 client_id 字段 —— 表现是:日志显示发送成功(HTTP 200),但微信里只有第一条消息出现, 之后每条都收不到。v1.2.2 修的就是这个。

每个版本改了什么:见 CHANGELOG.md。

升级

dsh plugin --profile <你的profile名> add github:eighteentang/dsh-plugin-im-bridge#v1.2.4   # 换成的版本号

然后重启客户端。

升级不会丢凭据。 插件在启动时会自动把旧键名的凭据迁移到新键名 (credential-migrated 那条日志就是它干的)。

但升级可能会丢会话历史 —— 如果新版本换了内部会话 id 前缀。 那种情况 CHANGELOG.md 里会写明。会话历史丢了不影响功能, 只是 QQ 那条线的上下文从头开始。

我装的是哪个版本?

看 profile 里那份 package.json 的 dsh-plugin-im-bridge 字段:

# 装了标签版 → 显示 github:eighteentang/dsh-plugin-im-bridge#v1.2.4
# 装了浮动版 → 显示 github:eighteentang/dsh-plugin-im-bridge
cat ~/.dsh/profiles/<profile名>/package.json

四、填凭据并连接

打开 设置 → 连接 IM,每个平台一行:开关、完成度、连接状态、凭据都在那一行里。 点「配置/测试」展开,填凭据,再点「保存并测试连接」。

凭据保存在哪:本机 ~/.dsh/.credentials.yaml,记录名 im-bridge/bot。

设置页不会回显 AppSecret —— 这是有意的,它是密钥不是普通配置。 配好之后那页会显示「凭据已保存 · AppID 尾号 XXXX」,点「重新设置」才能改。

连接状态怎么看

设置页顶部和侧边栏面板都会显示状态。也可以直接查本机的状态接口:

curl http://127.0.0.1:8799/im-bridge/status

返回 "connected": true 和 "bot": "你的机器人名" 就对了。

接口只监听回环地址(127.0.0.1) —— 外面的机器访问不到。


五、试第一条消息

QQ:用你在第二章加进白名单的那个 QQ 号,给机器人发一条。 微信:直接在微信里给「微信 ClawBot」发一条。

帮我看看 D 盘有哪些文件

正常的话:它会真的去列目录,然后把结果回到你手机上。

没反应? 按这个顺序查:

症状 最可能的原因
完全没回复(QQ) ① 你的 QQ 号没加进沙箱白名单(第二章路线 B 第 3 点);② 设置页显示未连接 → 凭据错
完全没回复(微信) 设置页那行是否显示「已连接」;且插件版本必须 ≥ v1.2.2 —— 更早的版本发微信回复缺一个字段,只有第一条能显示
回复"我没有工具" 会话的工具没挂上 —— 看下面的「已知问题」
回复"没有 API key" 模型路由没配对 —— 看下面的「模型配置」
回了一句就卡住 上一轮还在处理;等一会儿或再发一条

六、模型配置(可能需要你改)

插件让各平台的专用会话用你 DSH 里设置的默认模型。但有个坑:

DSH 内置的默认是 deepseek-official(需要 DEEPSEEK_API_KEY)。 如果你是用账号登录(没有 API key),插件会回退到 deepseek-account, 这通常是对的。

如果机器人回"no API key for provider route",就在插件的配置里显式指定:

# profile 的 cordis.patch.yml 里,im-bridge 那一行
- id: im-bridge
  name: dsh-plugin-im-bridge
  config:
    agentProvider: deepseek-account
    agentModel: deepseek-flash
配置项 说明
agentProvider 模型服务商。账号登录用 deepseek-account
agentModel 模型 id,例如 deepseek-flash
agentReasoningEffort 思考强度,例如 high / max
workspace 各平台专用会话的工作目录(默认 DSH 的工作目录)
sandbox 是否连 QQ 沙箱环境(默认 true;只管 QQ)
permissionPreset 专用会话的权限预设(默认 danger-full-access)

七、安全:这个插件权限很大,务必读完

⚠️ 它把电脑的操作能力交给了"能给机器人发消息的人"

装好之后,能私聊你这个机器人的人,就能在你的电脑上执行命令。

默认配置是 permissionPreset: danger-full-access(无需审批)—— 因为专用会话是无人值守的:审批框弹在电脑桌面上,你在手机上根本看不到, 如果要用"每次审批",机器人会直接卡死。

所以你必须做一件事:去 QQ 开放平台确认谁能私聊这个机器人。 如果是公开可加的,任何找到它的人都能操作你的电脑。

收紧权限的办法

- id: im-bridge
  name: dsh-plugin-im-bridge
  config:
    # 只能读,不能改
    permissionPreset: read-only

可能的取值:read-only / workspace-write / danger-full-access。

注意:workspace-write 在部分机器上沙箱初始化会失败 (SetNamedSecurityInfoW failed (Win32 5)),导致所有命令都跑不起来。 如果遇到,用 danger-full-access 或 read-only。

凭据安全

  • AppSecret 不要贴到任何聊天里(包括给 AI 看的对话)
  • 泄露了就去对应平台的开发者后台重置(QQ 是 AppSecret;微信是重新扫码换 token)
  • 凭据只存在本机 ~/.dsh/.credentials.yaml

八、它是怎么工作的

理解这个能帮你排查问题。

QQ 开放平台
    │  WebSocket 长连接(插件主动连出去,不需要公网 IP)
    ▼
im-bridge(Host 插件,跑在 DSH 进程里)
    │  ① 收到消息 → 排队(避免两条消息合并成一个回合)
    │  ② 交给一个**专用会话**处理
    ▼
专用会话(agent,带全套工具:读写文件 / 执行命令 / 搜索 /…)
    │  ③ 干完活
    ▼
im-bridge → 回手机(各平台各自的回复通道)

几个设计点(都是踩坑踩出来的):

设计 为什么
消息排队 agent 会把收件箱里的消息合并处理 —— 两条消息只回一个。排队保证"一条消息一个回答"
每个平台一条专用会话 各平台的线互相独立、也独立于你在 GUI 里用的会话。以 origin: subagent 创建,不出现在会话列表里
看门狗 上一轮如果卡住(超过 45 秒),自动解封并把排队消息放出去 —— 否则会永久卡死
被动→主动回复回退 QQ 的被动回复有 msg_id 限制,失效时自动改用主动推送(微信则是每条消息带 context_token 回复)
凭据自动迁移 插件改过包名/凭据键名;升级时会自动把旧凭据搬过来,你不用重填

状态日志:~/.dsh/im-bridge-status.log(JSON 行格式,排查问题的第一手材料)


九、卸载

dsh plugin --profile <你的profile名> remove dsh-plugin-im-bridge

已知问题:卸载后 ~/.dsh/profiles/<名字>/node_modules/ 下可能残留一个 名叫 dsh-plugin-im-bridge 的死链接(junction)。 不影响使用(插件的加载清单已经清干净了),但可以手动删掉。


十、已知问题

问题 状态
用 select 绑 preset 会让 resume 后的会话丢掉几乎全部工具(能回话但干不了活) 已修(改用 mount)
workspace-write 沙箱在部分机器上初始化失败,所有命令报 grantWrite Win32 5 规避:用 danger-full-access 或 read-only
卸载后 junction 残留 已知,不影响使用
需要人工审批的权限预设会让专用会话卡死(审批框在电脑上,手机看不到) 默认已避开(用 danger-full-access)
会话历史被"模型自己的错误结论"污染后,改代码也没用,得换会话 id 已修(换代会话 id)

十一、许可与版本

MIT —— 见 LICENSE。

当前版本:见 CHANGELOG.md 最上面那条。 钉版本 / 升级:见上面的「钉住版本(推荐)」一节。

这个插件不是 DeepSeek 官方项目,是第三方插件。 各平台的接口用法来自腾讯 / 飞书 / 钉钉的公开文档。

—/ 5

No ratings yet

Verified DSH bundle

Commit 750922e58a1a

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout