dsh-phone:在 DSH Web 側邊欄裏接打電話、收發短信

前言

在 DeepSeek Harness(DSH)裏跑智能體時,電話和短信往往還在瀏覽器之外:Twilio 控制台、手機、單獨的 VoIP 客戶端。模型要查未讀、代發一條短信或說明當前是否勿擾,也需要你自己寫膠水層。社區插件 dsh-phone(維護者 lucagiftzek,npm 包 @lucagiftzek/dsh-phone,當前版本 0.3.1)把 Phone 標籤頁掛進 DSH Web 側邊欄(依賴 dsh-better-sidebar),並在同一套界面裏處理短信、通話、實時語音信箱,以及(按 README 描述)Telegram 相關能力;通話音頻默認經你自己的服務器轉發,便於在限制 WebRTC 的網絡裏仍能從瀏覽器接聽。

這是什麼

dsh-phone 是 DSH Web GUI 的「客戶端」類插件:在側邊欄增加 Phone 標籤,後端由 phone-hookd 守護進程持有 SQLite、對接運營商 webhook,插件本體跑在 dsh-web 內,註冊設置頁、Agent 工具與 /dsh-phone/api/*。設計上先完整支持 Twilio(README 寫明已在真實線路上測試);SIP/中繼可通過服務器上的 Asterisk relay 接入,更多運營商選項見倉庫文檔 docs/PROVIDERS.md、docs/RELAY.md。

核心功能

短信與 MMS

  • 短信線程:收發、送達狀態、MMS 圖片。
  • 分段計數(GSM-7 / Unicode)。

通話

  • 瀏覽器內撥號、接聽、靜音、鍵盤 DTMF、通話記錄。
  • Via server(默認):瀏覽器經 DSH 源站的一條加密 wss 傳 G.711 μ-law 音頻(約 70 kbit/s 雙向),不依賴 Twilio CDN、STUN/TURN;適合 WebRTC 被攔的環境。
  • Direct:一鍵切到 Twilio Voice SDK 的 WebRTC。
  • Test audio:不真正撥號即可測網絡。

來電策略(一個開關)

  • Live:本瀏覽器響鈴(可選同時振鈴手機,手機需按 1,避免被手機語音信箱搶接);未接進入語音信箱。
  • Voicemail:全部進語音信箱;來電說話時可見 實時轉寫,可 Pick up 熱接聽(類似 iOS Live Voicemail)。
  • Do not disturb:進語音信箱且不響鈴、不通知;星標聯繫人仍可響;可選 SMS 自動回覆。

語音信箱與聯繫人

  • 問候語(語音或音頻文件);錄音存於你的服務器;最終轉寫可走本地 Whisper 端點或 Mistral Voxtral;README 說明錄音可從運營商側刪除。
  • 聯繫人:姓名、星標(穿透 DND)、拉黑(拒接)。

Agent 工具

模型可通過工具操作電話(發短信或發起語音提醒會先返回 draft,需 confirm: true 才真正執行):

  • phone_status、phone_set_mode
  • phone_sms_threads、phone_sms_thread、phone_sms_send
  • phone_calls、phone_voicemails、phone_contacts、phone_call_say
  • 只讀診斷:phone_doctor

配置集中在 DSH Settings > Phone(或標籤頁齒輪):線路、憑據、webhook、語音信箱、通知、Agent 權限。Apply to Twilio 會創建 API Key 與 TwiML App,並把號碼的 voice/SMS webhook 指到你的服務器,隨後用清單逐項校驗。

架構要點

  • phone-hookd(daemon/hookd.mjs):對外 127.0.0.1:3098,經反向代理暴露爲 https://<host>/phone-hook/,Twilio 請求須帶有效 X-Twilio-Signature;對內 Unix 套接字 ~/.dsh/phone/hookd.sock(mode 0600),僅插件訪問。UI 重啓時來電與短信仍可由守護進程處理。
  • 插件請求與 dsh-mail / dsh-hpc 相同四類門禁(loopback、同源、短期 capability token、harness session cookie)後再轉發到套接字。

安裝與啓用

環境要求(來自 README Install):DSH Web 已裝 dsh-better-sidebar;Node 22.5+(node:sqlite);Twilio 賬戶與帶語音+SMS 的號碼;可被反向代理到 loopback 的 公網 HTTPS 主機名。

僅安裝插件(守護進程已在別處運行時):

dsh plugin --profile web add dsh-better-sidebar   # 標籤宿主,已裝可跳過
dsh plugin --profile web add @lucagiftzek/dsh-phone
# 或:dsh plugin --profile web add github:lucagiftzek/dsh-phone
# 重啓 dsh web,再運行 phone-hookd 並按 Install 連接運營商

完整部署還需在本機安裝並啓用 dsh-phone-hookd(systemd 單元見倉庫 deploy/dsh-phone-hookd.service),並把 僅 /phone-hook/ 路由到 127.0.0.1:3098(示例見 deploy/traefik-phone-hook.yml)。開發/自託管場景可用 dsh plugin --profile web add link:$PWD 鏈接倉庫目錄(需先在倉庫內 npm install && npm run build)。

打開 Settings > Phone:填寫 Account SID 與 Auth Token(或 KEY=value 憑據文件,默認 ~/.config/twilio/credentials,鍵名 TWILIO_ACCOUNT_SID、TWILIO_AUTH_TOKEN),添加線路號碼,設置公網 webhook 基址,Save 後 Apply to Twilio,清單變綠後瀏覽器即可註冊振鈴。

典型用法

  1. 在 Phone 標籤查看短信線程並回復;需要時切換 Live / Voicemail / Do not disturb。
  2. 默認 Via server 接聽;若網絡允許且希望直連 Twilio,改用 Direct。
  3. 在 Agent 對話中調用 phone_sms_send 等工具:先確認返回的 draft,再帶 confirm: true 發送。
  4. 新環境先跑 Test audio,再撥真實號碼;異常時用 phone_doctor 只讀排查。

適用場景與注意

適合:已在 DSH Web 上跑 Harness、希望短信/通話與智能體工具同一登錄邊界內完成,且願意自建 phone-hookd 與 HTTPS webhook 的開發者或自託管用戶。

注意:

  • 插件與守護進程以你部署 DSH/Node 時的用戶與權限運行;安裝前請閱讀倉庫源碼與 LICENSE,並理解 Twilio 與公網 webhook 的安全面(簽名校驗、僅暴露 /phone-hook/)。
  • DSH 社區插件目錄(如 skillhub.cn)爲獨立生態站點,與 DeepSeek / 幻方無官方從屬關係;星標與版本以 GitHub / npm 爲準(目錄頁標註星標爲 0)。
  • SIP、多運營商路線圖以 README 與 docs/PROVIDERS.md 爲準,未在文檔寫明的能力不要假設已上線。

結尾

dsh-phone 把 Twilio(及規劃中的 SIP 等)上的短信、瀏覽器通話、實時語音信箱和一批 phone_* 工具收進 DSH 側邊欄,並把默認通話媒體路徑放在你自己的服務器上。進一步瞭解可查看插件目錄頁與倉庫 README。

  • 目錄頁:https://www.skillhub.cn/plugins/lucagiftzek/dsh-phone
  • GitHub:https://github.com/lucagiftzek/dsh-phone
羽毛球分组比赛记分
小程序二维码

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

小夜