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
羽毛球分组比赛记分
小程序二维码

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

小夜