fix(notify): 平台回 204 被误判为失败 + 诊断工具改名 scrip_

三个改动:

1) sendNotify.js 的 webhook 判据从 statusCode !== 200 改成 2xx 一律成功。
   平台 /api/hooks/ql 按设计回 204(表示已接收且不写 event_logs),
   原判据把 204 当失败 → 每轮日志都打「自定义发送通知消息失败!!」,
   而投递其实成功了。这是纯假警报,也是这次误判的根因。
   同时把状态码打进日志,真失败时能直接看出是 401/403/400/429。

2) _diag_notify.js → scrip_diag_notify.js。
   订阅白名单是 scrip_,不带前缀的文件拉不下来,工具等于不存在。
   加 // cron: 0 0 1 1 * 与 // name:,避免青龙自动建任务时落随机 cron。
   正文补到六段:sendNotify 加载 / env / webhook 三前置条件与 body+headers
   解析复刻 / 直打平台按状态码定位 / pushplus txt-vs-html 模板对比 /
   完整 sendNotify 对照。

3) 文档补齐平台侧的两道硬校验:来源 IP 必须 127.0.0.1 或 172.16/12
   (走公网域名会变成反代地址 → 403),回环带 XFF 一律 403。
   给出指向平台的完整 env 写法(WEBHOOK_BODY 必须多行,单行 JSON
   会被 parseString 整段吞掉 —— 已实测解析结果为 0 个 key)。

验证:node --check(sendNotify + 诊断)/ 5 个 mock 状态码用例
(204/401/403/400/429)全部被正确识别 / _probe_meta 四文件 PASS
This commit is contained in:
2026-11-05 09:34:06 +08:00
parent 483bc29424
commit 3a711d0a47
5 changed files with 303 additions and 146 deletions

View File

@@ -1310,10 +1310,14 @@ function webhookNotify(text, desp) {
).replaceAll('$content', encodeURIComponent(desp));
got(formatUrl, options).then((resp) => {
try {
if (resp.statusCode !== 200) {
console.log(`自定义发送通知消息失败!!\n${resp.body}`);
// [本地补丁 2026-11-05] 原版判据是 resp.statusCode !== 200,把 204 也算失败。
// 平台 /api/hooks/ql 按设计回 204(表示已接收且不写 event_logs),于是每轮
// 都打印「自定义发送通知消息失败!!」—— 投递其实成功,纯假警报。
// 改成 2xx 一律算成功,并把状态码打进日志,方便区分真失败。
if (resp.statusCode < 200 || resp.statusCode >= 300) {
console.log(`自定义发送通知消息失败!!HTTP ${resp.statusCode}\n${resp.body}`);
} else {
console.log(`自定义发送通知消息成功🎉。\n${resp.body}`);
console.log(`自定义发送通知消息成功🎉。HTTP ${resp.statusCode}\n${resp.body || ''}`);
}
} catch (e) {
$.logErr(e, resp);