Automatisierte Lead-Anrufe: VAPI, Google Sheets-Protokollierung und Kalendertermine
Dies ist ein Content Creation, Multimodal AI-Bereich Automatisierungsworkflow mit 13 Nodes. Hauptsächlich werden Set, Code, Webhook, HttpRequest, GoogleSheets und andere Nodes verwendet. Automatisierung der Lead-Anrufe: VAPI, Google Sheets-Protokollierung und Kalendereinbuchung
- •HTTP Webhook-Endpunkt (wird von n8n automatisch generiert)
- •Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
- •Google Sheets API-Anmeldedaten
Verwendete Nodes (13)
Kategorie
{
"meta": {
"instanceId": "0a25db4fd0692af64b58f35e01611f2ef0b5bb9d6654c57ef3741021e7d8cc11",
"templateId": "5890",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "61f3ed14-9be9-42bb-ac7b-90072005ebc1",
"name": "Neuer Lead-Trigger (Excel)",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
432,
560
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1760068917,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit#gid=1760068917",
"cachedResultName": "call_list"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit?usp=drivesdk",
"cachedResultName": "Vapi_real-estate"
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"id": "ciFJ21F7Wq3VZJYU",
"name": "Google Sheets Trigger account"
}
},
"typeVersion": 1
},
{
"id": "de15cc25-830d-4efe-9265-685eef529094",
"name": "Lead-Daten vorbereiten",
"type": "n8n-nodes-base.set",
"position": [
656,
560
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a10873fa-0c01-46ed-a364-d31200e44e76",
"name": "Phone",
"type": "string",
"value": "=+{{ $json.Phone }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "22384d76-3c0d-4d3b-9e85-4e9d6a005e7f",
"name": "Leads durchlaufen",
"type": "n8n-nodes-base.splitInBatches",
"position": [
880,
560
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "eea1ca56-260e-4f81-980a-6f2dd46e0667",
"name": "Marketing-Anruf starten (VAPI)",
"type": "n8n-nodes-base.httpRequest",
"position": [
1104,
560
],
"parameters": {
"url": "https://api.vapi.ai/call",
"method": "POST",
"options": {},
"jsonBody": "={\n \"assistantId\": \"add_id_here\",\n \"phoneNumberId\": \"add_id_here\",\n \"customers\": [\n {\n \"number\":\"{{ $json.Phone }}\"\n }\n ]\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "nCXOEqnQiFvQMGPr",
"name": "Bearer Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "9addff6d-2a29-4f02-94a8-d76406987569",
"name": "VAPI-Anrufantwort Webhook-Trigger",
"type": "n8n-nodes-base.webhook",
"position": [
432,
784
],
"webhookId": "a34ac7ac-7ea4-4942-8dbf-f9ce3f0986e4",
"parameters": {
"path": "a34ac7ac-7ea4-4942-8dbf-f9ce3f0986e4",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "9797586c-4313-4ce1-b58b-ec3e31cb705e",
"name": "Nutzerantwort speichern (Sheet)",
"type": "n8n-nodes-base.googleSheets",
"position": [
656,
784
],
"parameters": {
"columns": {
"value": {
"next_step": "={{ $json.body.message.toolCalls[0].function.arguments.next_step }}",
"call_notes": "={{ $json.body.message.toolCalls[0].function.arguments.call_notes }}",
"website_url": "={{ $json.body.message.toolCalls[0].function.arguments.website_url }}",
"call_outcome": "={{ $json.body.message.toolCalls[0].function.arguments.call_outcome }}",
"company_name": "={{ $json.body.message.toolCalls[0].function.arguments.company_name }}",
"phone_number": "={{ $json.body.message.toolCalls[0].function.arguments.phone_number }}",
"email_address": "={{ $json.body.message.toolCalls[0].function.arguments.email_address }}",
"prospect_name": "={{ $json.body.message.toolCalls[0].function.arguments.prospect_name }}",
"prospect_role": "={{ $json.body.message.toolCalls[0].function.arguments.prospect_role }}",
"follow_up_date": "={{ $json.body.message.toolCalls[0].function.arguments.follow_up_date }}",
"interest_level": "={{ $json.body.message.toolCalls[0].function.arguments.interest_level }}",
"website_strength": "={{ $json.body.message.toolCalls[0].function.arguments.website_strength }}",
"biggest_challenge": "={{ $json.body.message.toolCalls[0].function.arguments.biggest_challenge }}",
"objections_raised": "={{ $json.body.message.toolCalls[0].function.arguments.objections_raised }}",
"opt_out_requested": "={{ $json.body.message.toolCalls[0].function.arguments.opt_out_requested }}",
"appointment_datetime": "={{ $json.body.message.toolCalls[0].function.arguments.appointment_datetime }}",
"current_marketing_methods": "={{ $json.body.message.toolCalls[0].function.arguments.current_marketing_methods }}",
"previous_digital_marketing": "={{ $json.body.message.toolCalls[0].function.arguments.previous_digital_marketing }}"
},
"schema": [
{
"id": "prospect_name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "prospect_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "prospect_role",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "prospect_role",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "company_name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "company_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website_url",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "website_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website_strength",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "website_strength",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "phone_number",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "phone_number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email_address",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email_address",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "current_marketing_methods",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "current_marketing_methods",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "biggest_challenge",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "biggest_challenge",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "previous_digital_marketing",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "previous_digital_marketing",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "objections_raised",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "objections_raised",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "interest_level",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "interest_level",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "next_step",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "next_step",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "appointment_datetime",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "appointment_datetime",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "call_outcome",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "call_outcome",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "call_notes",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "call_notes",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "follow_up_date",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "follow_up_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "opt_out_requested",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "opt_out_requested",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"prospect_name"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit#gid=0",
"cachedResultName": "Sheet1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1mkHJIhSFXdh1n65GKPwzEzFw0QasunyYm9BDglnXeiI/edit?usp=drivesdk",
"cachedResultName": "Vapi_real-estate"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "cjPjcwa3RdiMAu79",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659",
"name": "Buchungs-/Bestellinformationen extrahieren",
"type": "n8n-nodes-base.code",
"position": [
880,
784
],
"parameters": {
"jsCode": "function formatIST(date) {\n const options = {\n timeZone: 'Asia/Kolkata',\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n hour12: false\n };\n const parts = new Intl.DateTimeFormat('en-GB', options).formatToParts(date);\n const lookup = {};\n parts.forEach(p => lookup[p.type] = p.value);\n return `${lookup.year}-${lookup.month}-${lookup.day} ${lookup.hour}:${lookup.minute}:${lookup.second} IST`;\n}\n\nfor (const item of items) {\n let dateStr = item.json.date_input?.toLowerCase?.() || 'today';\n let timeStr = item.json.time_input || '17:00'; // default to 5 PM\n\n // Step 1: base date\n let baseDate = new Date();\n if (dateStr === 'tomorrow') {\n baseDate.setDate(baseDate.getDate() + 1);\n } else if (dateStr !== 'today') {\n baseDate = new Date(dateStr);\n }\n\n // Step 2: parse time\n const [timePart, ampm] = timeStr.trim().split(/ (AM|PM)/i);\n let [hours, minutes] = timePart.split(':').map(Number);\n if (ampm?.toLowerCase() === 'pm' && hours < 12) hours += 12;\n if (ampm?.toLowerCase() === 'am' && hours === 12) hours = 0;\n\n baseDate.setHours(hours, minutes || 0, 0, 0);\n\n // Step 3: set IST formatted times\n const startIST = formatIST(baseDate);\n const endIST = formatIST(new Date(baseDate.getTime() + 60 * 60 * 1000)); // +1 hour\n\n item.json.appointment_datetime_parsed = startIST;\n item.json.appointment_end_datetime = endIST;\n}\n\nreturn items;\n"
},
"typeVersion": 2
},
{
"id": "74ca51eb-c7c3-4965-839e-db0e80f8dc02",
"name": "Lieferung/Tischbuchung planen",
"type": "n8n-nodes-base.googleCalendar",
"position": [
1104,
784
],
"parameters": {
"end": "={{ $json.appointment_end_datetime }}",
"start": "={{ $json.appointment_datetime_parsed }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "abc@gmail.com"
},
"additionalFields": {}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "q6HWhk6UMiK5ZfZQ",
"name": "Google Calendar account"
}
},
"typeVersion": 1.3
},
{
"id": "d34f8054-9d1c-48fe-a6df-35e12a0d09a1",
"name": "Antwort an VAPI senden",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
1328,
784
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "d1162aa6-e63c-4088-a0ad-b9d224faf43a",
"name": "Notiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
320,
336
],
"parameters": {
"color": 4,
"width": 352,
"height": 176,
"content": "## STEP 1 · Intake & Prep\n**Sheets Trigger** fires on new row in `call_list`.\n**Set (Prepare Lead Data):** format phone before dialing.\nTip: avoid numeric coercion—use a string like `= `+${$json.Phone}`` or E.164 formatting."
},
"typeVersion": 1
},
{
"id": "0cc00ecf-1736-45a2-9616-7d6718084462",
"name": "Notiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
352
],
"parameters": {
"color": 5,
"width": 384,
"content": "## STEP 2 · Dial (VAPI)\n**Split In Batches** paces calls.\n**HTTP → VAPI /call** with Bearer auth; provide `assistantId`, `phoneNumberId`, and `customers[].number`.\nTip: add retry/backoff for throttling or carrier errors."
},
"typeVersion": 1
},
{
"id": "0567d457-4271-4e1b-a6fd-1346c89e873a",
"name": "Notiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1168,
320
],
"parameters": {
"color": 6,
"width": 336,
"height": 208,
"content": "## STEP 3 · Capture Results\n**Webhook** receives VAPI call payload.\n**Sheets (appendOrUpdate)** stores parsed fields (notes, outcome, next_step, contact info...).\nTip: use a stable key in `matchingColumns` (e.g., phone/email) instead of just `prospect_name` to avoid duplicates."
},
"typeVersion": 1
},
{
"id": "36c2d03c-bdd3-4758-8214-08585e028697",
"name": "Notiz3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1504,
544
],
"parameters": {
"color": 7,
"height": 272,
"content": "## STEP 4 · Book & Acknowledge\n**Code** parses `date_input`/`time_input` → start/end times.\nUse **ISO 8601** (e.g., `2025-09-26T17:00:00+05:30`) for Calendar.\n**Google Calendar** creates event; **Respond to Webhook** sends 200/OK back to VAPI."
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"de15cc25-830d-4efe-9265-685eef529094": {
"main": [
[
{
"node": "22384d76-3c0d-4d3b-9e85-4e9d6a005e7f",
"type": "main",
"index": 0
}
]
]
},
"22384d76-3c0d-4d3b-9e85-4e9d6a005e7f": {
"main": [
[
{
"node": "eea1ca56-260e-4f81-980a-6f2dd46e0667",
"type": "main",
"index": 0
}
],
[
{
"node": "22384d76-3c0d-4d3b-9e85-4e9d6a005e7f",
"type": "main",
"index": 0
}
]
]
},
"61f3ed14-9be9-42bb-ac7b-90072005ebc1": {
"main": [
[
{
"node": "de15cc25-830d-4efe-9265-685eef529094",
"type": "main",
"index": 0
}
]
]
},
"b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659": {
"main": [
[
{
"node": "74ca51eb-c7c3-4965-839e-db0e80f8dc02",
"type": "main",
"index": 0
}
]
]
},
"VAPI-Anrufantwort Webhook": {
"main": [
[
{
"node": "9797586c-4313-4ce1-b58b-ec3e31cb705e",
"type": "main",
"index": 0
}
]
]
},
"9797586c-4313-4ce1-b58b-ec3e31cb705e": {
"main": [
[
{
"node": "b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659",
"type": "main",
"index": 0
}
]
]
},
"74ca51eb-c7c3-4965-839e-db0e80f8dc02": {
"main": [
[
{
"node": "d34f8054-9d1c-48fe-a6df-35e12a0d09a1",
"type": "main",
"index": 0
}
]
]
}
}
}Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Fortgeschritten - Content-Erstellung, Multimodales KI
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Diesen Workflow teilen