Automatización de marketing y reservas de restaurante con Excel y asistente de voz VAPI
Este es unLead Nurturing, AI Chatbotflujo de automatización del dominio deautomatización que contiene 11 nodos.Utiliza principalmente nodos como Set, Code, Webhook, HttpRequest, GoogleSheets. Usar Excel, asistente de voz VAPI y calendario para automatizar el marketing y reservas de restaurantes
- •Punto final de HTTP Webhook (n8n generará automáticamente)
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Credenciales de API de Google Sheets
Nodos utilizados (11)
Categoría
{
"id": "iD8sbZKww1NpC3At",
"meta": {
"instanceId": "dd69efaf8212c74ad206700d104739d3329588a6f3f8381a46a481f34c9cc281",
"templateCredsSetupCompleted": true
},
"name": "Automate Restaurant Marketing & Booking via Excel and VAPI Voice Agent",
"tags": [],
"nodes": [
{
"id": "61f3ed14-9be9-42bb-ac7b-90072005ebc1",
"name": "Disparador de Nuevo Lead (Excel)",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-20,
-220
],
"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": "BoDTTv5L67GVL3Fi",
"name": "Google Sheets - test"
}
},
"typeVersion": 1
},
{
"id": "de15cc25-830d-4efe-9265-685eef529094",
"name": "Preparar Datos del Lead",
"type": "n8n-nodes-base.set",
"position": [
200,
-220
],
"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": "Recorrer Leads",
"type": "n8n-nodes-base.splitInBatches",
"position": [
420,
-220
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "eea1ca56-260e-4f81-980a-6f2dd46e0667",
"name": "Iniciar Llamada de Marketing (VAPI)",
"type": "n8n-nodes-base.httpRequest",
"position": [
640,
-220
],
"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": "JzfcNGi2NYJB6wll",
"name": "Bearer Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "9addff6d-2a29-4f02-94a8-d76406987569",
"name": "Respuesta de Llamada VAPI Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-20,
40
],
"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": "Almacenar Respuesta del Usuario (Hoja)",
"type": "n8n-nodes-base.googleSheets",
"position": [
200,
40
],
"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"
},
"authentication": "serviceAccount"
},
"credentials": {
"googleApi": {
"id": "ScSS2KxGQULuPtdy",
"name": "Google Sheets- test"
}
},
"typeVersion": 4.5
},
{
"id": "b5dbaaf8-c8e2-4dda-a3a0-862cf25bd659",
"name": "Extraer Información de Reserva/Pedido",
"type": "n8n-nodes-base.code",
"position": [
420,
40
],
"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": "Programar Entrega/Reserva de Mesa",
"type": "n8n-nodes-base.googleCalendar",
"position": [
640,
40
],
"parameters": {
"end": "={{ $json.appointment_end_datetime }}",
"start": "={{ $json.appointment_datetime_parsed }}",
"calendar": {
"__rl": true,
"mode": "id",
"value": "abc@gmail.com"
},
"additionalFields": {}
},
"credentials": {
"googleCalendarOAuth2Api": {
"id": "6ldLmzzYtaqng4pw",
"name": "Google Calendar account - test"
}
},
"typeVersion": 1.3
},
{
"id": "d34f8054-9d1c-48fe-a6df-35e12a0d09a1",
"name": "Enviar Respuesta a VAPI",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
860,
40
],
"parameters": {
"options": {}
},
"typeVersion": 1.2
},
{
"id": "f1a84630-df6e-4f6f-8633-b60a712bbd82",
"name": "Nota Adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-80,
-540
],
"parameters": {
"color": 3,
"width": 980,
"height": 520,
"content": "## Lead Management & Marketing Automation Workflow\n\n- New Lead Trigger: Excel triggers capture new leads when customers are added to the lead management spreadsheet\n\n- Lead Preparation: The system processes and formats lead data, extracting relevant details (name, phone, preferences, booking history)\n\n- Campaign Loop: Automated loop processes through multiple leads for batch marketing campaigns\n\n- Voice Marketing Call: VAPI initiates personalized voice calls to leads with tailored restaurant offers and booking invitations\n\n- Response Tracking: All call results and lead responses are logged back to Excel for campaign analysis\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
},
"typeVersion": 1
},
{
"id": "62f06ede-32ed-40fe-b40f-4887245e34f9",
"name": "Nota Adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-140,
0
],
"parameters": {
"width": 1240,
"height": 500,
"content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## Booking & Order Processing Workflow\n\n- Voice Response Capture: VAPI webhook triggers when customers respond to marketing calls or make direct booking requests\n\n- Response Storage: Customer responses and booking preferences are immediately saved to Excel sheets\n\n- Information Extraction: System processes natural language responses to extract booking details (party size, preferred times, special requests)\n\n- Calendar Integration: Booking information is automatically scheduled in restaurant management systems\n\n- Confirmation Loop: Automated follow-up voice messages confirm bookings and provide additional restaurant information"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"timezone": "Asia/Kolkata",
"callerPolicy": "workflowsFromSameOwner",
"executionOrder": "v1"
},
"versionId": "dc998ee6-b2db-4413-8198-a94fc7ff539f",
"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
}
]
]
},
"9addff6d-2a29-4f02-94a8-d76406987569": {
"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
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Intermedio - Nutrición de leads, Chatbot de IA
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
Oneclick AI Squad
@oneclick-aiThe AI Squad Initiative is a pioneering effort to build, automate and scale AI-powered workflows using n8n.io. Our mission is to help individuals and businesses integrate AI agents seamlessly into their daily operations from automating tasks and enhancing productivity to creating innovative, intelligent solutions. We design modular, reusable AI workflow templates that empower creators, developers and teams to supercharge their automation with minimal effort and maximum impact.
Compartir este flujo de trabajo