dsh-plugin-wechat-bridge:把微信私聊橋接進 DSH agent 會話

前言

用 DSH 跑 agent 會話,入口通常是 dsh web 的網頁 GUI。人坐在電腦前沒問題,一旦離開工位,既不方便給會話發消息,也看不到任務跑到哪一步。微信私聊是手機上常開的窗口——如果微信消息能直接驅動 agent、回覆再發回來,就等於多了一個隨身入口。

dsh-plugin-wechat-bridge 做的就是這件事:把微信(ilink bot)私聊消息橋接進 DSH agent 會話,回覆以純文本分片流式發回。下面按功能、安裝、配置、使用的順序介紹。

這是什麼

dsh-plugin-wechat-bridge 是 NattoCB 維護的 DSH bundle 插件,許可證爲 MIT。裝進 web profile 後,掃碼綁定一個具備 ilink bot 權限(bot_type=3)的微信賬號,之後在微信裏發私聊消息就能驅動 agent,回答以純文本發回。

雖然入口換到了微信,上下文與 GUI 是等價的:每日會話注入 ~/.dsh/AGENTS.md 全文、可用 skill 目錄,並掛載與 GUI 相同的 agent preset。

核心功能

消息橋接與每日會話

  • 支持多賬號輪詢微信 ilink bot API(getupdates),私聊消息驅動 DSH agent 會話。
  • 回覆以純文本分片發回:每片至多 4096 字符、至多 5 段,超出截斷。
  • 每人每天一個會話:按本機時區在本地零點輪換,當天首條入站消息惰性創建。

運行時熱插拔

啓停有三種獨立方式,改動即時生效,無需重啓 dsh web:

  1. Settings UI 的「微信橋接」頁籤
  2. /wechat 斜槓命令
  3. settings.yaml 的 wechat-bridge: 段

單向會話通知

notifyEnabled 默認開啓:DSH 內任何頂層會話的每個 turn 結束,都會向白名單微信推送一條固定模板簡訊。三點行爲值得知道:

  • 支持按工作區靜音。
  • token 失效期間的通知自動暫存(至多 20 條、24 小時),下次入站消息後自動合併補發。
  • 只推送給至少發過一次消息的白名單聯繫人(協議需要 context_token),且不依賴當日微信會話是否存在。

崩潰安全與持久化

  • 跨進程輪詢鎖:~/.dsh/wechat-bridge/poll.lock。
  • 消息按聊天串行處理,入站按 message_id 去重(至多處理一次)。
  • 損壞的會話日誌被隔離爲 .corrupt-<ts> 並自愈重建。
  • 賬號、context_token、輪詢偏移持久化在單個原子 JSON(~/.dsh/wechat-bridge/state.json),無需數據庫。

白名單與媒體

  • 入站白名單 fail-closed:allowedPeers 留空即拒絕所有人。
  • 出站媒體:agent 調用 wechat_send_file 工具,把圖片/視頻/文件上傳微信 CDN 發給當前對話人。
  • 入站媒體:圖片/文件/視頻/語音自動從 CDN 下載並 AES 解密,存入 WeChatSpace/inbox/<日期>/;模型聲明圖像輸入時,圖片以原生 image 內容附帶。
  • ask_user_question 等交互式選項工具在微信會話中被 deny(防掛起),問題與選項改爲純文本,用戶以普通微信消息回覆。

安裝與啓用

前置條件

  1. 已安裝 DeepSeek Harness,dsh web 可運行。
  2. 一個具備 ilink bot 權限(bot_type=3)的微信賬號。

安裝

一條命令裝入 web profile:

dsh plugin --profile web add github:NattoCB/dsh-plugin-wechat-bridge

也可以手動安裝:把插件複製到 ~/.dsh/profiles/web/node_modules/dsh-plugin-wechat-bridge,在 profile manifest 的 dependencies 裏添加 file:<SRC>,並在 dsh.profile.bundles 註冊。

注意:不要把 profile 樹外的包符號鏈接進 ~/.dsh/profiles/node_modules(ESM 限制),應複製到 profile 下;file: 依賴加 dsh.profile.bundles 條目是正式註冊方式。

掃碼綁定

網頁方式:Settings →「微信橋接」頁籤 →「掃碼綁定賬號」→ 頁面渲染二維碼 → 每 2 秒輪詢掃碼狀態 → 微信確認後自動保存賬號並啓用。

命令行方式,先在任意 DSH 會話執行:

/wechat qrlogin

發起登錄後返回 sessionId,再用 /wechat qrstatus <sessionId> 輪詢狀態,confirmed 時保存賬號並啓用。

驗證

經過上面的步驟,給機器人發一條私聊消息(如「今天有什麼安排」),agent 會像在 GUI 裏一樣回答,回覆以純文本發回。

配置

運行開關集中在 ~/.dsh/settings.yaml 的 wechat-bridge: 段,編輯保存即熱生效:

wechat-bridge:
  enabled: true
  mediaEnabled: true
  defaultProvider: ''
  defaultModel: ''
  allowedPeers: ''
  notifyEnabled: true
  • enabled:橋接總開關。
  • mediaEnabled:是否接收入站媒體。
  • defaultProvider、defaultModel:橋接會話使用的 provider 與 model。
  • allowedPeers:入站白名單,填機器人內部聯繫人 ID,留空即拒絕所有人。
  • notifyEnabled:單向會話通知開關。

allowedPeers 填的不是微信號,也不是暱稱,而是微信機器人協議的內部聯繫人 ID(一串奇怪字符)。獲取方式:讓對方給機器人發一條消息,機器人會自動回覆該 ID,該 ID 也會出現在 Settings 頁籤的 chip 列表裏。

常用命令

斜槓命令在任意 DSH 會話可用:

/wechat status    # 查看狀態
/wechat enable    # 啓用
/wechat disable   # 停用
/wechat accounts  # 列出已配置賬號
/wechat qrlogin   # 掃碼登錄

故障排查:errcode -14

getupdates 返回 errcode -14(session timeout)表示 bot 會話在服務端過期:輪詢暫停 60 分鐘,Settings 顯示紅字警告,恢復方式是重新掃碼綁定。

context_token 過期時,通知發送失敗會進入暫存隊列(至多 20 條、24 小時),下次入站消息後自動合併補發。

適用場景與注意

適合已經把 DSH 當日常工作臺的人:任務在 dsh web 裏跑,人在外面時用微信發消息、收回復和會話簡訊。

幾點注意:

  1. 插件以當前 dsh 進程權限運行,安裝前建議閱讀插件源碼並確認許可證(本項目爲 MIT)。
  2. allowedPeers 是默認拒絕的閘門:留空 = 拒絕所有人,而不是放行所有人。
  3. 回覆分片至多 4096 字符 × 5 段,超出部分會被截斷。
  4. ask_user_question 等交互式選項工具在微信會話中不可用,交互改爲純文本一問一答。
  5. 如果之前用過舊的 weixin-bridge,數據目錄與設置段會一次性自動更名爲 wechat-*。

小結

這個插件把微信私聊變成 DSH agent 的輸入輸出通道:白名單控制誰能驅動會話,每日會話保持隔離,輪詢結構上崩潰安全,通知機制補齊了會話進展的觸達。裝好插件、掃碼綁定、發一條消息,三步就能跑通。

  • GitHub:https://github.com/NattoCB/dsh-plugin-wechat-bridge
  • 社區目錄頁:https://www.skillhub.cn/plugins/NattoCB/dsh-plugin-wechat-bridge
羽毛球分组比赛记分
小程序二维码

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

小夜