zhuiyueya / dsh-im-gateway

목록에 있음

把 dsh agent 接入微信、飞书等 20+ 聊天平台的聚合网关插件 | Aggregate IM gateway for DeepSeek Harness (dsh): connect your agents to WeChat, Feishu, Telegram, Discord & 20+ chat platforms

main기타 소스 보기

설치

npx -y @deepseek-ai/dsh plugin --profile web add github:zhuiyueya/dsh-im-gateway

이 설치 명령은 GitHub 저장소 주소에서 생성된 확인되지 않은 시작점입니다.

README

유지 관리자가 작성한 문서 스냅샷입니다.

GitHub에서 보기 ↗
커밋 5a23209동기화 2026. 8. 17.

🐋 dsh-im-gateway

把 DeepSeek Harness 接入你常用的每一个聊天软件

Aggregated IM gateway for DeepSeek Harness (dsh) — drive your coding agents from WeChat, Feishu, Telegram, Discord, QQ and 20+ chat platforms, with unified sessions, remote approvals, interactive questions and one-command setup.

npm version npm downloads License Platform Channels DSH bundle PRs Welcome Tests

English · 简体中文


⚡ 一键安装:把提示词发给你的 dsh 即可

任选一种方式,把下面整段提示词发给你的 dsh(Web GUI 聊天框 / dsh --profile headless "…" / 已接入的 IM 聊天),agent 会自动完成下载、构建、安装——不用手动敲命令。

方式 A · npm 一键安装(推荐,已发布到 npm registry)
请安装 dsh-im-gateway 插件:dsh plugin --profile web add dsh-im-gateway
装完提醒我重启 dsh web。
方式 B · GitHub 克隆安装(最稳妥)
请帮我安装 dsh-im-gateway 插件(DeepSeek Harness 的聚合 IM 网关):
1. 执行 git clone --depth 1 https://github.com/zhuiyueya/dsh-im-gateway.git /tmp/dsh-im-gateway
2. 执行 cd /tmp/dsh-im-gateway && npm install && npm run build
3. 执行 dsh plugin --profile web add /tmp/dsh-im-gateway
4. 汇报结果;如果提示需要重启,提醒我重启 dsh web。
方式 C · 远程仓库直装(无需 clone,已实测可用)
请安装 dsh-im-gateway 插件:dsh plugin --profile web add https://github.com/zhuiyueya/dsh-im-gateway.git
装完提醒我重启 dsh web(首次安装依赖约 1-2 分钟)。
方式 D · 本机已有项目目录
请把本机项目 dsh-im-gateway 安装为 dsh 插件:
1. 进入项目目录执行 npm install && npm run build
2. 执行 dsh plugin --profile web add <项目绝对路径>
3. 提醒我重启 dsh web。

装好后:打开 dsh Web GUI → 设置 ⚙️ → 🐋 IM 网关 → 点选渠道连接(微信/WhatsApp 扫码即连,其余填凭据即可)。


💬 IM 命令

在连接好的聊天软件里,发给机器人的消息以 / 开头即命令:

命令说明
/help本帮助
/status查询当前会话(会话 id / 工作区 / 待批准)
/new · /clear开启全新会话(per-chat 模式)
/workspaces列出所有工作区
/workspace <路径>切换工作区(后续 /new 生效)
/sessions [all|路径]列出会话(默认当前工作区;all 全部)
/continue <会话id>继续已有会话(跨渠道/跨工作区)
/bind <session-id>绑定本机 live 会话(bound 模式)
/unbind解绑(bound 模式)
/channels各渠道连接状态
批准 / 拒绝应答待批准请求(也支持 yes / no / 同意)
普通文本发给 agent;结尾 .. 表示还有后续,!! 立即提交

