yoooclaw-expense-tracker

从手机通知中提取个人已发生的消费流水(外卖、快递、缴费、购物、打车、加油、信用卡还款、转账等),按类目和时间汇总并给出总额。触发:花了多少 / 花销 / 消费 / 账单 / 开销 / 支出 / 这周/这个月/上个月/最近/今天 + 花/钱/消费 / 外卖花了多少 / 打车花了多少 / 加油多少 / 缴费多少。

Audits

Pass

Install

openclaw skills install yoooclaw-expense-tracker

expense-tracker

目标

面向个人用户:手机里塞满了银行短信、微信/支付宝支付通知、外卖订单、打车凭证、各类缴费成功提醒。本 skill 把这些"涉及钱"的通知抽出来,按类目时间两个维度汇总,并给出总支出

用户通过安装弹窗的「关注什么事」字段设置汇总偏好,如:每周汇总、重点看餐饮和出行、只关注大额消费等。

不假设特定的支付习惯、银行卡或商家——全部从通知数据中识别

数据加载策略

  • 先通过 openclaw ntf storage-path 获取通知存储目录(用 Bash 工具运行该命令,stdout 即是目录的绝对路径)。后续所有通知文件直接在这个目录下,命名为 YYYY-MM-DD.json
  • 文件命名YYYY-MM-DD.json,一天一文件,包含当日全部 App 通知
  • 加载优先级:① 用户在 prompt 里明确给的路径 > ② <storage-path>/<YYYY-MM-DD>.json
  • 时间窗口(按用户问法动态决定)
    • "今天花了多少" → 仅当天日期对应的文件
    • "昨天花了多少" → 仅昨天日期对应的文件
    • "这周/本周" → 本周一 00:00 至今
    • "上周" → 上周一至上周日
    • "这个月/本月" → 当月 1 日至今
    • "上个月" → 上月 1 日至上月末
    • "最近" / "最近几天" → 默认近 7 天
    • "最近 N 天" → 近 N 天
    • 用户给定具体日期段(如 "5/1-5/7")→ 严格按用户指定
    • 定时任务中根据「关注什么事」中的汇总周期决定:如"每周汇总"→ 近 7 天,"每月汇总"→ 当月至今
  • 跳过不存在的文件,不报错
  • openclaw ntf storage-path 不可用,提示用户给出数据路径
  • 若用户在问句里指定了类目(如"这周外卖花了多少"),在加载完后做类目过滤再展示

输入数据 schema

JSON 数组,每条:

{"appName":"com.tencent.xin","title":"群名或联系人名","content":"消息内容","timestamp":"2026-04-22T10:30:00.000+08:00","appDisplayName":"微信"}
  • appDisplayName 区分来源:微信 / 短信 / 支付宝 / 云闪付 / 美团 / 饿了么 / 滴滴出行 / 邮件 等
  • title 为发送方("工商银行"、"招商银行信用卡"、"美团外卖"、商家名、联系人名)
  • content 中通常含金额字段(¥X.XX / X.XX 元 / RMB X.XX)

核心逻辑

1. 金额信号识别

扫一遍全部通知,识别"已发生支付"的事件。重点信号:

  • 银行 / 信用卡短信:含「消费 / 支付 / 扣款 / 取现 / 还款 / POS / 网银 / 快捷支付 ¥X.XX」
  • 支付平台通知(支付宝、微信支付、云闪付):付款成功 / 转账已到账 / 收款 / 退款
  • 外卖订单(美团、饿了么等):订单已支付 / 已送达 + 实付金额
  • 打车 / 出行:行程结束 + 实付
  • 加油:加油站电子发票 / 油卡扣款短信
  • 生活缴费:水 / 电 / 燃气 / 物业 / 宽带 / 话费充值的"缴费成功"通知
  • 快递代收费:菜鸟驿站 / 丰巢取件费、超时保管费
  • 网购确认订单(淘宝 / 京东 / 拼多多 / 唯品会 等):付款成功通知
  • 商超 / 线下刷卡:银行短信里的 POS 消费
  • 转账:微信转账、支付宝转账给个人的(单独标记,不混入消费)
  • 退款 / 返现 / 红包退回:作为负值纳入对应类目,影响该类目和总额

每条事件抽取:{时间, 来源 App, 商家/标题, 金额, 类目, 备注}

2. 类目自动归类

