chicheng-push:給 DSH 增加多通道消息推送

前言

DSH 的很多能力來自插件:定時任務、外部工具、自定義腳本跑完後,往往還需要把結果送到 Server醬、PushPlus、Telegram Bot、飛書/Lark 機器人或自定義 Webhook。如果每個插件各自維護渠道配置、字段、測試和開關,後續維護會比較分散。

chicheng-push 把這部分能力集中到 DSH Web 設置界面:在左側欄新增「推送插件」入口,可配置管理多個推送渠道,並通過 pushNotifier 服務與 /push/api/send HTTP 接口暴露給其他插件調用。

這是什麼

chicheng-push 是一個 DSH 消息推送插件,由 534119219 維護,License: MIT。

它解決的是 DSH 場景下“插件完成任務後如何統一通知”的問題:在 Web 設置界面維護多個推送渠道,並提供 host 側服務和 HTTP 接口,方便其他插件或腳本調用。

核心功能

設置界面

  • 在 Web 設置界面左側欄新增「推送插件」入口。
  • 可配置管理多個推送渠道。
  • 支持啓用/停用、編輯、刪除渠道。
  • 支持對單個渠道發送測試消息。
  • 支持中文 / English UI 隨瀏覽器語言切換。

支持的渠道

  • Server醬
  • PushPlus
  • Bark
  • 釘釘機器人
  • 企業微信羣機器人
  • 企業微信應用消息
  • Telegram Bot
  • 飛書/Lark 機器人
  • ntfy
  • iGot
  • PushDeer
  • Gotify
  • 自定義 Webhook
  • 郵件(SMTP)

給其他插件調用

插件提供兩類調用方式:

  • host 側 pushNotifier 服務。
  • /push/api/* HTTP 接口。

pushNotifier 服務提供:

push.list()
push.types()
push.send()
push.sendText()
push.test()

HTTP 接口包括:

/push/api/list
/push/api/types
/push/api/save
/push/api/remove
/push/api/toggle
/push/api/test
/push/api/send

渠道數據持久化在:

$DSH_HOME/push/channels.json

安裝與啓用

1、安裝插件:

dsh plugin --profile web add chicheng-push

2、確認 profile 清單中的 dsh.profile.bundles 數組已包含 chicheng-push。如果未自動加入,手動補一行。

3、手動重啓 dsh web 服務。

重啓後打開:

設置 → 推送插件

典型用法

配置渠道

1、選擇渠道類型。

2、填寫表單字段。必填項會標 *

3、保存。

保存後,可以對單個渠道發送一條測試消息。這是真實推送,用來驗證當前渠道配置是否可用。

其他 host 插件調用

其他 host 插件可以通過 ctx.get('pushNotifier') 讀取服務,然後調用 push.send

const push = ctx.get("pushNotifier");

if (push) {
  await push.send({
    title: "任務完成",
    content: "exit 0",
    channels: "all",
  });
}

也可以根據具體渠道調用 push.test(id) 發送測試消息,或調用 push.sendText(title, content, channels) 發送文本消息。

HTTP 接口調用

任意允許訪問的位置都可以向 /push/api/send 發送 POST JSON 請求,例如:

curl -X POST http://127.0.0.1:3080/push/api/send \
  -H "content-type: application/json" \
  -d '{"title":"定時任務完成","content":"exit 0","channels":"all"}'

/push/api/* 接口有 fence 保護,僅允許同源、loopback 或受信 host 訪問。

開發與測試

插件的 host 半爲零第三方運行時依賴,HTTP 渠道使用 Node 內置 fetchemail 渠道僅在配置且可動態加載 nodemailer 時使用。

開發時注意:

  • 修改 lib/index.js 後需重啓生效。
  • 修改 lib/client.js 後刷新頁面即可。

運行集成測試:

node smoke.mjs

該測試包含 19 項斷言,覆蓋真實 HTTP 發送鏈路。

適用場景與注意

適合以下情況:

  • 需要在 DSH Web 設置界面統一管理多個推送渠道。
  • 其他 host 插件需要在任務完成後調用推送。
  • 腳本或外部工具需要通過 HTTP 接口觸發推送。
  • 需要中文 / English UI,並隨瀏覽器語言切換。

使用前需要注意:

  • 插件會以當前 dsh 進程權限運行。安裝前建議檢查源碼和許可證。
  • 渠道配置(含 SendKey / Token / 授權碼)明文存儲在 $DSH_HOME/push/channels.json,請確保該目錄僅當前用戶可讀寫。
  • /push/api/* 接口有 fence 保護(僅同源 / loopback / 受信 host)。
  • 對渠道發送的測試消息是真實推送,發送前確認配置無誤。

鏈接

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

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

小夜