8
n8n 한국어amn8n.com

AI Gmail 영수증 자동 저장

중급

이것은Invoice Processing, AI Summarization분야의자동화 워크플로우로, 14개의 노드를 포함합니다.주로 Set, Gmail, Merge, GoogleDrive, GoogleSheets 등의 노드를 사용하며. AI자동保存Gmail收据로Google表格및Google云端硬盘

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • Google Drive API 인증 정보
  • Google Sheets API 인증 정보
  • OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "nd9yWEb16mznm5tg",
  "meta": {
    "instanceId": "a51f0c866a8392141497eefec55e5e9a9643a767ce369c214fb54b78c285cd5a",
    "templateCredsSetupCompleted": true
  },
  "name": "AI Auto-Save Gmail Receipts",
  "tags": [],
  "nodes": [
    {
      "id": "8fdd8f41-acfd-4430-bdfe-b9a43ea81dcc",
      "name": "스케줄 트리거",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        -640
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 8
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a8c74ce2-0665-4c34-8e06-1a412f249be4",
      "name": "AI 에이전트",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1100,
        -640
      ],
      "parameters": {
        "text": "=You are an expert assistant that extracts receipt fields for tax tracking.\n\nHere is the full receipt text:\n{{ $json.text }}\n\nExtract and return a single JSON object with the following fields:\n- \"date\": Format as YYYY-MM-DD.\n- \"merchant\": Name of business or company issuing the receipt. If a value is missing, return `null`.\n- \"category\": Infer based on context (e.g. Meals, Software, Travel, Office Supplies).\n- \"description\": A short summary of the service or item purchased (e.g. “Domain name renewal for 2 years”). If a value is missing, return `null`.\n- \"subtotal\": Value before GST. Extract only if clearly labeled.If a value is missing, return 0.\n- \"tax\": The Goods and Services Tax amount (labelled as GST or Tax). Return 0 if not present.If a value is missing, return 0.\n- \"total\": Final amount paid (after tax). If a value is missing, return 0.\n- \"id\": {{ $json.id }}\n- \"threadId\": {{ $json.threadId }}\n\n\n\nRespond ONLY with a JSON object, like this:\n{\n  \"date\": \"2025-03-12\",\n  \"merchant\": \"Vendor\",\n  \"category\": \"Software\",\n  \"description\": \"Subscribe for 2 years\",\n  \"subtotal\": 45.32,\n  \"tax\": 4.53,\n  \"total\": 49.85\n}\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "retryOnFail": true,
      "typeVersion": 2
    },
    {
      "id": "1b97d088-fcaf-45dd-9d86-acb381984cc0",
      "name": "OpenAI 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1128,
        -420
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4",
          "cachedResultName": "gpt-4"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "__PLACEHOLDER__",
          "name": "openAiApi Account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5084e1bc-349b-4806-8954-c97a3d26d333",
      "name": "구조화된 출력 파서",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1248,
        -420
      ],
      "parameters": {
        "schemaType": "manual",
        "inputSchema": "{\n  \"type\": \"object\",\n  \"properties\": {\n    \"date\": {\n      \"type\": \"string\",\n      \"format\": \"date\"\n    },\n    \"merchant\": {\n      \"type\": \"string\"\n    },\n    \"category\": {\n      \"type\": \"string\"\n    },\n    \"description\": {\n      \"type\": \"string\"\n    },\n    \"subtotal\": {\n      \"type\": \"number\"\n    },\n    \"tax\": {\n      \"type\": \"number\"\n    },\n    \"total\": {\n      \"type\": \"number\"\n    },\n    \"id\": {\n      \"type\": \"string\"\n    }\n    ,\n    \"threadId\": {\n      \"type\": \"string\"\n    }\n  },\n  \"required\": [\"date\", \"merchant\", \"category\", \"description\", \"subtotal\", \"tax\", \"total\", \"id\", \"threadId\"]\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "174f31ac-0849-47aa-8ff1-751d74e952e1",
      "name": "영수증이 포함된 이메일 가져오기",
      "type": "n8n-nodes-base.gmail",
      "position": [
        220,
        -640
      ],
      "webhookId": "__PLACEHOLDER__",
      "parameters": {
        "simple": false,
        "filters": {
          "q": "has:attachment",
          "labelIds": [
            "Label_3361902760602362460"
          ],
          "readStatus": "unread"
        },
        "options": {},
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "__PLACEHOLDER__",
          "name": "gmailOAuth2 Account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "8fcc7b91-267b-4572-9948-b7a4215cbf44",
      "name": "필요한 필드 가져오기",
      "type": "n8n-nodes-base.set",
      "position": [
        660,
        -440
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "d9d2348c-eca4-4255-a6a9-de29ca06f2c6",
              "name": "id",
              "type": "string",
              "value": "={{ $json.id }}"
            },
            {
              "id": "8685f151-93c4-4eca-8378-ea6ec7b03631",
              "name": "threadId",
              "type": "string",
              "value": "={{ $json.threadId }}"
            },
            {
              "id": "695604d2-438d-4168-9747-f46a84f289ad",
              "name": "textAsHtml",
              "type": "string",
              "value": "={{ $json.textAsHtml }}"
            },
            {
              "id": "4fe59ba7-e736-4911-8080-f0cbb94db73d",
              "name": "subject",
              "type": "string",
              "value": "={{ $json.subject }}"
            },
            {
              "id": "288351d6-9248-4e84-b96d-006f14d0f6c3",
              "name": "date",
              "type": "string",
              "value": "={{ $json.date }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "04b2b190-b370-411c-844c-2d8275aa1579",
      "name": "첨부 파일 다운로드",
      "type": "n8n-nodes-base.gmail",
      "position": [
        440,
        -640
      ],
      "webhookId": "__PLACEHOLDER__",
      "parameters": {
        "simple": false,
        "options": {
          "downloadAttachments": true
        },
        "messageId": "={{ $json.id }}",
        "operation": "get"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "__PLACEHOLDER__",
          "name": "gmailOAuth2 Account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "34256129-d04a-4e01-86cc-6a5b2108b954",
      "name": "Google 시트에 추가",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1476,
        -740
      ],
      "parameters": {
        "columns": {
          "value": {
            "Tax": "{{ $json.output.tax}}",
            "Date": "={{ $json.output.date }}",
            "Total": "={{ $json.output.total }}",
            "Merchant": "={{ $json.output.merchant }}",
            "Subtotal": "={{ $json.output.subtotal }}",
            "Category ": "={{ $json.output.category }}",
            "Description": "={{ $json.output.description }}"
          },
          "schema": [
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Merchant",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Merchant",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Category ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Category ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Subtotal",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Subtotal",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Total",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Tax",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Tax",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "__YOUR_SHEETNAME__",
          "cachedResultUrl": "__PLACEHOLDER__",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "__YOUR_DOCUMENTID__",
          "cachedResultUrl": "__PLACEHOLDER__",
          "cachedResultName": "Receipts"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "id": "__PLACEHOLDER__",
          "name": "googleSheetsOAuth2Api Account"
        }
      },
      "typeVersion": 4.6,
      "alwaysOutputData": true
    },
    {
      "id": "1288f2c7-732b-4e35-9d4d-4b20c5f61171",
      "name": "데이터 병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        880,
        -640
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition",
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "e67ccaae-5bbc-4023-abbc-c9733d11198c",
      "name": "파일 업로드",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        660,
        -840
      ],
      "parameters": {
        "name": "={{ \n  (() => {\n    const date = $json.date.slice(0, 10).replace(/-/g, '');\n    const sender = ($json.from?.value?.[0]?.name || 'Unknown').trim();\n    const cleanSender = sender\n      .replace(/[^a-zA-Z0-9]/g, '_')   // replace non-alphanumeric\n      .replace(/_+/g, '_')             // collapse repeated _\n      .replace(/^_+|_+$/g, '');        // trim leading/trailing _\n    return `${date}_${cleanSender}`;\n  })()\n}}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive",
          "cachedResultUrl": "__PLACEHOLDER__",
          "cachedResultName": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "url",
          "value": "__YOUR_FOLDERID__"
        },
        "inputDataFieldName": "attachment_0"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "__PLACEHOLDER__",
          "name": "googleDriveOAuth2Api Account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "36288b85-6591-4f4a-8637-bf21c8aea23e",
      "name": "송장에서 데이터 추출",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        660,
        -640
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "attachment_0"
      },
      "typeVersion": 1
    },
    {
      "id": "b9494f63-29ae-42fa-b4ce-6509119d234b",
      "name": "이메일을 읽음으로 표시",
      "type": "n8n-nodes-base.gmail",
      "position": [
        1476,
        -540
      ],
      "webhookId": "__PLACEHOLDER__",
      "parameters": {
        "messageId": "={{ $json.output.id }}",
        "operation": "markAsRead"
      },
      "credentials": {
        "gmailOAuth2": {
          "id": "__PLACEHOLDER__",
          "name": "gmailOAuth2 Account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "c482e032-f3f4-49d5-81b0-c2ef7f191b13",
      "name": "스티키 노트",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        520,
        -1000
      ],
      "parameters": {
        "width": 380,
        "height": 320,
        "content": "### 📤 Upload Receipt to Google Drive\nThis node saves the PDF attachment from the email to your Google Drive.\n- Double-click to choose the destination folder\n- Make sure Google Drive credentials are set up in **Credentials > Google Drive**\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f724e9e1-0de2-4db8-b221-ed5692dc0ab4",
      "name": "스티키 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -120,
        -840
      ],
      "parameters": {
        "width": 320,
        "height": 400,
        "content": "### 🕒 Entry Point – Auto-Run This Flow\nThis node controls when the flow is triggered (currently 8am daily).\n- You can change the schedule from cron to manual\n- Starts the chain of pulling emails, extracting data, and saving to Drive + Sheets\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "0ebecebd-a40a-4c41-bba3-12866c150052",
  "connections": {
    "a8c74ce2-0665-4c34-8e06-1a412f249be4": {
      "main": [
        [
          {
            "node": "34256129-d04a-4e01-86cc-6a5b2108b954",
            "type": "main",
            "index": 0
          },
          {
            "node": "b9494f63-29ae-42fa-b4ce-6509119d234b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1288f2c7-732b-4e35-9d4d-4b20c5f61171": {
      "main": [
        [
          {
            "node": "a8c74ce2-0665-4c34-8e06-1a412f249be4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e67ccaae-5bbc-4023-abbc-c9733d11198c": {
      "main": [
        [
          {
            "node": "1288f2c7-732b-4e35-9d4d-4b20c5f61171",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8fdd8f41-acfd-4430-bdfe-b9a43ea81dcc": {
      "main": [
        [
          {
            "node": "174f31ac-0849-47aa-8ff1-751d74e952e1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1b97d088-fcaf-45dd-9d86-acb381984cc0": {
      "ai_languageModel": [
        [
          {
            "node": "a8c74ce2-0665-4c34-8e06-1a412f249be4",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "04b2b190-b370-411c-844c-2d8275aa1579": {
      "main": [
        [
          {
            "node": "e67ccaae-5bbc-4023-abbc-c9733d11198c",
            "type": "main",
            "index": 0
          },
          {
            "node": "8fcc7b91-267b-4572-9948-b7a4215cbf44",
            "type": "main",
            "index": 0
          },
          {
            "node": "36288b85-6591-4f4a-8637-bf21c8aea23e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8fcc7b91-267b-4572-9948-b7a4215cbf44": {
      "main": [
        [
          {
            "node": "1288f2c7-732b-4e35-9d4d-4b20c5f61171",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "34256129-d04a-4e01-86cc-6a5b2108b954": {
      "main": [
        []
      ]
    },
    "174f31ac-0849-47aa-8ff1-751d74e952e1": {
      "main": [
        [
          {
            "node": "04b2b190-b370-411c-844c-2d8275aa1579",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5084e1bc-349b-4806-8954-c97a3d26d333": {
      "ai_outputParser": [
        [
          {
            "node": "a8c74ce2-0665-4c34-8e06-1a412f249be4",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "36288b85-6591-4f4a-8637-bf21c8aea23e": {
      "main": [
        [
          {
            "node": "1288f2c7-732b-4e35-9d4d-4b20c5f61171",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

중급 - 청구서 처리, AI 요약

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
중급
노드 수14
카테고리2
노드 유형11
난이도 설명

일정 경험을 가진 사용자를 위한 6-15개 노드의 중간 복잡도 워크플로우

저자
Matt Chong

Matt Chong

@mattxchong

Automation nerd fueled by good coffee, deep curiosity, and clean flows.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34