8
n8n 한국어amn8n.com

Google 스프레드시트 -> 인보이스 생성 -> 이메일

고급

이것은자동화 워크플로우로, 18개의 노드를 포함합니다.주로 Set, Airtable, Aggregate, EmailSend, ManualTrigger 등의 노드를 사용하며. Airtable 및 CustomJS PDF 생성기를 활용한 인보이스 자동 생성 및 이메일 발송

사전 요구사항
  • Airtable API Key

카테고리

-
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "fB4si9amQw4D2TK2",
  "meta": {
    "instanceId": "b503899dfd9ae32bbf8e1f446a1f2c9b3c59f80c79b274c49b1606b7ae9579e1",
    "templateCredsSetupCompleted": true
  },
  "name": "Google Spreadsheet -> Invoice Generation -> Email",
  "tags": [],
  "nodes": [
    {
      "id": "c2e9a234-394c-4c5e-ab59-a5311fa61ed8",
      "name": "워크플로우 실행 시",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -144,
        16
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "1f9f59c4-9927-4a0f-8aaf-64488bdc5a13",
      "name": "메모",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -576
      ],
      "parameters": {
        "width": 864,
        "height": 448,
        "content": "# Invoice Management With Airtable \nHere you will find an example of how you can create \nand manage your invoices for free, easily, and beautifully:\n[Public Airtable Example](https://airtable.com/apphyDa3uYAq0VOMW/shrSe39NZYrqm4gtE)\n\n![Airtable Screenshot](https://www.beta.customjs.space/images/integration/n8n/InvoiceGeneratorWorkflow.png)"
      },
      "typeVersion": 1
    },
    {
      "id": "895fe916-1db2-4055-a87e-804a6be14383",
      "name": "송장 준비 가져오기",
      "type": "n8n-nodes-base.airtable",
      "position": [
        144,
        16
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblW46vfkwOFQJLMs",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblW46vfkwOFQJLMs",
          "cachedResultName": "Invoices"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "{Status} = 'Ready'"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "5c20d60e-72b3-45db-8df0-223676a7880e",
      "name": "고객 정보 가져오기",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1024,
        0
      ],
      "parameters": {
        "id": "={{ $('Get Ready Invoices').item.json['Client ID'][0] }}",
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblQdiFVsZ9w3sahJ",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblQdiFVsZ9w3sahJ",
          "cachedResultName": "Clients"
        },
        "options": {}
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "1da85e53-eaf2-4928-b1bb-0d2d7eb56056",
      "name": "메모1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1184,
        -96
      ],
      "parameters": {
        "color": 2,
        "width": 416,
        "height": 560,
        "content": "## Define Your Company Details\nHere you can customize your own company details."
      },
      "typeVersion": 1
    },
    {
      "id": "047f3d97-760b-4307-a17f-a92d4c8f268d",
      "name": "송장 항목 가져오기",
      "type": "n8n-nodes-base.airtable",
      "position": [
        528,
        128
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblASYLVpsnrUoKt5",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblASYLVpsnrUoKt5",
          "cachedResultName": "Invoice-Items"
        },
        "options": {},
        "operation": "search",
        "filterByFormula": "=FIND(\"{{ $json.ID }}\", ARRAYJOIN({Invoice}))"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "3e86f778-d65a-47c6-8fd4-83b8063174e1",
      "name": "집계",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        848,
        128
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "items"
      },
      "typeVersion": 1
    },
    {
      "id": "32205005-9879-4abe-be18-d77126675ccb",
      "name": "항목 순환 처리",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        352,
        16
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "9e68a44d-f0d2-407b-88fb-bf97032504b0",
      "name": "메모2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2144,
        -96
      ],
      "parameters": {
        "color": 5,
        "width": 416,
        "height": 560,
        "content": "## Mark Invoices as \"Sent\"\nFinally, the invoices are set to “Sent” so that they will never be reloaded again next time."
      },
      "typeVersion": 1
    },
    {
      "id": "6d4c0372-e2b4-45fb-8840-82378e557f4c",
      "name": "레코드 업데이트",
      "type": "n8n-nodes-base.airtable",
      "position": [
        2288,
        0
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "apphyDa3uYAq0VOMW",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW",
          "cachedResultName": "Custom JS - Invoicing Template"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tblW46vfkwOFQJLMs",
          "cachedResultUrl": "https://airtable.com/apphyDa3uYAq0VOMW/tblW46vfkwOFQJLMs",
          "cachedResultName": "Invoices"
        },
        "columns": {
          "value": {
            "id": "={{ $('Get Ready Invoices').item.json.id }}",
            "Status": "Sent"
          },
          "schema": [
            {
              "id": "id",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "id",
              "defaultMatch": true
            },
            {
              "id": "ID",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client ID",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Client ID",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Client Name",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Client Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Description (from Invoice-Items)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Description (from Invoice-Items)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Total",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Invoicedate",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Invoicedate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Delayed",
                  "value": "Delayed"
                },
                {
                  "name": "Sent",
                  "value": "Sent"
                },
                {
                  "name": "Paid",
                  "value": "Paid"
                },
                {
                  "name": "Ready",
                  "value": "Ready"
                }
              ],
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Create Invoice (Airtable API)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Create Invoice (Airtable API)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Create Invoice (Get Parameters)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Create Invoice (Get Parameters)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Invoice-Items",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Invoice-Items",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Prices (from Invoice-Items)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Prices (from Invoice-Items)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Default Hourly Rate (from Client ID)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Default Hourly Rate (from Client ID)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Total (from Invoice-Items)",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "Total (from Invoice-Items)",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ClientAddressField1",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ClientAddressField1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ClientAddressField2",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ClientAddressField2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ClientTax",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "ClientTax",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update"
      },
      "credentials": {
        "airtableTokenApi": {
          "id": "y4iDRTq2XVlO3xSa",
          "name": "CustomJS Invoice Example"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "6792cf9c-9aa6-444e-9c1c-66cf5784341d",
      "name": "송장 생성",
      "type": "@custom-js/n8n-nodes-pdf-toolkit.invoiceGenerator",
      "position": [
        1728,
        0
      ],
      "parameters": {
        "issuer": {
          "issuerValues": {
            "email": "={{ $json.Email }}",
            "phone": "={{ $json.Phone }}",
            "taxId": "={{ $json.TaxId }}",
            "address": "={{ $json.Address }}",
            "logoUrl": "={{ $json.Logo }}",
            "companyName": "={{ $json.CompanyName }}"
          }
        },
        "billing": {
          "billingValues": {
            "notes": "Please transfer the amount within 14 days.",
            "taxRate": 19,
            "currency": "EUR",
            "invoiceDate": "={{ $('Get Ready Invoices').item.json['Client ID'][0] }}",
            "invoiceNumber": "={{ $('Get Ready Invoices').item.json.ID }}"
          }
        },
        "payment": {
          "paymentValues": {
            "BIC": "={{ $json['Bic/Swift'] }}",
            "bankName": "={{ $json['Bank Name'] }}",
            "accountNumber": "={{ $json['Account Number'] }}"
          }
        },
        "itemsJson": "={{ $('Loop Over Items').item.json.items }}",
        "itemsMode": "json",
        "recipient": {
          "recipientValues": {
            "name": "={{ $('Get Clients').item.json['Comany Name'] }}",
            "taxId": "={{ $('Get Clients').item.json.Tax }}",
            "address": "={{ $('Get Clients').item.json.Street }} {{ $('Get Clients').item.json['Street No.'] }}\n{{ $('Get Clients').item.json['Postal Code'] }} {{ $('Get Clients').item.json.City }}"
          }
        }
      },
      "credentials": {
        "customJsApi": {
          "id": "BFGbk0a71fKWY967",
          "name": "Coding Service"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b3263d7d-e8ca-4776-8d27-08773ab65549",
      "name": "메모3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        -96
      ],
      "parameters": {
        "color": 5,
        "width": 1040,
        "height": 560,
        "content": "## Collect Invoice Data From Airtable \nHere, all invoices with the status “Ready” are retrieved and enriched with the respective invoice items and client information."
      },
      "typeVersion": 1
    },
    {
      "id": "7904b830-14ce-4ff5-8ca4-e4ab2cd4a644",
      "name": "회사 정보 설정",
      "type": "n8n-nodes-base.set",
      "position": [
        1344,
        0
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "860bad3a-81d5-4591-9d8d-3f399e88227d",
              "name": "CompanyName",
              "type": "string",
              "value": "MyCompany"
            },
            {
              "id": "4f473e5c-1f8a-4fce-971b-7bcf3a585953",
              "name": "Address",
              "type": "string",
              "value": "My Street 45\n12322 New York"
            },
            {
              "id": "a4de3c7f-2470-48a2-81ee-22d43dbbded5",
              "name": "TaxId",
              "type": "string",
              "value": "US12124234"
            },
            {
              "id": "f6b26bc0-dbe7-433b-96ff-843a137afa99",
              "name": "Email",
              "type": "string",
              "value": "info@mycorp.org"
            },
            {
              "id": "9ee8496d-93c8-4828-aa43-a4168ffd7c39",
              "name": "Phone",
              "type": "string",
              "value": "+331 123412433123"
            },
            {
              "id": "a66fb0d6-a2c2-4d9d-86aa-fe3f7dc97e6e",
              "name": "Logo",
              "type": "string",
              "value": "https://equalengineers.com/wp-content/uploads/2024/04/dummy-logo-5b.png"
            },
            {
              "id": "717ca346-29d6-4d0a-9942-af8db75c23ce",
              "name": "Account Number",
              "type": "string",
              "value": "12345677"
            },
            {
              "id": "db4d6b35-9ddb-4f38-a6a1-2f66a36d58d6",
              "name": "Bic/Swift",
              "type": "string",
              "value": "1234"
            },
            {
              "id": "d08fdf69-c730-4bda-b621-dd8a429ed3ac",
              "name": "Bank Name",
              "type": "string",
              "value": "Bank of XYZ"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "a0d0705b-5d60-4845-bace-2e0cc9a9a8bd",
      "name": "메모4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1648,
        -96
      ],
      "parameters": {
        "color": 4,
        "width": 448,
        "height": 560,
        "content": "## Generate Invoice & send email with invoice\n"
      },
      "typeVersion": 1
    },
    {
      "id": "bbdd0964-c9ea-4c4b-b402-7a2e34e79c70",
      "name": "필드 매핑",
      "type": "n8n-nodes-base.set",
      "position": [
        688,
        128
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "a95b61df-c10d-43f1-b005-d6d84c6fec47",
              "name": "description",
              "type": "string",
              "value": "={{ $json.Description }}"
            },
            {
              "id": "f290e440-dd5b-46f9-a23b-be419443685b",
              "name": "quantity",
              "type": "string",
              "value": "={{ $json.Hours }}"
            },
            {
              "id": "09688f5f-0461-4c04-988a-2b92da3e595e",
              "name": "unitPrice",
              "type": "string",
              "value": "={{ $json['Custom Hourly Rate'] || $json['Default Hourly Rate'][0]}}"
            },
            {
              "id": "bcdadef7-0f5b-48a3-851b-f7fe5f401fa7",
              "name": "invoiceId",
              "type": "string",
              "value": "={{ $json.ID }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "0a5e9db0-410f-4b5c-99cf-a616107942a5",
      "name": "첨부 파일 이메일 발송",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        1904,
        0
      ],
      "webhookId": "aa09d395-1678-4800-9fe8-875468e53d08",
      "parameters": {
        "text": "Hello,\n\nPlease find attached your invoice for the last month. Thank you very much for your cooperation.\n\nBest regards,\nHenrik",
        "options": {
          "attachments": "data"
        },
        "subject": "Your Invoice for Last Month",
        "toEmail": "info@yourcomp.org",
        "fromEmail": "={{ $json.InvoiceEmail }}",
        "emailFormat": "text"
      },
      "credentials": {
        "smtp": {
          "id": "vvY03KbEvsdTVMXI",
          "name": "SMTP account"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "cc9d1907-9d69-4f72-b3a0-76ce416e75e8",
      "name": "메모5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -240,
        -96
      ],
      "parameters": {
        "color": 3,
        "width": 288,
        "height": 560,
        "content": "## Run this workflow manually\n"
      },
      "typeVersion": 1
    },
    {
      "id": "ec0d2733-966b-49ff-ab2f-5a944882e916",
      "name": "메모6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        0
      ],
      "parameters": {
        "width": 720,
        "height": 448,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Loop Over Items\nSince the number of invoice items does not match the number of invoices, we have to retrieve them in a loop and aggregate them so that they match the number of invoices."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "4c90ec99-f624-4f7f-a4be-ccd8653cdb04",
  "connections": {
    "3e86f778-d65a-47c6-8fd4-83b8063174e1": {
      "main": [
        [
          {
            "node": "32205005-9879-4abe-be18-d77126675ccb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bbdd0964-c9ea-4c4b-b402-7a2e34e79c70": {
      "main": [
        [
          {
            "node": "3e86f778-d65a-47c6-8fd4-83b8063174e1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5c20d60e-72b3-45db-8df0-223676a7880e": {
      "main": [
        [
          {
            "node": "7904b830-14ce-4ff5-8ca4-e4ab2cd4a644",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "32205005-9879-4abe-be18-d77126675ccb": {
      "main": [
        [
          {
            "node": "5c20d60e-72b3-45db-8df0-223676a7880e",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "047f3d97-760b-4307-a17f-a92d4c8f268d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6792cf9c-9aa6-444e-9c1c-66cf5784341d": {
      "main": [
        [
          {
            "node": "0a5e9db0-410f-4b5c-99cf-a616107942a5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "047f3d97-760b-4307-a17f-a92d4c8f268d": {
      "main": [
        [
          {
            "node": "bbdd0964-c9ea-4c4b-b402-7a2e34e79c70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "895fe916-1db2-4055-a87e-804a6be14383": {
      "main": [
        [
          {
            "node": "32205005-9879-4abe-be18-d77126675ccb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7904b830-14ce-4ff5-8ca4-e4ab2cd4a644": {
      "main": [
        [
          {
            "node": "6792cf9c-9aa6-444e-9c1c-66cf5784341d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "0a5e9db0-410f-4b5c-99cf-a616107942a5": {
      "main": [
        [
          {
            "node": "6d4c0372-e2b4-45fb-8840-82378e557f4c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c2e9a234-394c-4c5e-ab59-a5311fa61ed8": {
      "main": [
        [
          {
            "node": "895fe916-1db2-4055-a87e-804a6be14383",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

고급

유료인가요?

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

워크플로우 정보
난이도
고급
노드 수18
카테고리-
노드 유형8
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34