AI PLAY玩法更新持续收录
← 回到更新流

2026-10-06 · 原文发布日

银行短信自动记账并用Telegram问账

这个n8n模板把安卓手机转发的银行短信通过带鉴权的webhook接收,解析出金额、收支方向、商户、卡号后四位等字段,OTP和陌生发件人会被拒收。完整交易写入Google Sheets账本,信息不全的进复核标签页;另配一个由Claude驱动的Telegram机器人,可读账本和复核队列回答花销问题。模板免费。

原文要点

这个免费n8n模板分两条线:一是安卓短信转发器把银行短信POST到带HTTP Header Auth的webhook,解析代码提取金额、借贷方向、日期、商户、支付方式、参考号、卡号后四位,OTP和不在白名单的发件人直接拒收(返回422);完整交易upsert进Google Sheets的Expenses表,信息不全的进Review_Queue表(都返回200 JSON)。二是Telegram触发器接一个用Anthropic Claude的LangChain agent,带短期记忆,可读Expenses和Review_Queue并用计算器工具做精确计算,纯文本回复到原聊天。

这次做成什么

用合成银行短信在本站练习中跑通‘鉴权接收→解析→分流记账’主线,并搭一个能回答花销问题的Telegram查询机器人。练习用隔离的测试Sheet和虚构短信,不碰真实银行账户。解析正则需按你自己银行短信格式调整,原模板的具体解析代码需在模板页核对。

准备什么

  • 一个n8n实例,webhook地址能被手机访问到
  • Google账号及新建Sheet(含Expenses和Review_Queue两个标签页)
  • Telegram账号,能通过BotFather建bot
  • Anthropic API key(Claude调用计费);练习主线不用真安卓手机,用curl发合成短信即可

具体怎么做

  1. 建账本Sheet并接凭据

    新建Google Sheet,建Expenses标签页,列:date, amount, direction, merchant, method, refId, accountLast4, rawText, eventId;建Review_Queue标签页用同样列加reason。n8n里配置Google Sheets OAuth2凭据,后续所有Sheets节点选这个文档。

  2. 配鉴权webhook并造白名单

    Webhook节点设POST路径如/bank-sms,认证方式选Header Auth,新建凭据如X-Relay-Key: 一串随机长字符串。解析Code节点里维护allowedSenders数组,练习期填['TEST-BANK','BANK-SIM']这类虚构发件人ID;真实使用时换成你银行的短信端口号。解析逻辑:先拒收含OTP/验证码关键词的,再按正则抽金额和借贷关键词,抽不齐关键字段(金额、方向)的进Review_Queue,抽齐的upsert进Expenses(以refId或eventId去重)。

  3. 用curl发合成短信测试三分支

    用下面材料的三条curl命令分别测:完整交易应返回200且Expenses新增一行;缺商户名的应返回200且进Review_Queue;含OTP的应返回422且两张表都不动。逐条核对结果后再往下做。

  4. 搭Telegram查询机器人

    BotFather处/newbot拿token,n8n加Telegram凭据。Telegram Trigger节点收消息→AI Agent节点(Chat Model选Anthropic Claude,加Window Buffer Memory短期记忆)→挂两个Google Sheets工具(读Expenses、读Review_Queue)和一个Calculator工具→Telegram节点把agent的纯文本回复发回原chat_id。System提示词用下面材料,强调算总数必须走计算器、不要心算。

可直接复制的材料

三条合成测试短信与curl命令

全部为虚构测试数据;webhook地址和X-Relay-Key要换成你的;真实使用时sender换成银行真实发件ID。

# 完整交易(应进Expenses,返回200)
curl -X POST https://你的n8n地址/webhook/bank-sms -H 'X-Relay-Key: 你的随机密钥' -H 'Content-Type: application/json' -d '{"sender":"TEST-BANK","message":"Your card ending 4521 was debited EUR 23.50 at CAFE LUMIERE on 06/10/2026. Ref: TXN884201.","event_id":"test-001","sent_at":"2026-10-06T09:15:00Z"}'
# 缺商户(应进Review_Queue,返回200)
curl -X POST https://你的n8n地址/webhook/bank-sms -H 'X-Relay-Key: 你的随机密钥' -H 'Content-Type: application/json' -d '{"sender":"TEST-BANK","message":"EUR 12.00 credited to your account ending 4521 on 06/10/2026.","event_id":"test-002","sent_at":"2026-10-06T10:02:00Z"}'
# OTP(应返回422,两表均不动)
curl -X POST https://你的n8n地址/webhook/bank-sms -H 'X-Relay-Key: 你的随机密钥' -H 'Content-Type: application/json' -d '{"sender":"TEST-BANK","message":"Your OTP is 482913. Do not share it with anyone.","event_id":"test-003","sent_at":"2026-10-06T10:05:00Z"}'

Telegram记账agent的system提示词(可粘贴)

本站独立编写;工具名按你在Agent节点里实际挂载的名称调整。

你是个人记账助手。用户用中文问花销问题时,先用Google Sheets工具读取Expenses账本(必要时也看Review_Queue复核队列),任何加总、平均、差额计算必须调用Calculator工具,不要心算。回答用纯文本,不超过四行:先给结论数字,再列构成,最后提示复核队列里是否还有未确认条目影响准确性。如果没有相关数据,直接说账本里没有,不要编造。

输入与输出示例

本站虚构演示,非真实运行结果;实际回复取决于模型和工具配置。

输入

Expenses表里已有三条练习记录:CAFE LUMIERE 23.50 EUR(借)、METRO TICKETS 4.90 EUR(借)、SALARY OCT 2100.00 EUR(贷);Review_Queue有一条12.00 EUR贷方缺商户。用户在Telegram问:‘这个月到目前为止花了多少?’

对应输出

agent读取Expenses,调Calculator算23.50+4.90=28.40,回复(示意):‘本月借记支出合计28.40 EUR:CAFE LUMIERE 23.50,METRO TICKETS 4.90。另有收入2100.00 EUR。注意:复核队列还有1条12.00 EUR入账未确认商户,不计入支出。’

做完检查这些

  • OTP测试短信返回422,且Expenses和Review_Queue两张表都没有新增行
  • 重复发送同一event_id的完整短信,Expenses里仍然只有一行(upsert去重生效)
  • 缺商户短信进入Review_Queue且reason字段写明了缺哪个字段
  • Telegram问‘花了多少’时,回复中的总额与手工核算完全一致,说明agent用了计算器而非心算

容易卡住的地方

  • X-Relay-Key泄露等于任何人都能往你账本写假交易,密钥要够长且绝不提交进git
  • allowedSenders不改成你银行的真实发件ID,所有真短信都会被422拒收
  • 不同银行短信格式差异极大,解析正则必须拿自己的真实短信样本逐条调试,别指望模板正则直接匹配中文银行短信
  • 短期记忆只在同一Telegram chat内有效,换群或私聊上下文不会延续
  • Claude API按token计费,账本行数多时每次问答都全量读表会推高成本,后续可加日期过滤

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Track bank SMS expenses with Google Sheets, Telegram and Claude
原作者
Prudhvi_N8N_official
原始发布日期
2026-10-05T18:21:30.320Z
来源
https://n8n.io/workflows/20482