Airtable からの販売注文で QuickBooks 請求書発行と顧客作成を自動化
これはContent Creation, Multimodal AI分野の自動化ワークフローで、35個のノードを含みます。主にIf, Code, Merge, Webhook, Airtableなどのノードを使用。 Airtable と QuickBooks 間の自動化ワークフロー
- •HTTP Webhookエンドポイント(n8nが自動生成)
- •Airtable API Key
- •ターゲットAPIの認証情報が必要な場合あり
{
"id": "bBQjdycmZkCpFBuf",
"meta": {
"instanceId": "1a54c41d9050a8f1fa6f74ca858828ad9fb97b9fafa3e9760e576171c531a787"
},
"name": "Automate QuickBooks Invoicing & Customer Creation from Airtable Sales Orders",
"tags": [],
"nodes": [
{
"id": "db74e2e3-bc33-4277-89de-1b62bce61d6c",
"name": "顧客詳細を取得",
"type": "n8n-nodes-base.airtable",
"position": [
304,
432
],
"parameters": {
"id": "={{ $json['(Q) Customer'][0] }}",
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblhOxgN7qzl8UVTi",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tblhOxgN7qzl8UVTi",
"cachedResultName": "Customers"
},
"options": {}
},
"typeVersion": 2.1
},
{
"id": "ec49c44f-54fe-4f02-860f-2f492e46be18",
"name": "QuickBooks - 顧客を検索",
"type": "n8n-nodes-base.quickbooks",
"position": [
656,
432
],
"parameters": {
"filters": {
"query": "=WHERE DisplayName = '{{ $json[\"(Q) Customer Name\"] }}'"
},
"operation": "getAll"
},
"typeVersion": 1
},
{
"id": "5299c75c-d158-42eb-b9a6-16291eb83efd",
"name": "顧客を作成",
"type": "n8n-nodes-base.quickbooks",
"position": [
1136,
304
],
"parameters": {
"operation": "create",
"displayName": "={{ $('Get Customer Details').item.json['(Q) Customer Name'] }}",
"additionalFields": {
"BillAddr": {
"details": {
"City": "={{ $('Get Customer Details').item.json['(Q) Bill City'] }}",
"Line1": "={{ $('Get Customer Details').item.json['(Q) Bill Line1'] }}",
"PostalCode": "={{ $('Get Customer Details').item.json['(Q) Bill PostalCode'] }}",
"CountrySubDivisionCode": "={{ $('Get Customer Details').item.json['(Q) Bill Country'] }}"
}
},
"PrimaryPhone": "={{ $('Get Customer Details').item.json['(Q) Phone Number'] }}",
"PrimaryEmailAddr": "={{ $('Get Customer Details').item.json['(Q) Email Address'] }}"
}
},
"typeVersion": 1
},
{
"id": "f83c8c16-ac6e-4f02-8db9-83befb18abf0",
"name": "商品を取得",
"type": "n8n-nodes-base.airtable",
"position": [
1600,
368
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblZHt0JDc6U6HvEI",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tblZHt0JDc6U6HvEI",
"cachedResultName": "Order Lines"
},
"options": {},
"operation": "search",
"filterByFormula": "={Sales Order} = \"{{ $('Get Airtable Orders Records').item.json['Sales Order ID'] }}\""
},
"typeVersion": 2.1
},
{
"id": "dba10e50-b393-43d7-91ec-eac513be2ab7",
"name": "顧客を追加",
"type": "n8n-nodes-base.merge",
"position": [
1424,
784
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "e56db207-580e-4ac9-affc-ed490d0674bb",
"name": "HTTP で解析",
"type": "n8n-nodes-base.code",
"position": [
2416,
352
],
"parameters": {
"jsCode": "const out = [];\n\nfor (const input of $input.all()) {\n const data = input.json;\n\n // Map terms string to QuickBooks SalesTermRef value\n let termValue;\n if (data.terms) {\n const match = data.terms.match(/\\d+/); // extract number from \"Net 7\"\n if (match) {\n termValue = match[0]; // e.g., \"7\"\n }\n }\n\n // Build QuickBooks Line array\n const Line = (data.products || []).map(p => ({\n DetailType: \"SalesItemLineDetail\",\n Amount: p.amount,\n Description: p.description || \"\",\n SalesItemLineDetail: {\n ItemRef: {\n value: p.qbItemId || p.itemId, // Must be QuickBooks Item ID\n name: p.itemName\n },\n Qty: p.qty || 1,\n UnitPrice: p.rate || 0\n }\n }));\n\n // ✅ Add discount line if discount exists\n if (data.discount) {\n Line.push({\n DetailType: \"DiscountLineDetail\",\n Amount: 0, // QuickBooks will calculate based on percentage\n DiscountLineDetail: {\n PercentBased: true,\n DiscountPercent: data.discount // only percent from previous output\n }\n });\n }\n\n // Invoice payload\n const invoicePayload = {\n CustomerRef: { value: String(data.customerId) },\n TxnDate: data.invoiceDate,\n DueDate: data.dueDate,\n PrivateNote: data.salesOrder,\n BillEmail: data.customerEmail\n ? { Address: data.customerEmail }\n : undefined,\n //SalesTermRef: termValue ? { value: termValue } : undefined,\n Line\n };\n\n out.push({ json: { customer: invoicePayload } });\n}\n\nreturn out;\n"
},
"typeVersion": 2
},
{
"id": "10f6d569-a928-41f8-a768-2c6646a4072d",
"name": "商品IDを検索",
"type": "n8n-nodes-base.airtable",
"position": [
1872,
368
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbluYcq0Zkka8uI8c",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tbluYcq0Zkka8uI8c",
"cachedResultName": "Product & Service"
},
"options": {},
"operation": "search",
"filterByFormula": "={(Q) Product/Service Name}= \"{{ $json['(Q) Item Name (A)'][0] }}\""
},
"typeVersion": 2.1
},
{
"id": "d4090bb0-4d0a-430d-8a9e-bee8860fc136",
"name": "請求書URLを作成",
"type": "n8n-nodes-base.httpRequest",
"position": [
2992,
496
],
"parameters": {
"url": "https://sandbox-quickbooks.api.intuit.com/v3/company/9341455145770046/invoice?minorversion=75",
"method": "POST",
"options": {},
"jsonBody": "={{ JSON.stringify($json.customer) }}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"nodeCredentialType": "quickBooksOAuth2Api"
},
"retryOnFail": true,
"typeVersion": 4.2
},
{
"id": "9b6f19f2-ac4c-4baa-af6b-730b18cb2186",
"name": "アイテムをループ処理1",
"type": "n8n-nodes-base.splitInBatches",
"position": [
2720,
480
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "dac5c7fa-a488-4f97-b8f0-aa8a56ca23ec",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-448,
448
],
"webhookId": "321f46d5-66da-49f5-a8d1-6b61e4a7321f",
"parameters": {
"path": "321f46d5-66da-49f5-a8d1-6b61e4a7321f",
"options": {}
},
"typeVersion": 2.1
},
{
"id": "d8e97ca6-608d-456b-af0c-01563c747444",
"name": "請求書が未作成の場合",
"type": "n8n-nodes-base.if",
"position": [
112,
752
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "6412d0e3-1fe5-423c-a0bb-29ef90240843",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json[\"Synced to QBO (A)\"] }}",
"rightValue": "FALSE"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "05c1e7bc-bc42-415a-8052-50a852ccf19a",
"name": "IF - 顧客が存在しない?",
"type": "n8n-nodes-base.if",
"position": [
992,
784
],
"parameters": {
"conditions": {
"number": [
{
"value1": "={{ $json.Id }}",
"operation": "isEmpty"
}
]
}
},
"typeVersion": 1,
"alwaysOutputData": false
},
{
"id": "da33b092-a29d-4e07-8992-251c2e8d5cdd",
"name": "請求書レコードを作成",
"type": "n8n-nodes-base.airtable",
"position": [
3280,
496
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblXEKsfxMDVhFMcg",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tblXEKsfxMDVhFMcg",
"cachedResultName": "Invoices & Payments"
},
"columns": {
"value": {
"Customer": "={{ $json.Invoice.CustomerRef.name }}",
"Due Date": "={{ new Date($json.Invoice.DueDate).toISOString() }}",
"Tax Code": "={{ $json.Invoice.Line[1].SalesItemLineDetail.TaxCodeRef.value }}",
"Amount Paid": 0,
"Invoice Date": "={{ new Date($json.Invoice.TxnDate).toISOString() }}",
"Invoice Amount": "={{ $json.Invoice.TotalAmt }}",
"Invoice Number": "={{ $json.Invoice.DocNumber }}",
"Payment Status": "Unpaid",
"Outstanding Balance": "={{ $json.Invoice.Balance }}"
},
"schema": [
{
"id": "Invoice Number",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Invoice Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Order",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Customer",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Invoice Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Due Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Due Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice Amount",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Invoice Amount",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Amount Paid",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Amount Paid",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Outstanding Balance",
"type": "number",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Outstanding Balance",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Status",
"type": "options",
"display": true,
"options": [
{
"name": "Unpaid",
"value": "Unpaid"
},
{
"name": "Partially Paid",
"value": "Partially Paid"
},
{
"name": "Paid",
"value": "Paid"
},
{
"name": "Overdue",
"value": "Overdue"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Payment Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Date",
"type": "dateTime",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Payment Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Method",
"type": "options",
"display": true,
"options": [
{
"name": "Bank Transfer",
"value": "Bank Transfer"
},
{
"name": "Credit Card",
"value": "Credit Card"
},
{
"name": "Cheque",
"value": "Cheque"
},
{
"name": "Cash",
"value": "Cash"
},
{
"name": "Other",
"value": "Other"
}
],
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Payment Method",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice Document",
"type": "array",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Invoice Document",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Created By",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Created By",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date Created",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Date Created",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Modified",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Last Modified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Tax Code",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Tax Code",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Gross Margin",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Order Gross Margin",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Total Purchases",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Order Total Purchases",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Total Labour",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Order Total Labour",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Industry",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Customer Industry",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Type",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Customer Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Status",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Order Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Days Overdue",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Days Overdue",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Completion %",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Payment Completion %",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Outstanding Balance Check",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Outstanding Balance Check",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Invoice Summary (AI)",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Invoice Summary (AI)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Risk Assessment (AI)",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Payment Risk Assessment (AI)",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "create"
},
"typeVersion": 2.1
},
{
"id": "85f4579d-008c-469c-bfa0-085e17e33b80",
"name": "注文レコードを更新",
"type": "n8n-nodes-base.airtable",
"position": [
3568,
496
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbluRdjyw8xiWgJht",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tbluRdjyw8xiWgJht",
"cachedResultName": "Confirmed Orders"
},
"columns": {
"value": {
"Sales Order ID": "={{ $('Create Invoice URL').item.json.Invoice.PrivateNote }}",
"(Q) QBO Invoice Id": "={{ $('Create Invoice URL').item.json.Invoice.Id }}",
"(Q) QBO Invoice Number": "={{ $('Create Invoice URL').item.json.Invoice.DocNumber }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "Sales Order ID",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "Sales Order ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Customer",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Customer",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Date",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Order Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Pick Up",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Pick Up",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Delivery Date",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Delivery Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(A) Days Left",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "(A) Days Left",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Status",
"type": "options",
"display": true,
"options": [
{
"name": "Confirmed",
"value": "Confirmed"
},
{
"name": "In Progress",
"value": "In Progress"
},
{
"name": "Completed",
"value": "Completed"
},
{
"name": "Cancelled",
"value": "Cancelled"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Order Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Type",
"type": "options",
"display": true,
"options": [
{
"name": "Residential",
"value": "Residential"
},
{
"name": "Commercial",
"value": "Commercial"
},
{
"name": "Contractor",
"value": "Contractor"
},
{
"name": "Other",
"value": "Other"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Order Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Subtotal (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Subtotal (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Purchases Total (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Purchases Total (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Terms",
"type": "options",
"display": true,
"options": [
{
"name": "Due on Receipt",
"value": "Due on Receipt"
},
{
"name": "Net 7",
"value": "Net 7"
},
{
"name": "Net 14",
"value": "Net 14"
},
{
"name": "Net 30",
"value": "Net 30"
},
{
"name": "Net 45",
"value": "Net 45"
},
{
"name": "Net 60",
"value": "Net 60"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Terms",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Invoice Date",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "(Q) Invoice Date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Due Date (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "(Q) Due Date (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Order Lines",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Order Lines",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Public Holidays (Synced)",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Public Holidays (Synced)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) QBO Customer Id",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "(Q) QBO Customer Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) QBO Invoice Number",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "(Q) QBO Invoice Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) QBO Invoice Id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "(Q) QBO Invoice Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes (Internal)",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Notes (Internal)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Purchases",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Purchases",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Labour Tasks",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Labour Tasks",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Issues & Feedback",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Issues & Feedback",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Synced to QBO (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Synced to QBO (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "SLA Breach (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "SLA Breach (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Job Tasks",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Job Tasks",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Labour Charges",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Labour Charges",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Labour Charges (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Total Labour Charges (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "True Days Left",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "True Days Left",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Days Remaining (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Days Remaining (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Holiday Weight Sum",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Holiday Weight Sum",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Holiday Count",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Holiday Count",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Sales Order ID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"typeVersion": 2.1
},
{
"id": "8b60a7d0-ecf8-4f7f-8c59-e40be0441b49",
"name": "顧客レコードを更新",
"type": "n8n-nodes-base.airtable",
"position": [
3872,
496
],
"parameters": {
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tblhOxgN7qzl8UVTi",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tblhOxgN7qzl8UVTi",
"cachedResultName": "Customers"
},
"columns": {
"value": {
"(Q) Customer Name": "={{ $('Create Invoice URL').item.json.Invoice.CustomerRef.name }}",
"(Q) QBO Customer Id": "={{ $('Create Invoice URL').item.json.Invoice.CustomerRef.value }}"
},
"schema": [
{
"id": "id",
"type": "string",
"display": true,
"removed": false,
"readOnly": true,
"required": false,
"displayName": "id",
"defaultMatch": true
},
{
"id": "(Q) Customer Name",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "(Q) Customer Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Phone Number",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Phone Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer ID",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Customer ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Bill Line1",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Bill Line1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Bill City",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Bill City",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Bill PostalCode",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Bill PostalCode",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Type",
"type": "options",
"display": true,
"options": [
{
"name": "Individual",
"value": "Individual"
},
{
"name": "Business",
"value": "Business"
},
{
"name": "Other",
"value": "Other"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Customer Type",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Synced to QBO (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Synced to QBO (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Customer Number ",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Customer Number ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) QBO Customer Id",
"type": "string",
"display": true,
"removed": false,
"readOnly": false,
"required": false,
"displayName": "(Q) QBO Customer Id",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last Modified",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Last Modified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Last Sync Attempt",
"type": "dateTime",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Last Sync Attempt",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Sync Error",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Sync Error",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Full Billing Address (A)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Full Billing Address (A)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Email Address",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Email Address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Contact Person",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Contact Person",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Notes (Internal)",
"type": "string",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Notes (Internal)",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Confirmed Orders",
"type": "array",
"display": true,
"removed": true,
"readOnly": false,
"required": false,
"displayName": "Confirmed Orders",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "(Q) Bill Country",
"type": "options",
"display": true,
"options": [
{
"name": "SG",
"value": "SG"
},
{
"name": "MY",
"value": "MY"
},
{
"name": "Other",
"value": "Other"
},
{
"name": "Singapore",
"value": "Singapore"
}
],
"removed": true,
"readOnly": false,
"required": false,
"displayName": "(Q) Bill Country",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Auto Number (raw)",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "Auto Number (raw)",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"(Q) Customer Name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update"
},
"typeVersion": 2.1
},
{
"id": "d459f712-afa2-48f2-b321-c8137508ee61",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-544,
224
],
"parameters": {
"width": 294,
"height": 416,
"content": "## Purpose: Entry point. \n\n-Triggered automatically when a Sales Order is confirmed in Airtable.\n\n-Ensure your webhook URL is added in Airtable’s automation as a “POST request” when order status = Confirmed."
},
"typeVersion": 1
},
{
"id": "f50402f8-8b25-4573-b67f-89827dabbd1a",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-192,
224
],
"parameters": {
"width": 310,
"height": 416,
"content": "## Get Orders Records\n\n--Fetch details of the confirmed Sales Order using the record ID received from webhook.\n\n--Must have “Sales Order ID” field populated for linkage with Products and Customer."
},
"typeVersion": 1
},
{
"id": "09a7dae1-3f7f-4b5f-87ed-dd7a5d0f7b0f",
"name": "Airtable 注文レコードを取得",
"type": "n8n-nodes-base.airtable",
"position": [
-80,
448
],
"parameters": {
"id": "={{$json[\"query\"][\"recordId\"]}}",
"base": {
"__rl": true,
"mode": "list",
"value": "appFsCGQkVElarpyF",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF",
"cachedResultName": "(Intuz) Operations Hub (Sample) (Copy)"
},
"table": {
"__rl": true,
"mode": "list",
"value": "tbluRdjyw8xiWgJht",
"cachedResultUrl": "https://airtable.com/appFsCGQkVElarpyF/tbluRdjyw8xiWgJht",
"cachedResultName": "Confirmed Orders"
},
"options": {}
},
"typeVersion": 2.1
},
{
"id": "83c2470f-4811-468d-bf32-802c7f19b397",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
16,
688
],
"parameters": {
"width": 310,
"height": 432,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Invoice record check\n\n--Skip records that already have a QuickBooks invoice created.\n\n--Checks if “Synced to QBO (A)” field in Airtable = FALSE.\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "b5ef9066-d96b-4e04-92d6-388f6616795b",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
192,
224
],
"parameters": {
"width": 294,
"height": 416,
"content": "## Get Customer Details\n\n--Retrieve customer info linked to this order.\n\n--Customer record must have fields like (Q) Customer Name, (Q) Email Address, etc.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "56e27b01-813d-45d5-8c2d-83d512350867",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
224
],
"parameters": {
"width": 278,
"height": 416,
"content": "## QuickBooks - Find Customer\n\n--Search customer in QuickBooks using DisplayName.\n\n--Ensures no duplicate customer creation in QBO.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "58bad121-7a39-4259-997e-47970f90f4d9",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
704
],
"parameters": {
"width": 310,
"height": 432,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Customer doesn’t Exist?\n\n--Checks if customer was found in QBO.\n\n\n--True (Yes): Go to “Create a customer.”\n\n--False (No): Continue to next step.\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "7b1b9432-76b1-47fb-9126-c93666dbbff4",
"name": "付箋6",
"type": "n8n-nodes-base.stickyNote",
"position": [
1040,
112
],
"parameters": {
"width": 278,
"height": 352,
"content": "## Create a Customer\n\n--Creates new customer in QuickBooks if not found.\n\n--Pulls data from Airtable Customer table.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "ab0b82c5-c617-4b3e-b85c-be8c6cd1b293",
"name": "付箋7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1280,
704
],
"parameters": {
"width": 326,
"height": 432,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Append Customers (Merge)\n\n--Combine both existing and newly created QBO customers for further mapping.\n\n\n--Merges both paths before processing invoices.\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "0cefbcce-7473-456b-96d5-7af70e22f66f",
"name": "付箋8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1536,
144
],
"parameters": {
"width": 230,
"height": 368,
"content": "## Get Products\n\n--Fetch order line items from “Order Lines” table.\n\n--Linked to Sales Order ID from “Confirmed Orders.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "f664dd69-7b76-4aea-b61c-ad03d36dec13",
"name": "付箋9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1792,
144
],
"parameters": {
"width": 230,
"height": 368,
"content": "## Search Product ID\n\n--Finds QBO Product/Service ID for each product line.\n\n--Uses “(Q) Product/Service Name” to match Airtable & QuickBooks.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "35215682-456e-47e1-93ea-67d96ea4fda2",
"name": "データ準備",
"type": "n8n-nodes-base.code",
"position": [
2144,
368
],
"parameters": {
"jsCode": "// Input nodes\nconst salesOrders = $items(\"Get Airtable Orders Records\"); // Sales Order data\nconst customers = $items(\"Get Customer Details\"); // Customer details from Airtable\nconst products = $items(\"Get Products\"); // Product line items\nconst qbCustomers = $items(\"Append Customers\"); // QuickBooks customers\nconst searchProducts = $items(\"Search Product ID\"); // Product ID lookup data\n\nconst result = [];\n\n// Helper: find QuickBooks customer object by name\nfunction getQuickBooksCustomer(name) {\n return qbCustomers.find(c => c.json.DisplayName === name);\n}\n\n// Helper: find Product ID by product/service name\nfunction getQuickBooksProductId(name) {\n const match = searchProducts.find(p => p.json[\"(Q) Product/Service Name\"] === name);\n return match ? match.json[\"(Q) Product ID\"] : null;\n}\n\nfor (const so of salesOrders) {\n const soData = so.json;\n\n // Ensure customer exists\n if (!soData[\"(Q) Customer\"] || !Array.isArray(soData[\"(Q) Customer\"]) || soData[\"(Q) Customer\"].length === 0) {\n continue;\n }\n\n const customerIdFromSO = soData[\"(Q) Customer\"][0]; // Airtable record id\n const matchedCustomer = customers.find(c => c.json.id === customerIdFromSO);\n\n if (matchedCustomer) {\n const customerName = matchedCustomer.json[\"(Q) Customer Name\"];\n const qbCustomer = getQuickBooksCustomer(customerName);\n\n const quickBooksId = qbCustomer ? qbCustomer.json.Id : null;\n const customerEmail = qbCustomer?.json?.PrimaryEmailAddr?.Address || null; // ✅ fetch email\n\n // Find all products linked to this sales order\n const productMatches = products.filter(p =>\n p.json[\"Sales Order ID (A)\"] &&\n p.json[\"Sales Order ID (A)\"].includes(soData[\"Sales Order ID\"])\n );\n\n const productDetails = productMatches.map(p => {\n const productName = (p.json[\"(Q) Item Name (A)\"] && p.json[\"(Q) Item Name (A)\"][0]) || \"Unknown\";\n return {\n itemId: getQuickBooksProductId(productName),\n itemName: productName,\n qty: p.json[\"(Q) Qty\"] || 0,\n rate: p.json[\"(Q) Rate\"] || 0,\n amount: p.json[\"(Q) Amount (A)\"] || 0,\n description: (p.json[\"(Q) Description\"] && p.json[\"(Q) Description\"][0]) || \"\"\n };\n });\n\n result.push({\n customerId: quickBooksId,\n customerName: customerName,\n customerEmail: customerEmail, // ✅ include email here\n salesOrder: soData[\"Sales Order ID\"],\n invoiceDate: soData[\"(Q) Invoice Date\"],\n terms: soData[\"(Q) Terms\"],\n dueDate: soData[\"(Q) Due Date (A)\"],\n products: productDetails,\n discount: soData[\"(Q) Discount\"]\n });\n }\n}\n\n// Return as items for n8n\nreturn result.map(r => ({ json: r }));\n"
},
"typeVersion": 2
},
{
"id": "b9766711-fec2-45e0-a99f-4b5a748a2f91",
"name": "付箋10",
"type": "n8n-nodes-base.stickyNote",
"position": [
2080,
96
],
"parameters": {
"width": 214,
"height": 416,
"content": "## Data Preparation\n\n--Core logic — combines orders, customers, and products to prepare structured invoice payload.\n\n--Handles mapping of IDs, email, and discount logic.\n\n-- Modify this if your Airtable schema changes.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "179a4831-1293-4cfb-8fc9-40f9eab92ead",
"name": "付箋11",
"type": "n8n-nodes-base.stickyNote",
"position": [
2352,
96
],
"parameters": {
"width": 214,
"height": 416,
"content": "## Parse in HTTP\n\n--Converts JS objects into QuickBooks-compatible invoice JSON format.\n\n--Validate the payload before posting to QuickBooks.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "217fef97-8eb0-463a-b914-82d043de353a",
"name": "付箋12",
"type": "n8n-nodes-base.stickyNote",
"position": [
2656,
240
],
"parameters": {
"width": 214,
"height": 384,
"content": "## Split in Batches\n\n--Iterates through all prepared invoices to send one-by-one to QuickBooks API.\n\n--Keep batch size = 1 for better control and error handling.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "21ebba18-8bc2-456e-b856-75c9351ff269",
"name": "付箋13",
"type": "n8n-nodes-base.stickyNote",
"position": [
2928,
192
],
"parameters": {
"width": 230,
"height": 464,
"content": "## Create Invoice URL (QuickBooks API - HTTP)\n\n--Creates the invoice in QuickBooks Sandbox via HTTP POST.\n\n--Ensure Sandbox Company ID & version number (minorversion=75) are correct.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "356e57c9-8749-44e3-9200-b2b68f1df2b5",
"name": "付箋14",
"type": "n8n-nodes-base.stickyNote",
"position": [
3200,
224
],
"parameters": {
"width": 230,
"height": 432,
"content": "## Create Invoice Record\n\n--Logs created invoice details into “Invoices & Payments” table in Airtable.\n\n--Automatically captures Invoice Number, Amount, Due Date, etc.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "a831625c-2a53-4b29-a03f-de8773778ee1",
"name": "付箋15",
"type": "n8n-nodes-base.stickyNote",
"position": [
3504,
224
],
"parameters": {
"width": 230,
"height": 432,
"content": "## Update Order Record\n\n--Updates “Confirmed Orders” table with QBO Invoice ID and Number.\n\n--Keeps Airtable and QuickBooks in sync.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "7dfe52a2-7690-4351-b7d8-85b67d200dbe",
"name": "付箋16",
"type": "n8n-nodes-base.stickyNote",
"position": [
3808,
224
],
"parameters": {
"width": 230,
"height": 432,
"content": "## Update Customer Record\n\n--Updates existing Airtable Customer record with QBO Customer ID.\n\n--Ensures future syncs don’t recreate existing customers.\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "74257ded-c395-4861-8140-4d3d63ddaf0d",
"name": "付箋17",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1184,
128
],
"parameters": {
"width": 464,
"height": 288,
"content": "## Airtable Structure Requirements\n\n* [Airtable Streucture Requirement](https://drive.google.com/drive/folders/1dE4sXikesaTpLE-Pc-VU3mqg0fMZ8EDU)"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "a65334dc-af68-429c-960c-fff711cf5fe5",
"connections": {
"dac5c7fa-a488-4f97-b8f0-aa8a56ca23ec": {
"main": [
[
{
"node": "09a7dae1-3f7f-4b5f-87ed-dd7a5d0f7b0f",
"type": "main",
"index": 0
}
]
]
},
"f83c8c16-ac6e-4f02-8db9-83befb18abf0": {
"main": [
[
{
"node": "10f6d569-a928-41f8-a768-2c6646a4072d",
"type": "main",
"index": 0
}
]
]
},
"e56db207-580e-4ac9-affc-ed490d0674bb": {
"main": [
[
{
"node": "9b6f19f2-ac4c-4baa-af6b-730b18cb2186",
"type": "main",
"index": 0
}
]
]
},
"dba10e50-b393-43d7-91ec-eac513be2ab7": {
"main": [
[
{
"node": "f83c8c16-ac6e-4f02-8db9-83befb18abf0",
"type": "main",
"index": 0
}
]
]
},
"35215682-456e-47e1-93ea-67d96ea4fda2": {
"main": [
[
{
"node": "e56db207-580e-4ac9-affc-ed490d0674bb",
"type": "main",
"index": 0
}
]
]
},
"9b6f19f2-ac4c-4baa-af6b-730b18cb2186": {
"main": [
[],
[
{
"node": "d4090bb0-4d0a-430d-8a9e-bee8860fc136",
"type": "main",
"index": 0
}
]
]
},
"5299c75c-d158-42eb-b9a6-16291eb83efd": {
"main": [
[
{
"node": "dba10e50-b393-43d7-91ec-eac513be2ab7",
"type": "main",
"index": 0
}
]
]
},
"10f6d569-a928-41f8-a768-2c6646a4072d": {
"main": [
[
{
"node": "35215682-456e-47e1-93ea-67d96ea4fda2",
"type": "main",
"index": 0
}
]
]
},
"d4090bb0-4d0a-430d-8a9e-bee8860fc136": {
"main": [
[
{
"node": "da33b092-a29d-4e07-8992-251c2e8d5cdd",
"type": "main",
"index": 0
}
]
]
},
"85f4579d-008c-469c-bfa0-085e17e33b80": {
"main": [
[
{
"node": "8b60a7d0-ecf8-4f7f-8c59-e40be0441b49",
"type": "main",
"index": 0
}
]
]
},
"db74e2e3-bc33-4277-89de-1b62bce61d6c": {
"main": [
[
{
"node": "ec49c44f-54fe-4f02-860f-2f492e46be18",
"type": "main",
"index": 0
}
]
]
},
"da33b092-a29d-4e07-8992-251c2e8d5cdd": {
"main": [
[
{
"node": "85f4579d-008c-469c-bfa0-085e17e33b80",
"type": "main",
"index": 0
}
]
]
},
"d8e97ca6-608d-456b-af0c-01563c747444": {
"main": [
[
{
"node": "db74e2e3-bc33-4277-89de-1b62bce61d6c",
"type": "main",
"index": 0
}
]
]
},
"8b60a7d0-ecf8-4f7f-8c59-e40be0441b49": {
"main": [
[
{
"node": "9b6f19f2-ac4c-4baa-af6b-730b18cb2186",
"type": "main",
"index": 0
}
]
]
},
"ec49c44f-54fe-4f02-860f-2f492e46be18": {
"main": [
[
{
"node": "05c1e7bc-bc42-415a-8052-50a852ccf19a",
"type": "main",
"index": 0
}
]
]
},
"09a7dae1-3f7f-4b5f-87ed-dd7a5d0f7b0f": {
"main": [
[
{
"node": "d8e97ca6-608d-456b-af0c-01563c747444",
"type": "main",
"index": 0
}
]
]
},
"05c1e7bc-bc42-415a-8052-50a852ccf19a": {
"main": [
[
{
"node": "5299c75c-d158-42eb-b9a6-16291eb83efd",
"type": "main",
"index": 0
}
],
[
{
"node": "dba10e50-b393-43d7-91ec-eac513be2ab7",
"type": "main",
"index": 1
}
]
]
}
}
}このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
Intuz
@intuzWorkflow automation can help automate your routine activities and help saves $$$, as well as hours of time. As a boutique tech consulting company, Intuz help businesses with custom AI/ML, AI Workflow Automations, and software development. Automate your business workflow for: Sales Marketing Accounting Finance Operations E-Commerce Customer Support Admin & Backoffice Logistics & Supply Chain
このワークフローを共有