✨ Highlights

  • 🌐 23+ 渠道全覆盖 — 对齐 OpenClaw 的渠道面:微信、飞书、Telegram、Discord、Slack、QQ、WhatsApp、Signal、Teams、LINE、Matrix、Mattermost、IRC、Twitch、Nostr、Zalo、iMessage……
  • 🔁 每聊天一个 agent 会话 — 群里聊天 = 驱动 agent,回复实时回推;/new 换新会话,/bind 绑定现有会话
  • 远程审批桥 — agent 请求工具批准时推送到 IM,聊天里回一句「批准 / 拒绝」即可,超时自动转回本机批准体系
  • 交互式提问桥ask_user_question 的问题和选项同步到所有绑定渠道;Web 或任一 IM 均可回答,第一答生效并恢复同一个 agent
  • 📱 手机多段输入合并.. 表示还有后续,!! 立即提交,裸文本 5 秒合并窗口,崩溃后自动恢复
  • ✂️ 长回复智能分片 — 按各渠道上限切分,优先在换行/句号断行,带 (i/n) 序号且收敛
  • 🛡️ 白名单安全默认 — 默认拒绝一切未知用户;审批应答强制校验会话归属
  • 🔑 扫码登录 + 免扫码恢复 — 微信 / WhatsApp 扫码登录链接自动落盘;登录态(bot_token + 轮询游标)持久化,重启自动恢复连接,无需重复扫码
  • 🖼️ 媒体收发 — 微信渠道完整支持图片/语音(服务端转文字)/文件/视频(CDN AES-128-ECB 加密),agent 可用 im_send_file 工具把工作区文件发给聊天
  • 📦 一条命令安装 + 可视化连接 — 标准 dsh.bundle 插件;Web GUI 设置面板点选渠道、扫码/填凭据即连,无需重启
  • 🎯 小白友好 — 微信/WhatsApp 点一下直接弹二维码;其余渠道表单引导,状态实时显示

❓ 如何回答交互式提问

当 agent 调用 ask_user_question 时,Web GUI 的结构化问题会同步发送到该会话绑定的全部 IM 聊天。Web 和 IM 同时可答,第一份有效答案生效;其余渠道会收到已回答通知,agent 随后从同一个等待点继续执行。

问题类型IM 回答方式示例
单选选项编号、完整标签或自定义文字2完整模式以后再说
多选用逗号、中文逗号、顿号或分号分隔1,3快速、测试
自由输入直接回复完整文本项目名叫 dsh-im-gateway
多个问题每行使用 问题序号: 答案1: 2 换行 2: 1,3

IM 回答窗口由 questionTimeoutSecs 控制(默认 600 秒)。窗口超时只会停止 IM 等待,Web GUI 中的问题仍可继续回答。等待按 session 隔离;多个渠道同时回答时,只有最先到达的一份会恢复 agent。

📸 效果预览

微信聊天截图 QQ 聊天截图 飞书聊天截图

🏗 架构

   IM 渠道 (Telegram / 微信 / 飞书 / Discord / …)              DSH agent
        │  adapter 归一化入站                                    ▲
        ▼                                                       │
┌─────────────────────────┐      ┌────────────────────────┐    │
│  ChannelAdapter          │◄────►│  ImGateway (核心网关)    │────┘
│  · 每渠道一个适配器       │      │  · 会话路由 (per-chat)   │
│  · 收: 轮询/WebSocket/   │      │  · 白名单 & IM 命令      │
│     webhook → ImMessage  │      │  · 审批桥 (approval/    │
│  · 发: send(chatId,text) │      │    request waterfall)   │
└─────────────────────────┘      │  · 交互提问桥 / 分片合并  │
        ▲                        └────────────────────────┘
        │  session/event · assistant/message · turn/end
        └────────────────────────────────────────────────────
用户消息 → 渠道 adapter → 网关(白名单→合并→会话路由) → agent.followup()
agent 回复 ← 网关(按渠道分片) ← session/event(assistant/message) ← agent
工具批准 → approval/request → 推送到聊天 → 「批准」→ allowed-once

📡 支持的渠道

