通知触发条件详解
这是当通知未按预期到达时的技术参考页面。系统自动通知和用户创建的计划都需要通过多个条件才能最终发送。
通用拦截条件(适用于所有通知)
即使计划时间正确,如果符合以下任一条件,通知将被拦截。
| 条件 | 详情 | 例外 |
|---|---|---|
| 通知全局禁用 | 在设置中关闭了通知 | 无 |
| 免打扰时段 | 22:00 – 08:00 KST | 用户创建的计划 |
| 对话进行中 | 最后一条消息发送后1小时内 | 用户创建的计划 |
| 超出每日上限 | 每日自动通知最多 3条 | 预算警告、用户创建的计划 |
| 单独禁用该通知 | 在通知中心关闭了该通知 | 无 |
用户直接创建的计划(例如:”每天8点运动提醒”)忽略免打扰时段、对话进行中和每日3条限制,直接发送。但全局通知设置和技能门控仍然适用。
各系统通知的触发条件
每周报告
- 执行时间: 每周一 09:00 KST
- 所需技能:
finance - 数据条件: 过去30天内有记账记录
- 疲劳度检查: 适用
预算警告
- 执行时间: 每小时整点(每小时一次)
- 所需技能:
budget - 数据条件:
- 已设置至少1个预算类别
- 本月该类别支出 ≥ 预算的 90%
- 疲劳度检查: 免打扰时段 / 对话进行中适用;每日3条限制不适用
每日消费摘要
- 执行时间: 每天 21:00 KST
- 所需技能:
finance - 数据条件: 今天(KST) 有记账记录
- 疲劳度检查: 适用
不活跃提醒
- 执行时间: 每天 20:00 KST
- 所需技能:
proactive - 数据条件:
- 有历史记账记录,但
- 过去 3天内 没有记账记录
- 疲劳度检查: 适用
月末结算
- 执行时间: 每月28-31日 21:00 KST(仅在实际月末当天执行)
- 所需技能:
finance - 数据条件: 本月有记账记录
- 额外条件: 代码内部会再次确认是否为当月实际最后一天(cron表达式覆盖28-31日是为了处理不同月份的天数差异)
- 疲劳度检查: 适用
消费异常检测
- 执行时间: 每3小时一次
- 所需技能:
finance - 数据条件:
- 今天(KST)有记账记录
- 已累积 7天以上的数据
- 今日支出总计 > 30天日均值的 200%
- 疲劳度检查: 适用
消费模式洞察
- 执行时间: 每天 14:00 KST
- 所需技能:
pattern - 数据条件:
knowledge_base中已存储模式分析结果(pattern:analysis_result)- (→ 每天06:00的模式分析后台任务必须先运行)
- 模式置信度 ≥ 0.6
- 存储的模式触发器与当前星期/日期匹配
- 疲劳度检查: 适用
目标进度报告
- 执行时间: 每周三 12:00 KST
- 所需技能:
goals - 数据条件:
knowledge_base中存在status='active'的目标 - 疲劳度检查: 适用
D-Day 通知
- 执行时间: 每天 08:00 KST
- 所需技能:
dday - 数据条件:
ddays表中有登记的项目- 今天对应 D-30、D-7、D-3、D-1 或 D-0 之一
- 重复(recurring)项目按今年或明年计算日期
- 疲劳度检查: 适用
纯后台任务(无通知)
以下任务仅分析和存储数据,不发送通知。不可禁用。
模式分析
- 执行时间: 每天 06:00 KST
- 所需技能:
pattern - 条件: 过去30天内有记账记录
- 输出: 存储到
knowledge_base.key='pattern:analysis_result' - 依赖关系: 消费模式洞察通知的前置任务
对话分析
- 执行时间: 每10分钟(仅在满足条件时实际运行)
- 所需技能:
diary - 条件:
- 用户有发送消息的历史记录
- 上次消息后已空闲 30分钟至2小时
- 不在免打扰时段(22:00–08:00)
- 同一空闲会话不重复分析
- 输出: 对话分析结果存储(可在AI记忆页面查看)
目标评估
- 执行时间: 每天 07:00 KST
- 所需技能:
goals - 条件: 有活跃目标
- 输出: 评估结果存储到
knowledge_base
每周记忆压缩
- 执行时间: 每周一 05:00 KST
- 所需技能: 无(始终运行)
- 条件: 过去30天内有记账记录
- 输出: 将上周的每日日志压缩为每周摘要并保存
用户创建的计划
- 检查间隔: 每15分钟查询所有活跃计划
- 所需技能:
schedule - 触发条件:
- 计划
status='active' - 当前时间在预定时间的 ±15分钟 以内
- 今天尚未发送(检查
last_sent)
- 计划
- 计划类型:
one_time:在指定日期+时间发送一次,标记为completedrecurring:按星期+时间重复发送,更新last_sent
| 疲劳度条件 | 用户创建的计划 |
|---|---|
| 免打扰时段(22–08时) | 忽略 |
| 对话进行中(1小时内) | 忽略 |
| 每日3条限制 | 忽略 |
| 全局通知禁用 | 适用 |
技能门控(schedule) |
适用 |
技能门控汇总
如果通知所需技能被禁用,则不会发送通知。请在设置 > 技能中确认。
| 通知 | 所需技能 | 无技能时 |
|---|---|---|
| 每周报告 | finance |
不发送 |
| 预算警告 | budget |
不发送 |
| 每日摘要 | finance |
不发送 |
| 不活跃提醒 | proactive |
不发送 |
| 月末结算 | finance |
不发送 |
| 消费异常检测 | finance |
不发送 |
| 消费模式洞察 | pattern |
不发送 |
| 目标进度报告 | goals |
不发送 |
| D-Day 通知 | dday |
不发送 |
| 用户创建的计划 | schedule |
不发送 |
| 模式分析(后台) | pattern |
不运行 |
| 对话分析(后台) | diary |
不运行 |
| 目标评估(后台) | goals |
不运行 |
| 每周记忆压缩 | 无 | 始终运行 |
故障排除:通知未到达时
检查清单(按顺序从上往下检查)
□ 1. 技能激活状态
在设置 > 技能中确认所需技能已开启
□ 2. Telegram 连接状态
在设置 > 频道中确认 Telegram 已连接
□ 3. 全局通知设置
在设置中确认通知已启用
□ 4. 单个通知状态
在通知中心 > 系统标签页确认该通知已开启
□ 5. 当前时间确认
22:00–08:00 KST 之间因免打扰时段策略被拦截
□ 6. 今日通知数量
自动通知每日最多3条。若已收到3条以上,请在午夜后再次确认
□ 7. 数据充足性
- 消费异常检测:需要7天以上数据
- 消费模式洞察:需要分析结果且置信度≥0.6
- 不活跃提醒:需要有历史记录且最近3天无记录
□ 8. 用户创建的计划 — 时间窗口
系统每15分钟检查一次,最多可能有15分钟延迟
检查时必须在预定时间的±15分钟以内
完整计划时间表
| 时间(KST) | 执行任务 |
|---|---|
| 05:00(周一) | 每周记忆压缩 |
| 06:00 | 模式分析(后台) |
| 07:00 | 目标评估(后台) |
| 08:00 | D-Day 通知 |
| 09:00(周一) | 每周报告 |
| 12:00(周三) | 目标进度报告 |
| 14:00 | 消费模式洞察 |
| 20:00 | 不活跃提醒 |
| 21:00 | 每日摘要、月末结算 |
| 每小时 | 预算警告 |
| 每3小时 | 消费异常检测 |
| 每10分钟 | 对话分析条件检查 |
| 每15分钟 | 用户创建计划检查 |