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"
},
"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)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
키워드 분류
AI와 Airtable를 사용하여 SEO 키워드를 분류하고 내용 전략을 생성합니다.
Set
Filter
Airtable
+
Set
Filter
Airtable
40 노드Gloria
WordPress 콘텐츠 생성기 v3
WordPress 내용 생성기 v3
If
Set
Code
+
If
Set
Code
102 노드Alex Kim
인공지능
AI와 Apify를 사용하여 LinkedIn 게시물 상호작용을 적합한 잠재 고객으로 변환
AI와 Apify를 사용하여 LinkedIn 게시물 상호작용을 적합한 잠재 고객으로 변환
If
Set
Code
+
If
Set
Code
26 노드Anna Bui
리드 생성
랜딩 페이지 -> PDF 양식 작성 -> 이메일
웹 양식 및 이메일 발송을 사용한 자동화된 PDF 양식 처리
Set
Html
Webhook
+
Set
Html
Webhook
12 노드CustomJS
lander 페이지 -> NDA Word 문서(Docx) -> 이메일
웹 폼에서 제출한 내용을 기반으로 맞춤형 NDA 문서를 생성하고 이메일로 발송합니다.
Set
Html
Webhook
+
Set
Html
Webhook
10 노드CustomJS
AI 스마트 어시스턴트: Supabase 스토리지 및 Google Drive 파일과 대화
AI스마트어시스턴트:与Supabase存储및Google Drive文件对话
If
Set
Wait
+
If
Set
Wait
62 노드Mark Shcherbakov
엔지니어링