渠道状态接收方式需要
Telegram✅ 完整Bot API 长轮询@BotFather token
Discord✅ 完整Gateway WebSocketBot token
Slack✅ 完整Socket Modexoxb- + xapp- token
飞书 / Lark✅ 完整官方 SDK 长连接App ID + Secret
微信✅ 完整*iLink 扫码登录(官方协议)专用小号 ⚠️
QQ 机器人✅ 完整官方 WebSocketAppID + Secret
LINE✅ 完整REST + webhookChannel token
Matrix✅ 完整客户端同步Homeserver + token
Mattermost✅ 完整WebSocket + RESTServer URL + token
IRC✅ 完整原生 socket服务器地址
Twitch✅ 完整WebSocket IRCOAuth token
Signal✅ 完整signal-cli 子进程本机 signal-cli
Nextcloud Talk✅ 完整REST 轮询实例账号
Synology Chat✅ 完整webhookIncoming webhook
Zalo✅ 完整REST + webhookOA token
iMessage✅ 完整*imsg / osascriptmacOS
WhatsApp🔄 动态依赖Baileys 扫码npm i @whiskeysockets/baileys
Nostr🔄 动态依赖NIP-04 私信npm i @noble/curves
Teams🧪 实验性Bot FrameworkAzure 注册
Google Chat🧪 实验性webhook公网地址
Tlon / 元宝 / 语音🧪 骨架基础设施

✅ 完整 = 收发可用 | 🔄 动态依赖 = 未装 SDK 时提示安装 | 🧪 实验性 = 需公网/专用基础设施 | *微信 = 官方 iLink 协议(媒体收发 + 语音转文字 + typing)

🚀 快速开始

1. 安装(一次)

# 方式一:npm 安装(推荐)
dsh plugin --profile web add dsh-im-gateway

# 方式二:本地源码(开发/调试用)
cd dsh-im-gateway
npm install && npm run build
dsh plugin --profile web add /path/to/dsh-im-gateway

dsh web    # 重启 dsh(安装插件后需要重启一次)

2. 连接渠道(之后所有操作都在网页里,无需再碰配置)

