deepseek-harness-dingtalk:DeepSeek Harness 的釘釘 Stream 通道插件

前言

把 DeepSeek Harness(DSH)的智能體接入釘釘時,常見的問題是通道側還要處理公網回調、消息解析、媒體下載、工具審批和會話隔離。deepseek-harness-dingtalk 是面向 DSH 的釘釘通道插件,使用官方 Stream WebSocket 連接,不需要公開回調服務器。應用機器人只需要 Client ID 和 Client Secret 即可接入,並把文本、Markdown、富文本、語音轉寫、圖片和普通文件送入 DSH Agent。

這是什麼

deepseek-harness-dingtalk 由 sliverp 維護,採用 MIT 許可。它的一句話定位是:DingTalk Stream text, image, and file channel bridge for DeepSeek Harness。它解決的是 DSH Agent 與釘釘會話之間的通道適配:輸入、輸出、媒體、審批和會話都在釘釘側完成。

核心能力

輸入與媒體

插件支持以下輸入:

  • 文本
  • Markdown
  • 富文本
  • 語音轉寫
  • 圖片
  • 普通文件

對圖片和文件,插件使用官方 downloadCode 獲取。普通文件會安全存入 Agent 工作區。多模態輸入會根據模型能力處理,並保留 text-only fallback metadata。

輸出與執行

插件支持:

  • 釘釘原生 Markdown 回覆
  • 生成圖片上傳
  • 工作區文件上傳
  • 完整 Harness Agent Loop 執行
  • 結構化 tool events
  • final-visible-reply-only delivery

會話是持久且隔離的,會恢復對應 Agent preset,並借用一個已存在的 live Agent writer。

審批與命令

工具審批在同一會話內完成,使用一次性代碼:

/approve <code>
/reject <code>

插件還支持 /new、已註冊的 Harness slash commands,以及以下檢查命令:

/bot-ping
/bot-help
/bot-image-test
/bot-file-test
/bot-status
/bot-cancel

啓動與容錯

Client Secret 通過 Harness credential service 解析。如果 Client ID 或 Client Secret 未配置,插件以 dormant 方式啓動;單獨安裝它不會阻塞 Harness Web。

連接側使用官方 Stream WebSocket 和 heartbeat,並帶有插件監督的重連,包含對 SDK promise failures 的處理。憑據缺失或無效時,該通道離線並記錄日誌,但不會阻止 Harness 啓動。

環境要求

運行前需要滿足:

Node.js 22.19 or later
pnpm 10.33.4
DeepSeek Harness 0.1.0-rc.7 or later

package.json 中當前版本號爲 0.1.5。

安裝與啓用

確認版本後,添加插件:

pnpm dsh plugin --profile web add github:sliverp/DeepSeek-harness-dingtalk

如果使用本地 checkout,可以改成絕對路徑:

pnpm dsh plugin --profile web add /absolute/path/to/DeepSeek-harness-dingtalk

配置釘釘應用

先完成釘釘應用配置,再配置 DSH 憑據。

  1. 打開釘釘開發者控制檯,創建內部應用。
  2. 添加機器人能力,或使用釘釘官方的 one-click OpenClaw robot 應用流程。
  3. 在 credentials 頁面複製 Client ID( formerly AppKey)和 Client Secret( formerly AppSecret)。
  4. 將 Client ID 放入 DINGTALK_CLIENT_ID,並將 Client Secret 存入 Harness credential reference DINGTALK_CLIENT_SECRET。

開發環境可以使用環境變量:

export DINGTALK_CLIENT_ID='ding_your-client-id'
export DINGTALK_CLIENT_SECRET='your-client-secret'
pnpm dsh --profile web

長期使用建議把 Client ID 放入 ~/.dsh/.env,並通過 Harness credential settings 界面保存 Client Secret。不要提交憑據。

驗證

配置完成後,先發送:

/bot-ping
/bot-image-test
/bot-file-test

再發送一個帶圖片或普通文件的問題,檢查工具、圖片和文件路徑:

What files do I have?

如果需要驗證審批,可以請求一個需要審批的操作,然後回覆插件給出的精確代碼:

/approve <code>
/reject <code>

審批碼用於同一會話內的一次性決定。

策略與超時

直聊和羣聊策略接受 open、allowlist 或 disabled。啓用白名單時,應配合最小權限的 Harness tool 和 workspace 權限。

如果配置審批超時,approvalTimeoutMs 需要小於 responseTimeoutMs。

安全邊界

插件的安全處理包括:

  • sessionWebhook 只用於對應的原始回覆,不記錄、不持久化,也不暴露給模型。
  • 媒體傳輸使用釘釘官方 API,包括經過認證的 HTTP/HTTPS signed download URLs;圖片和文件有數量與字節限制。
  • 入站文件使用安全文件名和私有目錄。
  • 出站文件只接受當前工作區內明確鏈接的普通文件,並拒絕 symlink escape。
  • 憑據缺失或無效時,該通道離線並記錄日誌,不阻塞 Harness 啓動。

會話命名空間

README 中關於 0.1.1 的說明使用新的 dingtalk-v2 會話命名空間。舊的 dingtalk-v1 會話不會被刪除,並繼續保留在 Harness persistence 中;該通道不再向這些可能已被污染的會話追加內容,而是從一個乾淨的 v2 會話開始。/new 可以創建另一個 durable session,同時保留已有記錄。

package.json 當前版本號爲 0.1.5,版本間的會話遷移關係請按對應版本說明覈對。

適用場景與注意

適合:

  • 想把 DSH Agent 接到釘釘會話中的開發者。
  • 需要文本、Markdown、富文本、語音轉寫、圖片和普通文件輸入的通道。
  • 需要在釘釘側處理工具審批、會話隔離和媒體輸入輸出的場景。

使用前注意:

  • 插件會以當前 DSH 進程的權限運行,安裝前應檢查源碼、依賴和 MIT 許可證。
  • 不要把 Client ID 或 Client Secret 提交到倉庫。
  • 白名單應和最小權限工具、工作區權限一起使用。
  • 社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係,不應理解爲官方應用商店。

鏈接

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

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

小夜