2026-10-13 · 原文发布日
拍小票发给Telegram机器人,自动记账到表格
向Telegram机器人发送收据照片或文件,流程下载图片后通过UploadToURL生成公开链接,交给OpenAI(gpt-4.1-mini)识别商家、日期、总额和税额并以严格JSON返回,解析后作为新行追加到Google Sheets记账表。搭建需要Telegram机器人、UploadToURL、OpenAI和Google Sheets四类凭据,表格需预先建好商家、日期、税额、总额四列。链路短小,适合个人随手记账场景。
原文要点
原作者Jitesh Dugar的n8n流程:Telegram Trigger接收收据图片或文档并下载文件,经UploadToURL生成公开永久链接,把链接发给OpenAI的gpt-4.1-mini,要求以严格JSON返回商家、日期、总额、税额四项,解析后追加新行到Google Sheets记账表。需要Telegram机器人、UploadToURL、OpenAI、Google Sheets四类凭据,表格需预建Vendor、Date、Tax、Total Amount四列。模板免费获取,但OpenAI API调用按用量计费。
这次做成什么
照着本文在n8n里搭一条完整链路:拍小票发给Telegram机器人,稍后记账表自动多一行商家、日期、税额、总额。因原模板只给出节点说明,本文按链路顺序给出每节点的独立配置方案与本站编写的识别提示词。
准备什么
- 一个可访问的n8n实例(云端或自托管均可),并能新建工作流
- 在Telegram找@BotFather创建机器人并取得Bot Token
- OpenAI API密钥且账户可使用gpt-4.1-mini模型
- Google账号及一个已建好表头的Google Sheets表格(Vendor、Date、Tax、Total Amount四列)
- UploadToURL服务的账号凭据,用于上传图片生成公开链接
具体怎么做
建表与机器人
在Google Sheets新建表格Expense Tracker,第一行表头依次填Vendor、Date、Tax、Total Amount。在Telegram里对@BotFather发送/newbot,按提示起名后拿到Bot Token,先给自己机器人发一条消息激活对话。
配置Telegram触发与下载
在n8n新建工作流,添加Telegram Trigger节点,Credentials里新建Telegram凭据粘贴Bot Token,Trigger选On message更新类型。测试一次:发一张小票照片给机器人,确认触发输出里有photo或document的file_id,再接Telegram节点(Operation: Get,Resource: File)用该file_id下载二进制文件。
上传图片生成公开链接
接UploadToURL节点,新建该服务凭据,把上一步的二进制文件上传,输出字段里取生成的公开URL。OpenAI视觉识别需要能直接访问的图片地址,这一步不可省略。
OpenAI识别并严格返回JSON
接OpenAI节点,模型选gpt-4.1-mini,新建OpenAI凭据。消息里放入artifacts中的识别提示词,把图片URL以图像内容形式传入,要求只输出JSON。解析节点(如Code节点)用JSON.parse读取返回内容,并把字段映射为vendor、date、tax、total。
追加到Google Sheets并验证
接Google Sheets节点,Operation选Append,连接Google OAuth2凭据,选择Expense Tracker和对应工作表,把四列分别映射到解析结果字段。激活工作流后实拍一张小票发给机器人,到表格确认新增一行四列齐全。
可直接复制的材料
小票识别提示词(粘贴到OpenAI节点的系统/用户消息)
本站独立编写,覆盖原文要求的vendor/date/total/tax四字段,可直接粘贴,无需替换。
你是一个收据信息提取器。用户会给你一张购物小票的照片。请仔细观察图片,只提取以下四个字段,并严格以JSON对象返回,不要输出任何其他文字、解释或Markdown代码块:
{"vendor": "商家名称(字符串)", "date": "交易日期,格式YYYY-MM-DD(字符串)", "total": 含税总额(数字,不含货币符号), "tax": 税额(数字,不含货币符号;若小票未单列税额则填0)}
规则:日期必须是图片上印刷的日期;金额为数字类型;无法辨认的字段填null;除JSON外不输出任何字符。Telegram触发测试用输入说明
本站虚构的Telegram更新结构示例,用于理解file_id从哪里来;实际file_id由你发图后Telegram返回,不可照抄此值。
{
"message": {
"photo": [{"file_id": "AgACAgIAAxkDAAExampleFileId001", "width": 1280, "height": 960}],
"caption": "午餐小票",
"from": {"id": 123456789}
}
}Google Sheets列映射配置
本站示例映射,documentId和sheetName需替换为你自己的表格;字段名与提示词输出严格对应。
{
"operation": "append",
"documentId": "你的表格ID",
"sheetName": "Sheet1",
"columns": {
"Vendor": "={{$json.vendor}}",
"Date": "={{$json.date}}",
"Tax": "={{$json.tax}}",
"Total Amount": "={{$json.total}}"
}
}输入与输出示例
本站虚构演示输入与示意输出,未实际调用OpenAI,真实识别结果以模型返回为准。
输入
向机器人发送一张虚构午餐小票照片,票上印着:川香居面馆,2026-10-12,消费合计¥38.50,其中税额¥2.18。对应输出
OpenAI返回{"vendor":"川香居面馆","date":"2026-10-12","total":38.50,"tax":2.18};Google Sheets新增一行:Vendor=川香居面馆 | Date=2026-10-12 | Tax=2.18 | Total Amount=38.50。做完检查这些
- 给机器人发一张清晰小票照片后,Telegram Trigger能触发并下载到非空的二进制文件
- UploadToURL输出的URL在浏览器无痕窗口也能直接打开看到图片
- OpenAI返回内容可被JSON.parse直接解析,不含Markdown代码块或多余文字
- Google Sheets中新增一行的四列与提示词字段一一对应,税额缺失的小票Tax列填0
容易卡住的地方
- Telegram Trigger必须先激活工作流或点Listen for test event,否则发消息不触发
- OpenAI节点需要可公开访问的图片URL,直接传Telegram的文件地址会失败,必须经过UploadToURL一类服务
- 如果OpenAI凭据没有gpt-4.1-mini权限会报模型不可用错误,需先在OpenAI账户确认
- 表格表头列名与映射键不一致时Append会写错列或失败,建表时严格用Vendor、Date、Tax、Total Amount
- OpenAI API按用量计费,免费的是模板本身而非模型调用
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Extract receipt data from Telegram and log expenses to Google Sheets with OpenAI
- 原作者
- Jitesh Dugar
- 原始发布日期
- 2026-10-13T15:50:02.192Z
- 来源
- https://n8n.io/workflows/20887