打开 dsh Web GUI(默认 http://localhost:3080)→ 设置 ⚙️ → 「🐋 IM 网关」

  • 微信 / WhatsApp:点「连接(扫码)」→ 页面直接弹出二维码,手机扫码确认即连 ✅
  • 飞书 / Telegram / QQ 机器人 / Discord / Slack …:点「填写凭据」→ 按提示粘贴 token → 「保存并连接」✅

连接后无需重启,状态实时显示(等待扫码 / 已连接 / 异常)。重启 dsh 后所有已配置渠道自动重连(微信登录态已持久化,无需重复扫码)。

🔧 断开 vs 删除配置:已连接渠道卡片上有两个按钮——「断开」只是临时停用(重启自动恢复);「删除配置」会移除凭据(重启不再连接,需重新配置)。

💡 手动配置方式(可选):在 ~/.dsh/profiles/web/cordis.patch.yml 写配置,凭据也可用环境变量,见下文「配置」。

3. 开始使用

在连接好的聊天软件里给机器人发消息:

/help        ← 可用命令
你好,帮我看看当前工作区    ← 直接聊天 = 驱动 agent

🔔 首次使用需要授权(安全默认):第一次发消息会收到"未授权"提示,同时 dsh 设置 → IM 网关 面板顶部出现 「有用户请求访问」 横幅——点「允许」后即可正常使用,无需手动找用户 ID。

agent 回复实时回推;需要批准时在聊天里回「批准 / 拒绝」;agent 还可以用 im_send_file 把文件(截图/报告)直接发到聊天。

⚙️ 配置

所有配置写在 profile 的 cordis.patch.ymlim-gateway 行;凭据也可用环境变量(见下表)。

通用配置

- id: im-gateway
  config:
    sessionMode: per-chat          # per-chat(默认)| bound
    cwd: /path/to/workspace        # agent 工作目录
    provider: deepseek-official    # LLM provider(默认跟随 dsh)
    model: deepseek-v4-flash       # 模型(默认跟随 dsh)
    allowAllUsers: true            # 默认放行所有用户(开箱即用);管控时改 false
    allowedUserIds:                # 白名单:按渠道(allowAllUsers=false 时生效)
      telegram: ['123456789']
      '*': ['u-common']            # 跨渠道通用
    mergeTimeoutSecs: 5            # 手机多段输入合并窗口
    approvalTimeoutSecs: 120       # 审批超时,超时转回本机批准
    questionTimeoutSecs: 600       # IM 交互提问回答窗口;超时后仍可在 Web 回答
    summaryOnTurnEnd: true         # 每轮结束推送 [✅ 完成] 摘要
    stateDir: ''                   # 状态目录(默认 $DSH_HOME/dsh-im-gateway)

渠道凭据速查

渠道配置字段环境变量
telegramtokenDSH_TELEGRAM_TOKEN
discordtokenDSH_DISCORD_TOKEN
slacktoken + appTokenDSH_SLACK_TOKEN / DSH_SLACK_APP_TOKEN
feishuappId + appSecretDSH_FEISHU_APP_ID / DSH_FEISHU_APP_SECRET
qqbotappId + appSecretDSH_QQ_APP_ID / DSH_QQ_APP_SECRET
signalcli + phoneDSH_SIGNAL_CLI / DSH_SIGNAL_PHONE
linechannelToken + channelSecretDSH_LINE_TOKEN / DSH_LINE_SECRET
matrixhomeserver + accessTokenDSH_MATRIX_HOMESERVER / DSH_MATRIX_ACCESS_TOKEN
mattermostserverUrl + tokenDSH_MATTERMOST_URL / DSH_MATTERMOST_TOKEN
ircserver + nick + channelsDSH_IRC_SERVER
twitchbotName + tokenDSH_TWITCH_BOT_NAME / DSH_TWITCH_TOKEN
nostrprivateKey + relaysDSH_NOSTR_PRIVATE_KEY / DSH_NOSTR_RELAYS
nextcloudserverUrl + user + passwordDSH_NEXTCLOUD_URL
synologywebhookUrlDSH_SYNOLOGY_WEBHOOK_URL
zaloaccessTokenDSH_ZALO_TOKEN
imessageenabled + imsgPathDSH_IMSG_PATH
wechatenabled: true— (iLink 扫码)
whatsappenabled: true— (Baileys 扫码)

🧪 开发

npm install
npm run build          # tsc 构建到 lib/
npm test               # node --test(70 个用例:分片/合并/审批/交互提问/网关/渠道协议)

新增一个渠道只需 4 步

  1. src/channels/ 新建 yourchannel.ts,实现 ChannelAdapter(6 个方法)
  2. src/channels/index.ts 注册
  3. src/index.ts 的 Config 里补配置字段
  4. 在 README 渠道表加一行 ✨
export function createYourChannel(config, log): ChannelAdapter | undefined {
  if (!config.token) return undefined          // 未配置凭据 → 不启动
  return {
    id: 'yourchannel', label: 'YourChannel', maxMessageLength: 2000,
    start() { /* 连接 / 轮询 / 扫码 */ },
    stop() { /* 释放 */ },
    async send(chatId, text) { /* 发消息 */ },
    setMessageHandler(h) { /* 入站回调 */ },
    status() { return 'running' },
  }
}

🤝 贡献

  • 修 bug、补渠道、完善文档都欢迎!
  • 请先 npm test 保证 60 个用例全绿
  • 给仓库加 dsh-plugindeepseek-harness topic 可以进 awesome 插件列表

📄 许可证

MIT © zhuiyueya


Made with 🐋 for the DeepSeek Harness ecosystem

프로젝트 파일 및 신호

표시된 항목은 디렉터리 스냅샷에서 감지된 공개 저장소 신호입니다.

테스트감지됨
문서감지됨

저장소 정보

언어
TypeScript
라이선스
MIT
마지막 업데이트
2026. 8. 17. AM 5:44

신중하게 설치하기

소스 코드, 권한, 수명 주기 스크립트, 의존성 및 네트워크 접근을 검토하고 신뢰하지 않는 플러그인은 격리 환경에서 테스트하세요.