使用Gmail、OpenAI和Google Drive提取和分类发票与收据
高级
这是一个Finance, AI, IT Ops领域的自动化工作流,包含 20 个节点。主要使用 If, Set, Code, Gmail, Merge 等节点,结合人工智能技术实现智能自动化。 使用Gmail、OpenAI和Google Drive提取和分类发票与收据
前置要求
- •Google 账号和 Gmail API 凭证
- •HTTP Webhook 端点(n8n 会自动生成)
- •Google Drive API 凭证
- •OpenAI API Key
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "d1b60f1865ef6504ee3af5be4ef9a7387762b4132615a52de808456d52e8d336",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "c84f3a9a-66b3-4a09-b06a-9b399ea574b8",
"name": "OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
420,
-240
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "GPT-4.1-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "=Does this PDF file look like a {{ $(\"Configure\").first().json[\"Match on\"] }}? Return \"true\" if it is a {{ $(\"Configure\").first().json[\"Match on\"] }} and \"false\" if not. Only reply with lowercase letters \"true\" or \"false\".\n\nThis is the PDF filename:\n```\n{{ $binary.data.fileName }}\n```\n\nThis is the PDF text content:\n```\n{{ $json.text }}\n```"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "prYAbsQvWl1pPbdL",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "ea1fbc5b-1859-4d65-8401-30baa95fcc52",
"name": "配置",
"type": "n8n-nodes-base.set",
"position": [
-700,
0
],
"parameters": {
"values": {
"number": [
{
"name": "maxTokenSize",
"value": 8000
},
{
"name": "replyTokenSize",
"value": 50
}
],
"string": [
{
"name": "Match on",
"value": "receipt or invoice that can be considered a software engineering business cost"
},
{
"name": "Google Drive folder to upload matched PDFs",
"value": "https://drive.google.com/drive/folders/[put_folder_id_here]"
},
{
"name": "sendInvoicesTo"
}
],
"boolean": [
{
"name": "sendEmail",
"value": "={{ $('Webhook').item.json.body.sendEmail === \"true\" }}"
}
]
},
"options": {}
},
"typeVersion": 1
},
{
"id": "3ee63612-c1e7-40e6-a38f-f77f5ee3efa4",
"name": "遍历邮件附件",
"type": "n8n-nodes-base.code",
"position": [
-200,
0
],
"parameters": {
"jsCode": "// https://community.n8n.io/t/iterating-over-email-attachments/13588/3\nlet results = [];\n\nfor (const item of $input.all()) {\n console.log(item);\n for (const key of Object.keys(item.binary)) {\n results.push({\n json: {},\n binary: {\n data: item.binary[key],\n }\n });\n }\n}\n\nreturn results;"
},
"typeVersion": 1
},
{
"id": "3e638471-c1c5-4bab-aa2a-12a1777225ec",
"name": "非PDF文件",
"type": "n8n-nodes-base.noOp",
"position": [
120,
80
],
"parameters": {},
"typeVersion": 1
},
{
"id": "b5af902b-2d59-49ee-b6d8-e387c59b89fd",
"name": "文本是否在令牌限制内?",
"type": "n8n-nodes-base.if",
"position": [
300,
-100
],
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.text.length() / 4 <= $('Configure').first().json.maxTokenSize - $('Configure').first().json.replyTokenSize }}",
"value2": true
}
]
}
},
"typeVersion": 1
},
{
"id": "a0a8895c-ef8b-44e7-9294-1bcf629d0973",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
720,
-120
],
"parameters": {
"mode": "combine",
"options": {
"clashHandling": {
"values": {
"resolveClash": "preferInput1"
}
}
},
"combinationMode": "mergeByPosition"
},
"typeVersion": 2
},
{
"id": "7565118a-6d44-4583-a19f-cb4177378d33",
"name": "是否匹配",
"type": "n8n-nodes-base.if",
"position": [
880,
-120
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.message.content }}",
"value2": "true"
}
]
}
},
"typeVersion": 1
},
{
"id": "074ffb7a-f83e-44b8-84fe-7b85f7245bb0",
"name": "上传文件到文件夹",
"type": "n8n-nodes-base.googleDrive",
"position": [
1100,
-140
],
"parameters": {
"name": "={{ $binary.data.fileName }}",
"options": {},
"parents": [
"={{ $('Create folder').first().json.id }}"
],
"binaryData": true
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "xXHySx4T77sDdTqY",
"name": "Google Drive account"
}
},
"typeVersion": 2
},
{
"id": "7681eb62-ba86-4c89-9b88-3ce6fc438bd4",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-1080,
0
],
"webhookId": "cded3af3-31df-47c2-a826-ff84eb4a41df",
"parameters": {
"path": "cded3af3-31df-47c2-a826-ff84eb4a41df",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode",
"authentication": "headerAuth"
},
"credentials": {
"httpHeaderAuth": {
"id": "90SsOYPPIe3Qv5Rq",
"name": "Header Auth account"
}
},
"typeVersion": 2
},
{
"id": "aab3d940-55c2-40d3-917a-83412d4e378d",
"name": "响应 Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-720,
-240
],
"parameters": {
"options": {
"responseCode": 202
},
"respondWith": "json",
"responseBody": "={\n \"status\": \"Accepted\",\n \"driveFolderUrl\": \"{{ \"https://drive.google.com/drive/folders/\" + $json.id }}\"\n}"
},
"typeVersion": 1.1
},
{
"id": "29a4122f-0112-4157-a50d-0a6cf83ab7fd",
"name": "创建文件夹",
"type": "n8n-nodes-base.googleDrive",
"position": [
-920,
0
],
"parameters": {
"name": "={{ \"invoices_\" + $json.body.startDate.split('T')[0] }}",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "root",
"cachedResultName": "/ (Root folder)"
},
"resource": "folder"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "xXHySx4T77sDdTqY",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "df86428f-7e63-4fd9-944c-f48af72af495",
"name": "聚合附件",
"type": "n8n-nodes-base.code",
"position": [
1200,
-340
],
"parameters": {
"jsCode": "// \"items\" is the array coming from the previous node (14 items)\nconst merged = { json: {}, binary: {} };\n\nfor (const item of $input.all()) {\n const data = {\n [item.binary.data.fileName]: item.binary.data\n };\n Object.assign(merged.binary, data); // copy every file property\n}\n\nreturn [merged]; // one single item goes out"
},
"typeVersion": 2
},
{
"id": "72a21bfa-6e3b-421a-a4ca-dea9e09a5b0b",
"name": "发送含发票的邮件?",
"type": "n8n-nodes-base.if",
"position": [
1000,
-320
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "63caf3d8-39bd-4300-aa7e-8c0ecfc87576",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('Configure').first().json.sendEmail }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "bb038635-eb69-447b-a85b-e9c3caebfe3a",
"name": "发送给我的会计师",
"type": "n8n-nodes-base.gmail",
"position": [
1360,
-280
],
"webhookId": "3ea4dac1-58fe-4d0e-811b-065ecaef77df",
"parameters": {
"sendTo": "test@example.com",
"message": "Hello, here are my invoices and receipts.",
"options": {
"attachmentsUi": {
"attachmentsBinary": [
{
"property": "={{ Object.keys($binary).join(',') }}"
}
]
}
},
"subject": "={{ \n (() => {\n const startDate = $node['Webhook'].json.body.startDate.split('T')[0];\n const endDate = $node['Webhook'].json.body.endDate.split('T')[0];\n return `Dokumenty kosztowe za okres od ${startDate} do ${endDate}`;\n })() \n}}",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "PPgHF95PrpAMBlbG",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "7b2e5c6c-0a95-4347-97a9-c9ffbc0e3af2",
"name": "获取带附件的邮件",
"type": "n8n-nodes-base.gmail",
"position": [
-500,
0
],
"webhookId": "6e2ca9f7-6d22-4d94-86bc-8a299bc8e752",
"parameters": {
"simple": false,
"filters": {
"q": "has:attachment",
"sender": "",
"receivedAfter": "={{ $('Webhook').item.json.body.startDate }}",
"receivedBefore": "={{ $('Webhook').item.json.body.endDate }}"
},
"options": {
"downloadAttachments": true,
"dataPropertyAttachmentsPrefixName": "attachment_"
},
"operation": "getAll",
"returnAll": true
},
"credentials": {
"gmailOAuth2": {
"id": "PPgHF95PrpAMBlbG",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "6d5b2c1b-657d-44bf-980d-fd428fd8d832",
"name": "读取PDF邮件附件",
"type": "n8n-nodes-base.readPDF",
"onError": "continueErrorOutput",
"position": [
120,
-80
],
"parameters": {},
"notesInFlow": false,
"typeVersion": 1
},
{
"id": "3166f45c-306f-483a-b2c6-6768abc916a0",
"name": "附件是否为PDF?",
"type": "n8n-nodes-base.if",
"position": [
-40,
0
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $binary.data.fileExtension }}",
"value2": "pdf"
}
]
}
},
"typeVersion": 1
},
{
"id": "866b286a-7b9b-4506-aa6b-d2049b249991",
"name": "邮件可选过滤器",
"type": "n8n-nodes-base.filter",
"position": [
-360,
0
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "687c4cd0-ada5-4dc1-8707-1a9c3b551251",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.to.value[0].address }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "56133dba-bc93-4f65-be42-995164a45c03",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1600,
-340
],
"parameters": {
"width": 440,
"height": 880,
"content": "## Gmail PDF发票/收据分类器及Google Drive上传器(通过n8n和OpenAI)"
},
"typeVersion": 1
},
{
"id": "aa5d8126-e2ec-4476-886d-c46379f1c6e2",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-780,
-40
],
"parameters": {
"width": 260,
"height": 1000,
"content": "## 参数"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"Merge": {
"main": [
[
{
"node": "Is matched",
"type": "main",
"index": 0
}
]
]
},
"OpenAI": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Webhook": {
"main": [
[
{
"node": "Create folder",
"type": "main",
"index": 0
}
]
]
},
"Configure": {
"main": [
[
{
"node": "Get emails with attachments",
"type": "main",
"index": 0
}
]
]
},
"Is matched": {
"main": [
[
{
"node": "Upload file to folder",
"type": "main",
"index": 0
},
{
"node": "Send email with invoices?",
"type": "main",
"index": 0
}
]
]
},
"Create folder": {
"main": [
[
{
"node": "Configure",
"type": "main",
"index": 0
},
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Is attachment a PDF?": {
"main": [
[
{
"node": "Read PDF email attachments",
"type": "main",
"index": 0
}
],
[
{
"node": "Not a PDF",
"type": "main",
"index": 0
}
]
]
},
"Aggregate attachments": {
"main": [
[
{
"node": "Send to my accountant",
"type": "main",
"index": 0
}
]
]
},
"Send to my accountant": {
"main": [
[]
]
},
"Upload file to folder": {
"main": [
[]
]
},
"Send email with invoices?": {
"main": [
[
{
"node": "Aggregate attachments",
"type": "main",
"index": 0
}
]
]
},
"Optional filter for emails": {
"main": [
[
{
"node": "Iterate over email attachments",
"type": "main",
"index": 0
}
]
]
},
"Read PDF email attachments": {
"main": [
[
{
"node": "Is text within token limit?",
"type": "main",
"index": 0
}
]
]
},
"Get emails with attachments": {
"main": [
[
{
"node": "Optional filter for emails",
"type": "main",
"index": 0
}
]
]
},
"Is text within token limit?": {
"main": [
[
{
"node": "OpenAI",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
],
[]
]
},
"Iterate over email attachments": {
"main": [
[
{
"node": "Is attachment a PDF?",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 财务, 人工智能, IT 运维
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
[模板] AI宠物店 v8
🐶 AI宠物店助手 - 集成GPT-4o、Google日历和WhatsApp/Instagram/Facebook
If
N8n
Set
+38
244 节点Amanda Benks
销售
📊 WhatsApp和Telegram的AI令牌追踪器 - 将AI使用情况保存到Google表格
📊 WhatsApp和Telegram的AI令牌追踪器 - 将AI使用情况保存到Google表格
If
Set
Code
+15
37 节点Amanda Benks
财务
AI 代理餐厅 [模板]
🤖 WhatsApp、Instagram 和 Messenger 的 AI 餐厅助手
If
N8n
Set
+37
239 节点Amanda Benks
其他
使用GPT-4.1、Outlook和Mem.ai自动化Microsoft Teams会议分析
使用GPT-4.1、Outlook和Mem.ai自动化Microsoft Teams会议分析
If
Set
Code
+19
61 节点Wayne Simpson
人力资源
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他
🌍 AI WhatsApp翻译器 + 语音转录器与HubSpot集成
基于OpenAI Whisper和GPT-4的多语言WhatsApp翻译器,集成HubSpot
If
N8n
Set
+18
107 节点Amanda Benks
其他
工作流信息
难度等级
高级
节点数量20
分类3
节点类型13
作者
Tom
@devpeer-tomSoftware Engineer and Architect for well over 10 years. Chromium project expert. Full Stack beast. Workflow automation enthusiast. Founder of BrowseWiz: in-browser AI assistant and AI agent platform with human in-the-loop.
外部链接
在 n8n.io 查看 →
分享此工作流