チケットバックエンド
上級
これはContent Creation, Multimodal AI分野の自動化ワークフローで、35個のノードを含みます。主にIf, Code, Gmail, Filter, Webhookなどのノードを使用。 アクティビティチケットバックエンド:Google SheetsとGmailを使ってQRコード入りチケットを自動生成
前提条件
- •Googleアカウント + Gmail API認証情報
- •HTTP Webhookエンドポイント(n8nが自動生成)
- •ターゲットAPIの認証情報が必要な場合あり
- •Google Sheets API認証情報
ワークフロープレビュー
ノード接続関係を可視化、ズームとパンをサポート
ワークフローをエクスポート
以下のJSON設定をn8nにインポートして、このワークフローを使用できます
{
"id": "INTOFdov9bwbgo9w",
"meta": {
"instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c"
},
"name": "Ticketing Backend",
"tags": [],
"nodes": [
{
"id": "06cc3525-a2a8-4b35-8436-73d03e43dbc7",
"name": "チケット取得",
"type": "n8n-nodes-base.googleSheets",
"position": [
-240,
-96
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.ticket_id }}",
"lookupColumn": "Ticket ID"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2010454173,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=2010454173",
"cachedResultName": "Tickets"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7
},
{
"id": "4fe22443-1f46-4c85-8b93-670e2dfff603",
"name": "バーコード解析",
"type": "n8n-nodes-base.code",
"position": [
-448,
-96
],
"parameters": {
"jsCode": "const data = $input.all()[0].json.body;\n\n// Parse the barcode JSON string\nlet ticketData;\ntry {\n ticketData = JSON.parse(data.barcode);\n} catch (error) {\n return [{\n json: {\n success: false,\n message: \"Invalid QR code format\"\n }\n }];\n}\n\nreturn [{\n json: {\n ticket_id: ticketData.ticket_id,\n event: ticketData.event,\n name: ticketData.name,\n email: ticketData.email,\n ticket_number: ticketData.ticket_number,\n total_tickets: ticketData.total_tickets,\n scannedAt: data.scannedAt\n }\n}];"
},
"typeVersion": 2
},
{
"id": "2276b656-ea51-4570-8896-d1fe28ebee45",
"name": "チケット有効?",
"type": "n8n-nodes-base.if",
"position": [
-48,
-96
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "5d1d995d-3ee8-4b56-8555-9fe5b919497a",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $('Get Tickets').all().length }}",
"rightValue": 0
},
{
"id": "982727a9-3593-4d1c-9ab3-d1c26d0798fc",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json[\"Checked In\"] }}",
"rightValue": "YES"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "d5265744-f1a6-4590-9c45-462297c5b4c7",
"name": "出力解析",
"type": "n8n-nodes-base.code",
"position": [
144,
16
],
"parameters": {
"jsCode": "const getTicketsResult = $('Get Tickets').all();\nconst parsedData = $('Parse Barcode').first().json;\n\nlet errorMessage = \"Ticket tidak valid\";\nlet errorCode = \"INVALID_TICKET\";\n\n// Check if ticket exists but already checked in\nif (getTicketsResult.length > 0) {\n const ticket = getTicketsResult[0].json;\n if (ticket[\"Checked In\"] === \"YES\") {\n errorMessage = `Ticket sudah di-scan pada ${ticket[\"Checkin TIme\"]}`;\n errorCode = \"ALREADY_CHECKED_IN\";\n }\n}\n\nreturn [{\n json: {\n success: false,\n error_code: errorCode,\n message: errorMessage,\n ticket_id: parsedData.ticket_id\n }\n}];"
},
"typeVersion": 2
},
{
"id": "2638bce7-9b67-491a-9bc1-8ffa2d08d4f8",
"name": "既にチェックイン済み",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
320,
16
],
"parameters": {
"options": {}
},
"typeVersion": 1.4
},
{
"id": "81b4773f-4728-4413-8950-12d79a27d257",
"name": "チェックイン済み",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
320,
-176
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"success\": true,\n \"message\": \"Check-in berhasil!\",\n \"data\": {\n \"ticket_id\": \"{{ $('Get Tickets').first().json['Ticket ID'] }}\",\n \"name\": \"{{ $('Get Tickets').first().json.Nama }}\",\n \"ticket_number\": \"{{ $('Get Tickets').first().json['Ticket Number'] }}\",\n \"email\": \"{{ $('Get Tickets').first().json.Email }}\",\n \"checked_in_at\": \"{{ $json[\"Checkin TIme\"] }}\"\n }\n}"
},
"typeVersion": 1.4
},
{
"id": "8f9403c3-65b9-4a5b-956f-c31c1089c190",
"name": "チケットステータス更新",
"type": "n8n-nodes-base.googleSheets",
"position": [
144,
-176
],
"parameters": {
"columns": {
"value": {
"Ticket ID": "={{ $json[\"Ticket ID\"] }}",
"Checked In": "YES",
"Checkin TIme": "={{ new Date($('SCAN TICKET').item.json.body.scannedAt).toLocaleString('en-GB', { hour12: false }).replace(',', '') }}"
},
"schema": [
{
"id": "Ticket ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Ticket ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Nama",
"type": "string",
"display": true,
"required": false,
"displayName": "Nama",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ticket Number",
"type": "string",
"display": true,
"required": false,
"displayName": "Ticket Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Tickets",
"type": "string",
"display": true,
"required": false,
"displayName": "Total Tickets",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Checked In",
"type": "string",
"display": true,
"required": false,
"displayName": "Checked In",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Checkin TIme",
"type": "string",
"display": true,
"required": false,
"displayName": "Checkin TIme",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Ticket ID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2010454173,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=2010454173",
"cachedResultName": "Tickets"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7
},
{
"id": "b6b18e4b-f70e-4870-b649-83980feb360e",
"name": "チケットスキャン",
"type": "n8n-nodes-base.webhook",
"position": [
-656,
-96
],
"webhookId": "492de38d-21ee-4f7d-adfe-dbad80dfa146",
"parameters": {
"path": "v1/scanner",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "a77f808a-f8c8-4d68-9007-744aa8018245",
"name": "メールアドレス存在?",
"type": "n8n-nodes-base.if",
"position": [
-48,
1168
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "5d1d995d-3ee8-4b56-8555-9fe5b919497a",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.row_number !== undefined }}",
"rightValue": "undefined"
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "08943fee-59bc-4aac-b9cf-80662be21dca",
"name": "参加者取得",
"type": "n8n-nodes-base.googleSheets",
"position": [
-240,
1168
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.Email }}",
"lookupColumn": "Email"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=0",
"cachedResultName": "Register"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7,
"alwaysOutputData": true
},
{
"id": "86af65a2-c014-4714-be6d-16083640acb4",
"name": "入力検証",
"type": "n8n-nodes-base.code",
"position": [
-688,
1328
],
"parameters": {
"jsCode": "const data = $input.all()[0].json.body;\n\n// Validation\nconst errors = [];\n\nif (!data.nama || data.nama.trim() === '') {\n errors.push('Nama wajib diisi');\n}\n\nif (!data.email || !data.email.includes('@')) {\n errors.push('Email tidak valid');\n}\n\nif (!data.no_hp || data.no_hp.length < 10) {\n errors.push('Nomor HP tidak valid');\n}\n\nif (!data.jumlah_tiket || data.jumlah_tiket < 1) {\n errors.push('Jumlah tiket minimal 1');\n}\n\nif (!data.payment_method) {\n errors.push('Payment method wajib dipilih');\n}\n\n// Return error if validation fails\nif (errors.length > 0) {\n return [{\n json: {\n valid: false,\n validation_error: true,\n errors: errors\n }\n }];\n}\n\n// Transform data for sheet\nreturn [{\n json: {\n valid: true,\n validation_error: false,\n Nama: data.nama,\n \"No Hp\": data.no_hp,\n Email: data.email,\n \"Jumlah TIket\": data.jumlah_tiket,\n \"Harga Tiket\": data.total_price,\n \"Payment Method \": data.payment_method,\n \"Payment Status\": \"PENDING\",\n \"Email Sent\": \"NO\",\n \"Ticked ID\": \"\"\n }\n}];"
},
"typeVersion": 2
},
{
"id": "0bb8c7fa-59d8-4185-954f-3a0858924bc7",
"name": "検証エラー",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
-240,
1344
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "{\n \"success\": false,\n \"error\": \"VALIDATION_ERROR\",\n \"message\": \"Validasi gagal\",\n \"errors\": [\"Email tidak valid\"]\n}"
},
"typeVersion": 1.4
},
{
"id": "76dbc60d-7078-4b6e-ad79-cbbcdde7a9e7",
"name": "有効な入力?",
"type": "n8n-nodes-base.if",
"position": [
-480,
1328
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "0248f448-237b-46da-86b8-cdc5058ec170",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.validation_error }}",
"rightValue": "false"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "431640c5-e0a7-44e2-9b51-c11d0f6f6b6c",
"name": "既に登録済み",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
160,
992
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "{\n \"success\": false,\n \"error\": \"DUPLICATE_EMAIL\",\n \"message\": \"Email sudah terdaftar\",\n \"existing_data\": {\n \"nama\": \"khairul\",\n \"payment_status\": \"PAID\",\n \"jumlah_tiket\": 2\n }\n}"
},
"typeVersion": 1.4
},
{
"id": "b9f61154-8a8b-4ea9-ae62-a1b9b316af72",
"name": "チケット予約済み",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
368,
1184
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"success\": true,\n \"message\": \"Registrasi berhasil! Silakan lakukan pembayaran.\",\n \"data\": {\n \"nama\": \"{{ $json.Nama }}\",\n \"email\": \"{{ $json.Email }}\",\n \"jumlah_tiket\": {{ $json['Jumlah TIket'] }},\n \"total_price\": {{ $json['Harga Tiket'] }},\n \"payment_method\": \"{{ $json['Payment Method '] }}\",\n \"payment_status\": \"PENDING\"\n }\n}"
},
"typeVersion": 1.4
},
{
"id": "63255ef1-df60-41cf-a262-e45e61636139",
"name": "データ保存",
"type": "n8n-nodes-base.googleSheets",
"position": [
160,
1184
],
"parameters": {
"columns": {
"value": {
"Nama": "={{ $('Validate Input').item.json.Nama }}",
"Email": "={{ $('Validate Input').item.json.Email }}",
"No Hp": "={{ $('Validate Input').item.json['No Hp'] }}",
"Email Sent": "={{ $('Validate Input').item.json['Email Sent'] }}",
"Harga Tiket": "={{ $('Validate Input').item.json['Harga Tiket'] }}",
"Jumlah TIket": "={{ $('Validate Input').item.json['Jumlah TIket'] }}",
"Payment Status": "={{ $('Validate Input').item.json['Payment Status'] }}",
"Payment Method ": "={{ $('Validate Input').item.json['Payment Method '] }}"
},
"schema": [
{
"id": "Nama",
"type": "string",
"display": true,
"required": false,
"displayName": "Nama",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "No Hp",
"type": "string",
"display": true,
"required": false,
"displayName": "No Hp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Jumlah TIket",
"type": "string",
"display": true,
"required": false,
"displayName": "Jumlah TIket",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Harga Tiket",
"type": "string",
"display": true,
"required": false,
"displayName": "Harga Tiket",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Method ",
"type": "string",
"display": true,
"required": false,
"displayName": "Payment Method ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Payment Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Sent",
"type": "string",
"display": true,
"required": false,
"displayName": "Email Sent",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ticked ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Ticked ID",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=0",
"cachedResultName": "Register"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7
},
{
"id": "f93e5fa3-4e4f-4909-9fbe-fb148cc743d3",
"name": "登録",
"type": "n8n-nodes-base.webhook",
"position": [
-912,
1328
],
"webhookId": "1f5ebc0c-2fed-4bcb-9741-e70d188db457",
"parameters": {
"path": "v1/register",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2.1
},
{
"id": "dd84a672-34c0-422d-a178-0a181fd37882",
"name": "行取得",
"type": "n8n-nodes-base.googleSheets",
"position": [
-736,
416
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=0",
"cachedResultName": "Register"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7
},
{
"id": "5d549b2f-14ca-4f42-b96d-8d01051c0351",
"name": "支払済・未送信をフィルタ",
"type": "n8n-nodes-base.filter",
"position": [
-512,
416
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "75fc42dd-aeec-4109-970d-7eb026b6b097",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json[\"Payment Status\"] }}",
"rightValue": "PAID"
},
{
"id": "70bf28b6-59dc-4acc-8908-5e521d83c4fa",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json[\"Email Sent\"] }}",
"rightValue": "NO"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "0adcf4d7-d1e6-4f8a-945a-b7346ffd69fc",
"name": "チケットデータ生成",
"type": "n8n-nodes-base.code",
"position": [
-752,
640
],
"parameters": {
"jsCode": "const items = $input.all();\nconst output = [];\n\nfor (let i = 0; i < items.length; i++) {\n const item = items[i].json;\n \n // Parse jumlah tiket\n const jumlahTiket = parseInt(item[\"Jumlah TIket\"]) || 1;\n \n // Generate ALL ticket IDs first for this person\n const allTicketsForThisPerson = [];\n \n for (let ticketNum = 1; ticketNum <= jumlahTiket; ticketNum++) {\n const now = new Date();\n const timestamp = now.toISOString().slice(0,10).replace(/-/g, '');\n const rowNum = item.row_number || (i + 2);\n const hash = Math.random().toString(36).substring(2, 10).toUpperCase();\n \n const ticketId = `TL-${timestamp}-${String(rowNum).padStart(4, '0')}-${ticketNum}-${hash}`;\n allTicketsForThisPerson.push(ticketId);\n \n const qrData = JSON.stringify({\n event: \"TABRAK_LARI\",\n ticket_id: ticketId,\n name: item.Nama,\n email: item.Email,\n ticket_number: ticketNum,\n total_tickets: jumlahTiket,\n timestamp: now.toISOString(),\n hash: hash\n });\n \n output.push({\n json: {\n ...item,\n ticket_id: ticketId,\n ticket_number: ticketNum,\n total_tickets: jumlahTiket,\n qr_data: qrData,\n qr_data_url_encoded: encodeURIComponent(qrData),\n event_name: \"TABRAK LARI\",\n event_date: \"15 November 2025\",\n event_location: \"GOR Pontianak\"\n }\n });\n }\n}\n\nreturn output;"
},
"typeVersion": 2
},
{
"id": "f9c1609a-b102-452f-972d-12625e9403c6",
"name": "QRコード生成",
"type": "n8n-nodes-base.httpRequest",
"position": [
-480,
640
],
"parameters": {
"url": "=https://api.qrserver.com/v1/create-qr-code/?size=300x300&data={{ $json.qr_data_url_encoded }}",
"options": {
"response": {
"response": {
"responseFormat": "file"
}
}
}
},
"typeVersion": 4.2
},
{
"id": "43c28eec-ecaa-4de2-aab6-c7efa392b232",
"name": "HTMLメール作成",
"type": "n8n-nodes-base.code",
"position": [
-256,
560
],
"parameters": {
"jsCode": "// Build HTML Ticket Email - MULTIPLE TICKETS SUPPORT\nconst items = $input.all();\nconst output = [];\n\nfor (let i = 0; i < items.length; i++) {\n const item = items[i].json;\n \n // Get binary data\n let qrBase64 = '';\n \n if (items[i].binary && items[i].binary.data) {\n const binaryData = items[i].binary.data;\n \n if (binaryData.data) {\n qrBase64 = binaryData.data;\n } else if (Buffer.isBuffer(binaryData)) {\n qrBase64 = binaryData.toString('base64');\n }\n }\n \n const htmlTemplate = `\n<!DOCTYPE html>\n<html>\n<head>\n <style>\n body {\n font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n padding: 20px;\n margin: 0;\n }\n .ticket-container {\n max-width: 600px;\n margin: 0 auto;\n background: white;\n border-radius: 20px;\n overflow: hidden;\n box-shadow: 0 20px 60px rgba(0,0,0,0.3);\n }\n .ticket-header {\n background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);\n color: white;\n padding: 40px 30px;\n text-align: center;\n }\n .ticket-header h1 {\n margin: 0;\n font-size: 32px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 2px;\n }\n .ticket-number-badge {\n background: rgba(255,255,255,0.2);\n display: inline-block;\n padding: 8px 20px;\n border-radius: 20px;\n margin-top: 10px;\n font-size: 14px;\n font-weight: 600;\n }\n .ticket-body {\n padding: 40px 30px;\n }\n .qr-section {\n text-align: center;\n margin: 30px 0;\n padding: 30px;\n background: #f8f9fa;\n border-radius: 15px;\n }\n .qr-section img {\n max-width: 280px;\n border: 8px solid white;\n border-radius: 10px;\n box-shadow: 0 5px 15px rgba(0,0,0,0.1);\n }\n .ticket-info {\n background: #f8f9fa;\n padding: 25px;\n border-radius: 15px;\n margin: 20px 0;\n }\n .info-row {\n display: flex;\n justify-content: space-between;\n padding: 12px 0;\n border-bottom: 1px solid #dee2e6;\n }\n .info-row:last-child {\n border-bottom: none;\n }\n .info-label {\n font-weight: 600;\n color: #495057;\n }\n .info-value {\n color: #212529;\n font-weight: 500;\n }\n .ticket-id {\n text-align: center;\n font-size: 20px;\n font-weight: 700;\n color: #667eea;\n margin: 20px 0;\n padding: 15px;\n background: #f8f9fa;\n border-radius: 10px;\n letter-spacing: 1px;\n word-break: break-all;\n }\n .important-note {\n background: #fff3cd;\n border-left: 4px solid #ffc107;\n padding: 20px;\n margin: 25px 0;\n border-radius: 5px;\n }\n .important-note h3 {\n margin-top: 0;\n color: #856404;\n }\n .footer {\n text-align: center;\n padding: 30px;\n color: #6c757d;\n font-size: 14px;\n }\n </style>\n</head>\n<body>\n <div class=\"ticket-container\">\n <div class=\"ticket-header\">\n <h1>${item.event_name}</h1>\n <p style=\"margin: 10px 0 0 0; font-size: 18px;\">Tiketmu Telah Tersedia!</p>\n <div class=\"ticket-number-badge\">\n Tiket ${item.ticket_number} dari ${item.total_tickets}\n </div>\n </div>\n \n <div class=\"ticket-body\">\n <h2 style=\"color: #212529; margin-top: 0;\">Hi ${item.Nama || item.Name || 'Guest'}!</h2>\n <p style=\"color: #495057; font-size: 16px; line-height: 1.6;\">\n Terima kasih atas pembayaran Anda! Berikut adalah tiket <strong>#${item.ticket_number}</strong> dari total <strong>${item.total_tickets} tiket</strong> yang Anda pesan.\n </p>\n \n <div class=\"ticket-id\">\n ${item.ticket_id}\n </div>\n \n <div class=\"qr-section\">\n <h3 style=\"margin-top: 0; color: #495057;\">Scan QR Code Ini di Entrance</h3>\n <img src=\"data:image/png;base64,${qrBase64}\" alt=\"QR Code Ticket\" />\n </div>\n \n <div class=\"ticket-info\">\n <h3 style=\"margin-top: 0; color: #495057;\">Detail Tiket</h3>\n <div class=\"info-row\">\n <span class=\"info-label\">Nama:</span>\n <span class=\"info-value\">${item.Nama || item.Name || 'Guest'}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Email:</span>\n <span class=\"info-value\">${item.Email}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Tiket:</span>\n <span class=\"info-value\">#${item.ticket_number} dari ${item.total_tickets}</span>\n </div>\n <div class=\"info-row\">\n <span class=\"info-label\">Ticket ID:</span>\n <span class=\"info-value\">${item.ticket_id}</span>\n </div>\n </div>\n \n <div class=\"important-note\">\n <h3>Penting!</h3>\n <ul style=\"margin: 10px 0; padding-left: 20px;\">\n <li>Simpan email ini dengan baik</li>\n <li>Setiap tiket memiliki QR code unik</li>\n <li>Tunjukkan QR code saat masuk venue</li>\n <li>Satu tiket hanya berlaku untuk satu kali scan</li>\n <li>Datang 30 menit sebelum acara dimulai</li>\n </ul>\n </div>\n </div>\n \n <div class=\"footer\">\n <p style=\"margin: 5px 0;\">2025 TABRAK LARI Event. All rights reserved.</p>\n </div>\n </div>\n</body>\n</html>\n`;\n\n output.push({\n json: {\n ...item,\n html_content: htmlTemplate,\n qr_base64: qrBase64\n }\n });\n}\n\nreturn output;"
},
"typeVersion": 2
},
{
"id": "641a85a1-0f76-4894-bd17-c9715f39eea1",
"name": "メール送信 (Gmail)",
"type": "n8n-nodes-base.gmail",
"position": [
0,
384
],
"webhookId": "28bf1adb-e6ca-4797-ade5-6f7d2746bf1e",
"parameters": {
"sendTo": "={{ $json.Email }}",
"message": "={{ $json.html_content }}",
"options": {
"appendAttribution": false
},
"subject": "=Tiketmu Telah Tersedia!"
},
"credentials": {
"gmailOAuth2": {
"id": "8p11S7abjY8KddB9",
"name": "festadjagad@gmail.com"
}
},
"typeVersion": 2.1
},
{
"id": "bcfc2a0f-474b-4b9a-a652-52715cdf7e29",
"name": "シート更新(登録)",
"type": "n8n-nodes-base.googleSheets",
"position": [
272,
560
],
"parameters": {
"columns": {
"value": {
"Email": "={{ $json.Email }}",
"Ticked ID": "={{ $json.ticket_ids_combined }}",
"Email Sent": "YES"
},
"schema": [
{
"id": "Nama",
"type": "string",
"display": true,
"required": false,
"displayName": "Nama",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "No Hp",
"type": "string",
"display": true,
"required": false,
"displayName": "No Hp",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Jumlah TIket",
"type": "string",
"display": true,
"required": false,
"displayName": "Jumlah TIket",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Harga Tiket",
"type": "string",
"display": true,
"required": false,
"displayName": "Harga Tiket",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Method ",
"type": "string",
"display": true,
"required": false,
"displayName": "Payment Method ",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Payment Status",
"type": "string",
"display": true,
"required": false,
"displayName": "Payment Status",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email Sent",
"type": "string",
"display": true,
"required": false,
"displayName": "Email Sent",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ticked ID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Ticked ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Checked In?",
"type": "string",
"display": true,
"required": false,
"displayName": "Checked In?",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CHECKIN TIME",
"type": "string",
"display": true,
"required": false,
"displayName": "CHECKIN TIME",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"Email"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=0",
"cachedResultName": "Register"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7
},
{
"id": "207cd6d4-0812-4547-8b28-c5c3725636bd",
"name": "シート更新(チケット)",
"type": "n8n-nodes-base.googleSheets",
"position": [
16,
736
],
"parameters": {
"columns": {
"value": {
"Nama": "={{ $json.Nama }}",
"Email": "={{ $json.Email }}",
"Ticket ID": "={{ $json.ticket_id }}",
"Ticket Number": "={{ $json.ticket_number }}/{{ $json.total_tickets }}",
"Total Tickets": "={{ $json.total_tickets }}"
},
"schema": [
{
"id": "Ticket ID",
"type": "string",
"display": true,
"required": false,
"displayName": "Ticket ID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Nama",
"type": "string",
"display": true,
"required": false,
"displayName": "Nama",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Ticket Number",
"type": "string",
"display": true,
"required": false,
"displayName": "Ticket Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Total Tickets",
"type": "string",
"display": true,
"required": false,
"displayName": "Total Tickets",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Checked In",
"type": "string",
"display": true,
"required": false,
"displayName": "Checked In",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Checkin TIme",
"type": "string",
"display": true,
"required": false,
"displayName": "Checkin TIme",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2010454173,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit#gid=2010454173",
"cachedResultName": "Tickets"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1rQqe5XWmhWgnsAI6Q8kxoeCTbcNMdHsfP2tHRP7y7Po/edit?usp=drivesdk",
"cachedResultName": "TABRAK LARI"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "gnUSHhCw4cKx3pwo",
"name": "Project GCP: n8n-khmuhtadin"
}
},
"typeVersion": 4.7
},
{
"id": "f99c03de-9578-456f-8443-e5fa2840e88e",
"name": "開始",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-960,
416
],
"parameters": {
"rule": {
"interval": [
{
"field": "minutes",
"minutesInterval": 1
}
]
}
},
"typeVersion": 1.2
},
{
"id": "75d7c162-962b-4a07-80db-43ed07565987",
"name": "データ解析",
"type": "n8n-nodes-base.code",
"position": [
16,
560
],
"parameters": {
"jsCode": "const items = $input.all();\nconst grouped = {};\n\nfor (let item of items) {\n const email = item.json.Email;\n \n if (!grouped[email]) {\n grouped[email] = {\n Email: email,\n ticket_ids: []\n };\n }\n \n grouped[email].ticket_ids.push(item.json.ticket_id);\n}\n\nconst output = Object.values(grouped).map(item => ({\n json: {\n Email: item.Email,\n ticket_ids_combined: item.ticket_ids.join(\", \")\n }\n}));\n\nreturn output;"
},
"typeVersion": 2
},
{
"id": "0b3858e2-2c61-4f1d-b6e6-45a7e3ce3ea6",
"name": "付箋",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
-352
],
"parameters": {
"width": 1552,
"height": 608,
"content": ""
},
"typeVersion": 1
},
{
"id": "7b512e89-2626-4a2b-b24e-a4688d9e120b",
"name": "付箋1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
288
],
"parameters": {
"color": 4,
"width": 1552,
"height": 608,
"content": "# Ticket Generator & Sender\n"
},
"typeVersion": 1
},
{
"id": "cc7ab6b0-47ea-4e08-8ba8-5cbc0e470e2c",
"name": "付箋2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1008,
928
],
"parameters": {
"color": 3,
"width": 1552,
"height": 608,
"content": "\n"
},
"typeVersion": 1
},
{
"id": "34074899-d8b0-4ae0-89be-3ac61046fd03",
"name": "付箋3",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
288
],
"parameters": {
"color": 5,
"width": 512,
"height": 608,
"content": "# Event Ticketing System - Complete Flow\n\nThis workflow manages the full lifecycle of event ticketing:\n1. **Registration** - Accepts participant registration via webhook\n2. **Ticket Generation** - Auto-generates QR codes for paid registrations\n3. **Email Delivery** - Sends tickets to participants via Gmail\n4. **Check-in Scanner** - Validates tickets at the event entrance\n\nAll data is stored in Google Sheets with two tabs:\n- Register (participant info)\n- Tickets (individual ticket records)"
},
"typeVersion": 1
},
{
"id": "33452a6b-f2cf-4acc-bfe1-fb2506e26cd6",
"name": "付箋4",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
928
],
"parameters": {
"color": 5,
"width": 512,
"height": 608,
"content": "# Setup Required\n\nYou need these credentials configured:\n\n1. **Google Sheets OAuth2** \n - Used for reading/writing registration & ticket data\n - Connect your Google account in n8n credentials\n\n2. **Gmail OAuth2**\n - Used for sending ticket emails\n - Must use the same Google account as Sheets\n - Enable Gmail API in Google Cloud Console\n\n3. **Google Sheet Structure**\n - Sheet ID: `your sheet id`\n - Tab 1: \"Register\" - stores participant registrations\n - Tab 2: \"Tickets\" - stores individual ticket records"
},
"typeVersion": 1
},
{
"id": "160db932-0e42-4b39-b39d-2654179c1c78",
"name": "付箋5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-992,
-336
],
"parameters": {
"color": 5,
"width": 480,
"height": 496,
"content": "# How Ticket Scanner Works\n\n**Endpoint**: POST `/v1/scanner`\n\n**Flow**:\n1. Receives scanned QR data\n2. Parses ticket_id from barcode JSON\n3. Looks up ticket in Google Sheets\n4. Validates:\n - Ticket exists\n - Not already checked in\n5. Updates \"Checked In\" = YES if valid\n6. Returns success/error response\n\n**Error Cases**:\n- Invalid ticket\n- Already checked in (shows previous check-in time)"
},
"typeVersion": 1
},
{
"id": "84430c98-7876-4ea9-9908-7f59c7718752",
"name": "付箋6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-992,
944
],
"parameters": {
"color": 5,
"width": 512,
"height": 352,
"content": "# Registration Endpoint\n\n**Endpoint**: POST `/v1/register`\n\n**Expected Input**:\n```json\n{\n \"nama\": \"string\",\n \"email\": \"string\", \n \"no_hp\": \"string\",\n \"jumlah_tiket\": number,\n \"total_price\": number,\n \"payment_method\": \"string\"\n}"
},
"typeVersion": 1
},
{
"id": "9cd7ba10-a91c-4134-a481-94df3bfde3c3",
"name": "付箋8",
"type": "n8n-nodes-base.stickyNote",
"position": [
576,
-352
],
"parameters": {
"color": 5,
"width": 512,
"height": 608,
"content": "# Automatic Ticket Generation\n\n**Trigger**: Runs every 1 minute\n\n**What it does**:\n1. Finds paid registrations where Email Sent = NO\n2. Generates unique ticket IDs for each ticket\n3. Creates QR codes via qrserver.com API\n4. Builds HTML email with QR code embedded\n5. Sends one email per ticket (supports multiple tickets)\n6. Updates both Register & Tickets sheets\n7. Marks Email Sent = YES\n\n**Ticket ID Format**: \n`TL-YYYYMMDD-XXXX-N-HASH`\n- Event code, date, row number, ticket number, unique hash"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "7577dfcb-a9b7-4cef-85ca-ecfc79c85cef",
"connections": {
"f99c03de-9578-456f-8443-e5fa2840e88e": {
"main": [
[
{
"node": "dd84a672-34c0-422d-a178-0a181fd37882",
"type": "main",
"index": 0
}
]
]
},
"dd84a672-34c0-422d-a178-0a181fd37882": {
"main": [
[
{
"node": "5d549b2f-14ca-4f42-b96d-8d01051c0351",
"type": "main",
"index": 0
}
]
]
},
"f93e5fa3-4e4f-4909-9fbe-fb148cc743d3": {
"main": [
[
{
"node": "86af65a2-c014-4714-be6d-16083640acb4",
"type": "main",
"index": 0
}
]
]
},
"75d7c162-962b-4a07-80db-43ed07565987": {
"main": [
[
{
"node": "bcfc2a0f-474b-4b9a-a652-52715cdf7e29",
"type": "main",
"index": 0
}
]
]
},
"63255ef1-df60-41cf-a262-e45e61636139": {
"main": [
[
{
"node": "b9f61154-8a8b-4ea9-ae62-a1b9b316af72",
"type": "main",
"index": 0
}
]
]
},
"06cc3525-a2a8-4b35-8436-73d03e43dbc7": {
"main": [
[
{
"node": "2276b656-ea51-4570-8896-d1fe28ebee45",
"type": "main",
"index": 0
}
]
]
},
"b6b18e4b-f70e-4870-b649-83980feb360e": {
"main": [
[
{
"node": "4fe22443-1f46-4c85-8b93-670e2dfff603",
"type": "main",
"index": 0
}
]
]
},
"a77f808a-f8c8-4d68-9007-744aa8018245": {
"main": [
[
{
"node": "431640c5-e0a7-44e2-9b51-c11d0f6f6b6c",
"type": "main",
"index": 0
}
],
[
{
"node": "63255ef1-df60-41cf-a262-e45e61636139",
"type": "main",
"index": 0
}
]
]
},
"d5265744-f1a6-4590-9c45-462297c5b4c7": {
"main": [
[
{
"node": "2638bce7-9b67-491a-9bc1-8ffa2d08d4f8",
"type": "main",
"index": 0
}
]
]
},
"76dbc60d-7078-4b6e-ad79-cbbcdde7a9e7": {
"main": [
[
{
"node": "08943fee-59bc-4aac-b9cf-80662be21dca",
"type": "main",
"index": 0
}
],
[
{
"node": "0bb8c7fa-59d8-4185-954f-3a0858924bc7",
"type": "main",
"index": 0
}
]
]
},
"4fe22443-1f46-4c85-8b93-670e2dfff603": {
"main": [
[
{
"node": "06cc3525-a2a8-4b35-8436-73d03e43dbc7",
"type": "main",
"index": 0
}
]
]
},
"86af65a2-c014-4714-be6d-16083640acb4": {
"main": [
[
{
"node": "76dbc60d-7078-4b6e-ad79-cbbcdde7a9e7",
"type": "main",
"index": 0
}
]
]
},
"08943fee-59bc-4aac-b9cf-80662be21dca": {
"main": [
[
{
"node": "a77f808a-f8c8-4d68-9007-744aa8018245",
"type": "main",
"index": 0
}
]
]
},
"43c28eec-ecaa-4de2-aab6-c7efa392b232": {
"main": [
[
{
"node": "641a85a1-0f76-4894-bd17-c9715f39eea1",
"type": "main",
"index": 0
},
{
"node": "75d7c162-962b-4a07-80db-43ed07565987",
"type": "main",
"index": 0
},
{
"node": "207cd6d4-0812-4547-8b28-c5c3725636bd",
"type": "main",
"index": 0
}
]
]
},
"f9c1609a-b102-452f-972d-12625e9403c6": {
"main": [
[
{
"node": "43c28eec-ecaa-4de2-aab6-c7efa392b232",
"type": "main",
"index": 0
}
]
]
},
"2276b656-ea51-4570-8896-d1fe28ebee45": {
"main": [
[
{
"node": "8f9403c3-65b9-4a5b-956f-c31c1089c190",
"type": "main",
"index": 0
}
],
[
{
"node": "d5265744-f1a6-4590-9c45-462297c5b4c7",
"type": "main",
"index": 0
}
]
]
},
"5d549b2f-14ca-4f42-b96d-8d01051c0351": {
"main": [
[
{
"node": "0adcf4d7-d1e6-4f8a-945a-b7346ffd69fc",
"type": "main",
"index": 0
}
]
]
},
"0adcf4d7-d1e6-4f8a-945a-b7346ffd69fc": {
"main": [
[
{
"node": "f9c1609a-b102-452f-972d-12625e9403c6",
"type": "main",
"index": 0
}
]
]
},
"8f9403c3-65b9-4a5b-956f-c31c1089c190": {
"main": [
[
{
"node": "81b4773f-4728-4413-8950-12d79a27d257",
"type": "main",
"index": 0
}
]
]
}
}
}よくある質問
このワークフローの使い方は?
上記のJSON設定コードをコピーし、n8nインスタンスで新しいワークフローを作成して「JSONからインポート」を選択、設定を貼り付けて認証情報を必要に応じて変更してください。
このワークフローはどんな場面に適していますか?
上級 - コンテンツ作成, マルチモーダルAI
有料ですか?
このワークフローは完全無料です。ただし、ワークフローで使用するサードパーティサービス(OpenAI APIなど)は別途料金が発生する場合があります。
関連ワークフロー
詐欺防止型リードキャプチャ・育成千リードシステム
AIによるスコアリング、テーブル追跡、マルチチャネルアラートを使って詐欺対策リードをキャプチャーし育成
If
Set
Code
+
If
Set
Code
28 ノードJitesh Dugar
コンテンツ作成
複数の採用サイトからの求人情報の自動化
5 つの求人プラットフォームと AI リジュームジェネレーターを使った就職・応募の自動化
If
Set
Code
+
If
Set
Code
34 ノードGerald Denor
個人の生産性
blog_workflow_template_n8n
Claude AIを使用してニュースから自動のにWordPress記事を生成し、LinkedInに共有
If
Code
Wait
+
If
Code
Wait
23 ノードMarco Venturi
コンテンツ作成
コーチの募集・入社ガイダンス automatique(自動化)
SMS、Twilio、Google スプレッドシートを使って30日間のコンサルティング研修を自動化
If
Set
Code
+
If
Set
Code
36 ノードRonnie Craig
コンテンツ作成
Google Maps、GPT-4、WhatsApp を使用したビジネスパートナー獲得の自動化
Google Maps、GPT-4、WhatsAppを使用したビジネスパートナーの開拓の自動化
If
Set
Code
+
If
Set
Code
64 ノードKhairul Muhtadin
AIチャットボット
インフルエンサー広告施策管理システムの自動化
Instagram / YouTube API を使ったインフルエンサー評価とイベント管理の自動化
If
Code
Gmail
+
If
Code
Gmail
24 ノードJitesh Dugar
コンテンツ作成