Automatización de llamadas a prospectos: VAPI, registro en Google Sheets y programación de calendario

Intermedio

Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 13 nodos.Utiliza principalmente nodos como Set, Code, Webhook, HttpRequest, GoogleSheets. Automatización de llamadas a prospectos: VAPI, registro en Google Sheets y agendamiento en calendario

Requisitos previos
  • 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
Vista previa del flujo de trabajo
Visualización de las conexiones entre nodos, con soporte para zoom y panorámica
Exportar flujo de trabajo
Copie la siguiente configuración JSON en n8n para importar y usar este flujo de trabajo
{
  "meta": {
    "instanceId": "0a25db4fd0692af64b58f35e01611f2ef0b5bb9d6654c57ef3741021e7d8cc11",
    "templateId": "5890",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "61f3ed14-9be9-42bb-ac7b-90072005ebc1",
      "name": "Disparador de Nuevo Cliente Potencial (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": "Preparar Datos del Cliente Potencial",
      "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": "Recorrer Lista de Clientes Potenciales",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        880,
        560
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "eea1ca56-260e-4f81-980a-6f2dd46e0667",
      "name": "Iniciar Llamada de Marketing (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": "Respuesta de Llamada VAPI Webhook",
      "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": "Almacenar Respuesta del Usuario (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": "Extraer Información de Reserva/Pedido",
      "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": "Programar Entrega/Reserva de Mesa",
      "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": "Enviar Respuesta a VAPI",
      "type": "n8n-nodes-base.respondToWebhook",
      "position": [
        1328,
        784
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d1162aa6-e63c-4088-a0ad-b9d224faf43a",
      "name": "Nota Adhesiva",
      "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": "Nota Adhesiva1",
      "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": "Nota Adhesiva2",
      "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": "Nota Adhesiva3",
      "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
          }
        ]
      ]
    },
    "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
          }
        ]
      ]
    }
  }
}
Preguntas frecuentes

¿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 - Creación de contenido, IA Multimodal

¿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.

Información del flujo de trabajo
Nivel de dificultad
Intermedio
Número de nodos13
Categoría2
Tipos de nodos10
Descripción de la dificultad

Adecuado para usuarios con experiencia intermedia, flujos de trabajo de complejidad media con 6-15 nodos

Autor
Meak

Meak

@meak

I help people build $5k+/month online by starting their own AI agency. Without BS.

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34