Emoji类目典型来源
🍱餐饮外卖美团 / 饿了么 / 餐饮店刷卡 / 咖啡奶茶
📦快递物流菜鸟 / 丰巢 / 顺丰寄件 / 取件费
🏠生活缴费水电燃气 / 物业 / 宽带 / 话费
🚗出行交通滴滴 / 高德打车 / 地铁 / 高铁 / 加油
🛒购物淘宝 / 京东 / 拼多多 / 商超刷卡
💳信用卡还款信用卡还款短信、贷款扣款
🔁转账给个人的微信/支付宝转账(与消费分开统计
🎓教育培训机构 / 课外班缴费
💊医疗医院 / 药店 / 体检
🎁其他不能明确归入以上的

不能确定类目时一律归 🎁 其他,不要硬塞

如果用户在「关注什么事」中指定了重点类目(如"重点看餐饮和出行"),在输出中将这些类目置顶并高亮。

3. 去重

同一笔交易常被多个通知重复推送(银行短信 + 支付平台 App + 商家小程序)。去重规则:

  • 金额完全一致 + 商家关键词重叠 → 视为同一笔,保留信息最完整的一条(优先银行短信 > 支付平台 > 商家通知)
  • 不要把"待支付提醒"和"支付成功"算两次

4. 输出视图(按用户问法切换)

A. 总览模式("最近花了多少 / 今天花了多少 / 这周花了多少") 按类目 + 按日期两段都给出。

B. 单类目模式("这周外卖花了多少 / 这个月打车花了多少") 仅展示该类目,按日期列明细。

详见下文输出模板。

过滤规则

  • 营销 / 优惠券 / 满减推送("立减 X 元"、"满 X 减 Y"、"X 元红包待领取"、"返现 X 元活动")→ 丢弃。只看真实发生的支付。
  • 账单生成提醒("您的信用卡账单已生成 ¥X,还款日 ...")→ 不计入"花了多少";如果用户问的是"还要还多少"才单独列;本 skill 主流程不计入总额
  • 额度 / 余额变动通知里没有金额或不含商家的 → 列入"待确认"小节,不计入总额。
  • 股票 / 基金 / 理财收益变动 → 不算消费,丢弃。
  • 小红书 / 拼多多 / 抖音的纯运营推送、新品推荐、直播预告 → 丢弃。
  • 退款单独标记:在条目末尾用 (退款 -¥X.XX) 形式呈现并冲减总额。
  • 个人转账单独成块:转给家人朋友的微信/支付宝转账放在「🔁 转账」块,不计入"消费总支出",但单独给出"转账合计"。

输出模板

A. 总览模式

💰 消费汇总(YYYY-MM-DD ~ YYYY-MM-DD)

总支出:¥X,XXX.XX(共 N 笔)
转账合计(不计入支出):¥X,XXX.XX(M 笔)

━━ 按类目 ━━

  🍱 餐饮外卖   ¥XXX.XX(N 笔)
  🛒 购物       ¥XXX.XX(N 笔)
  🚗 出行交通   ¥XXX.XX(N 笔)
  🏠 生活缴费   ¥XXX.XX(N 笔)
  📦 快递物流   ¥XX.XX(N 笔)
  💳 信用卡还款 ¥XXX.XX(N 笔)
  ...

━━ 按日期 ━━

  M/D(周X)¥XXX.XX
    🍱 美团外卖   ¥XX.XX  <店名>
    🚗 滴滴打车   ¥XX.XX  <路线/起终点>
    🛒 淘宝       ¥XX.XX  <商品名>
  M/D(周X)¥XXX.XX
    ...

━━ 待确认 ━━(如有)
  ☐ <来源>:<原文摘要>,金额未识别

B. 单类目模式

🍱 餐饮外卖(YYYY-MM-DD ~ YYYY-MM-DD)

合计:¥XXX.XX(N 笔)

  M/D(周X)
    美团外卖 ¥XX.XX  <店名>
    瑞幸    ¥XX.XX
  M/D(周X)
    饿了么   ¥XX.XX  <店名>
  ...

质量约束

  • 含金额关键字(¥ / 元 / RMB / \d+\.\d{2})的支付/扣款/订单通知应100% 被抽取并归类
  • 去重:同一笔不能被算两次(典型反例:银行短信 + 支付宝 App 同时通知 ¥38.50 美团付款)
  • 总额自洽:按类目合计 = 按日期合计 = 顶部「总支出」
  • 退款用负数冲减,并在备注里注明 "(退款)"
  • 不编造:通知里没有金额或商家就不要硬填,归入"待确认"
  • 转账与消费严格分块,避免把转给亲友的钱算成"花掉了"