feat(qqmusic): 标题带结论 + 首行放摘要,折叠状态也能看关键信息
用户截图确认:pushplus 的微信卡片只显示「标题 QQ音乐签到 + 正文第一行」, 后面的明细全折叠。查 pushplus 官方文档,这是平台默认行为 —— 服务号模板消息默认不展示具体内容,必须点「查看详情」。 三条官方解法都要额外成本(发「激活消息」24h 内限 5 条 / 开会员 / 绑定自己认证的服务号每年 300 元),所以不改通道,改信息密度: - 标题从固定的「QQ音乐签到」改成三态:QQ音乐签到 ✅ / 🟡 / ⚠️ - 正文第一行从「✅ QQ音乐签到 · 全部完成」改成带数字的摘要: 「✅ 全部完成 · 成长值 +35」「✅ 已完成 · 成长值 +15 · 1 项待处理」 - 引入三态结论 state:done / warn(有 △ 但无 ✗,仍算完成)/ fail - 调用 sendNotify 时第四参传空串,去掉尾部「本通知 By:github.com/...」 标题不放数字的理由:平台抑制指纹是 sha256(kind|credId|title去数字), 数字本来就被 titleKeyOf 剥掉,带 +35 / +15 算同一指纹,抑制不会失效。 顺带修 main 里的累加:blocks 从数组改成 {body,total,warn}, 成长值合计与待处理项数在拼装前算好,摘要行才能直接用。 验证:node --check / 签名对拍 6 组 PASS / 5 个场景 (全好、有遗留、有失败、登录失效、双账号)的 state+标题+首行逐字比对 PASS / _probe_meta 四文件 PASS
This commit is contained in:
@@ -142,43 +142,81 @@ cron: 1 0,6 * * *
|
||||
|
||||
## 通知内容
|
||||
|
||||
每轮跑完推送一条,格式固定:
|
||||
### 为什么标题和首行才是关键
|
||||
|
||||
pushplus 的微信渠道用的是**公众号模板消息**,官方明确:
|
||||
|
||||
> 为了避免不必要的麻烦,使用 pushplus 的服务号推送模板消息**默认是不展示具体的消息内容的**,
|
||||
> 需要点击链接后查看内容详情。
|
||||
> —— [pushplus 文档 · 如何直接在服务号中显示推送内容](https://pushplus.plus/doc/help/showmessage.html)
|
||||
|
||||
所以通知栏能看到的只有:**标题 + 正文第一行**。后面的明细一律折叠。
|
||||
|
||||
三条官方解法(都要额外成本):
|
||||
|
||||
| 方案 | 代价 |
|
||||
|---|---|
|
||||
| 在服务号发「激活消息」 | 24 小时内只有 5 条走客服消息,之后要重新激活 |
|
||||
| 开通 pushplus 会员 | 付费,模板能多显示一部分 |
|
||||
| 绑定自己的服务号 | 企业/个体工商户认证,每年 300 元 |
|
||||
|
||||
**所以在不改通道的前提下,唯一能做的就是:把关键信息压进标题和首行。**
|
||||
|
||||
### 现在的格式
|
||||
|
||||
```
|
||||
✅ QQ音乐签到 · 全部完成
|
||||
标题:QQ音乐签到 ✅
|
||||
首行:✅ 全部完成 · 成长值 +35
|
||||
|
||||
🟢 123456789:成长值 +35
|
||||
🟢 1006764347:成长值 +35
|
||||
✓ 任务中心签到 +15
|
||||
✓ 挂件 retCode 0
|
||||
✓ 领奖·头像挂件 +10
|
||||
✓ 福利站签到 5成长值(本月 12 天)
|
||||
△ 领奖·收听节目 未计次,待 App 内收听
|
||||
· 无需处理 3 项:福利站礼券、月里程碑、分享卡
|
||||
🎁 分享卡 https://y.qq.com/m/vip/experience_card/dist/index.html?cardid=xxx
|
||||
· 无需处理 1 项:福利站礼券
|
||||
|
||||
———
|
||||
轮次: 00:01 / 06:02 双轮(任务20跨天滚动 + 福利站兜底)
|
||||
节目任务(20)依赖 App 内正常收听计入(播放上报未启用)
|
||||
时间: 2026/11/4 23:10:05
|
||||
轮次: 00:01 / 06:02 双轮
|
||||
时间: 2026/11/5 20:10:33
|
||||
```
|
||||
|
||||
**标题就是结论**:`✅ 全部完成` / `⚠️ 有未完成项`,不用点开就知道要不要管。
|
||||
**折叠状态下就能看到 `QQ音乐签到 ✅` 和 `✅ 全部完成 · 成长值 +35`**,够判断要不要点开。
|
||||
|
||||
每个账号下分四类:
|
||||
### 三态结论
|
||||
|
||||
| state | 标题 | 首行 | 触发条件 |
|
||||
|---|---|---|---|
|
||||
| `done` | `QQ音乐签到 ✅` | `✅ 全部完成 · 成长值 +N` | 全 `✓` 或 `·` |
|
||||
| `warn` | `QQ音乐签到 🟡` | `✅ 已完成 · 成长值 +N · K 项待处理` | 有 `△` 但无 `✗` |
|
||||
| `fail` | `QQ音乐签到 ⚠️` | `⚠️ 有未完成项 · 成长值 +N · K 项待处理` | 有 `✗` 或登录失效 |
|
||||
|
||||
`warn` 仍算「完成」——任务20 等 App 内收听属于正常遗留,不该报成失败。
|
||||
|
||||
### 明细的四个符号
|
||||
|
||||
| 符号 | 含义 |
|
||||
|---|---|
|
||||
| `✓` | 做到了(带结果,如 `+15`、`retCode 0`) |
|
||||
| `△` | 部分完成 / 留待下次(如任务20未计次、写锁) |
|
||||
| `△` | 部分完成 / 留待下次(任务20未计次、写锁) |
|
||||
| `✗` | 失败(接口报错、code 非预期) |
|
||||
| `·` | 无需处理(今日已完成 / 未开放),**折叠成一行**,不占版面 |
|
||||
| `·` | 无需处理(今日已完成 / 未开放),**折叠成一行** |
|
||||
|
||||
判定规则:有任何 `✗` → 标题变 `⚠️`;只有 `△` → 仍算完成(有遗留但不影响);
|
||||
全 `✓`/`·` → `✅`。登录态失效单独用 🔴 并直接给处理指引,不进明细列表。
|
||||
`·` 折叠而不是省略 —— 折叠能看出「今天该做的都做了」,省略会让人怀疑漏跑。
|
||||
|
||||
明细来源是 `QMClient.steps`:每个动作调一次 `step(name, status, detail)`,
|
||||
`verdict()` 汇总。新增任务时记得补一句 `step()`,否则它在通知里不可见。
|
||||
|
||||
### 两个细节
|
||||
|
||||
**① 标题只放状态、不放数字。** 平台的抑制指纹是
|
||||
`sha256(kind|credId|title.replace(/[\d\s]+/g, ''))` —— 数字本来就会被剥掉,
|
||||
标题带 `+35` 和 `+15` 算同一个指纹,不会破坏「1 小时同指纹只发一条」。
|
||||
|
||||
**② 调用时第四参传空串**,否则 `sendNotify` 会往正文尾部追加
|
||||
`本通知 By:https://github.com/whyour/qinglong`,这行会一起进 `notify_events.content`。
|
||||
|
||||
```js
|
||||
await sendNotifyFn(title, desp, {}, '')
|
||||
```
|
||||
|
||||
## 通知发不出去怎么查
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user