Construcción de un agente telefónico con RetellAI para calificación de prospectos salientes y manejo de llamadas entrantes - vídeo
Este es unSales, Support, AIflujo de automatización del dominio deautomatización que contiene 18 nodos.Utiliza principalmente nodos como If, Wait, Gmail, Filter, Twilio, combinando tecnología de inteligencia artificial para lograr automatización inteligente. Automatización de calificación de prospectos con agente telefético RetellAI, OpenAI GPT-4 y Google Sheets
- •Cuenta de Google y credenciales de API de Gmail
- •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
- •Clave de API de OpenAI
Nodos utilizados (18)
Categoría
{
"id": "QO4Mg23JvVfNCICy",
"meta": {
"instanceId": "a2b23892dd6989fda7c1209b381f5850373a7d2b85609624d7c2b7a092671d44",
"templateCredsSetupCompleted": true
},
"name": "Build a Phone Agent to qualify outbound leads and inbound calls with RetellAI -vide",
"tags": [
{
"id": "12w64ydbjEKDaM0B",
"name": "inbound",
"createdAt": "2025-05-06T20:31:43.427Z",
"updatedAt": "2025-05-06T20:31:43.427Z"
},
{
"id": "xSqaFWDcbJCRECKZ",
"name": "outbound",
"createdAt": "2025-05-06T20:31:38.072Z",
"updatedAt": "2025-05-06T20:31:38.072Z"
}
],
"nodes": [
{
"id": "78f39980-c9f8-49b6-93bb-a1f61d347ac3",
"name": "Nota adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
0
],
"parameters": {
"width": 1260,
"height": 320,
"content": "# Outbound lead qualification call workflow"
},
"typeVersion": 1
},
{
"id": "661006b9-dac7-4ac0-882a-2e0cba9dbae1",
"name": "Nota adhesiva 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
360
],
"parameters": {
"color": 5,
"width": 1260,
"height": 320,
"content": "# Inbound call appointment scheduler workflow"
},
"typeVersion": 1
},
{
"id": "96a278b9-8d2e-4f85-9f6a-2997932a7ca4",
"name": "Nota adhesiva 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1060,
-420
],
"parameters": {
"color": 4,
"width": 1400,
"height": 1100,
"content": "# Post-call workflow\n## Triggers when a new lead is added in Google Sheets:\n\n### 1 -Sends SMS to remind rep to call in 5 min\n### 2- (Optional delay step)\n### 3- Triggers RetellAI to place an automated call to the lead\n\n## 💡 Requires phone numbers to be formatted in E.164"
},
"typeVersion": 1
},
{
"id": "d082f904-f185-4615-b0d8-9438c731786f",
"name": "Detectar nuevo lead en Google Sheets",
"type": "n8n-nodes-base.googleSheetsTrigger",
"position": [
-160,
100
],
"parameters": {
"event": "rowAdded",
"options": {},
"pollTimes": {
"item": [
{
"mode": "everyHour"
}
]
},
"sheetName": {
"__rl": true,
"mode": "id",
"value": "="
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "="
}
},
"credentials": {
"googleSheetsTriggerOAuth2Api": {
"id": "pXaVMshaL2QzVDYh",
"name": "Google Sheets Trigger account"
}
},
"typeVersion": 1
},
{
"id": "c61172c2-7795-47be-acaa-d4824ca69680",
"name": "Enviar recordatorio por SMS para llamar al lead en 5 minutos",
"type": "n8n-nodes-base.twilio",
"position": [
140,
100
],
"parameters": {
"to": "={{ $json['Phone Number'] }}",
"from": "+33600000000",
"message": "Hello, thanks for your interest in our roofing services. We'll be calling you shortly to ask about your project!",
"options": {},
"resource": "call"
},
"credentials": {
"twilioApi": {
"id": "udXVmM3xHYZbMW4g",
"name": "Twilio account"
}
},
"typeVersion": 1
},
{
"id": "d88573d4-ec99-40e4-8603-f1e910d034d1",
"name": "Esperar 5 minutos antes de realizar la llamada",
"type": "n8n-nodes-base.wait",
"position": [
460,
100
],
"webhookId": "344c2d5d-5629-4466-866b-ac6359b3b042",
"parameters": {
"unit": "minutes",
"amount": 1
},
"typeVersion": 1.1
},
{
"id": "d6778895-90dd-471e-9d9d-c48a35154291",
"name": "Llamar al nuevo lead usando RetellAI",
"type": "n8n-nodes-base.httpRequest",
"position": [
760,
100
],
"parameters": {
"url": "https://api.retellai.com/v2/create-phone-call",
"method": "POST",
"options": {},
"jsonBody": "={\n \"from_number\": \"+33600000000\",\n \"to_number\": \"{{ $json['Phone Number'] }}\",\n \"retell_llm_dynamic_variables\": {\n \"uuid\": \"{{ $('Detect new lead in Google Sheets').item.json.UUID }}\"\n }\n}",
"sendBody": true,
"sendHeaders": true,
"specifyBody": "json",
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer key_XXXXXXXXX"
},
{
"name": "Content-Type",
"value": "application/json"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "8e7e7c0c-2600-4b20-ba30-b855d456d302",
"name": "Recibir llamada entrante desde RetellAI (webhook)",
"type": "n8n-nodes-base.webhook",
"position": [
-160,
460
],
"webhookId": "ebd11c9b-129c-4b59-8c27-9a4b567305f7",
"parameters": {
"path": "ebd11c9b-129c-4b59-8c27-9a4b567305f7",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 2
},
{
"id": "36bf25b0-d39d-4127-b005-5e3619069744",
"name": "Verificar si el número telefónico existe en Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
300,
460
],
"parameters": {
"options": {},
"filtersUI": {
"values": [
{
"lookupValue": "={{ $json.body.call_inbound.from_number }}",
"lookupColumn": "Phone Number"
}
]
},
"sheetName": {
"__rl": true,
"mode": "id",
"value": "="
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "="
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "51us92xkOlrvArhV",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "0b2dc7b9-84c1-488b-9d02-47cf6ee460c7",
"name": "Enviar respuesta a la llamada entrante webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
760,
460
],
"parameters": {
"options": {},
"respondWith": "json",
"responseBody": "={\n \"call_inbound\": {\n \"dynamic_variables\": {\n \"name\": \"{{ $json.Name }}\"\n }\n }\n}"
},
"typeVersion": 1.1
},
{
"id": "063a4a31-429f-4cf0-b248-869131e92633",
"name": "Recibir datos post-llamada desde RetellAI (webhook)",
"type": "n8n-nodes-base.webhook",
"position": [
1180,
80
],
"webhookId": "f8878b78-43ea-4caa-b16c-cde9aaf2e9b1",
"parameters": {
"path": "f8878b78-43ea-4caa-b16c-cde9aaf2e9b1",
"options": {},
"httpMethod": "POST"
},
"typeVersion": 2
},
{
"id": "215e2031-983a-4785-b46d-026f64c115e4",
"name": "Filtrar solo llamadas analizadas",
"type": "n8n-nodes-base.filter",
"position": [
1400,
80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "a0e40476-0054-43ec-b7a7-e872d1c6061a",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.body.event }}",
"rightValue": "call_analyzed"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "f8cae0c3-1b5d-47e6-b7fd-b47558c30d3f",
"name": "Verificar si la llamada fue saliente",
"type": "n8n-nodes-base.if",
"position": [
1620,
80
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "46590184-4e33-48fd-a9f4-c63b13f88c1f",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.body.call.direction }}",
"rightValue": "outbound"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "8997d5ec-bfb9-4ce9-9e13-6035f02b634e",
"name": "Actualizar registro del lead en Google Sheets",
"type": "n8n-nodes-base.googleSheets",
"position": [
1860,
-40
],
"parameters": {
"columns": {
"value": {
"UUID": "={{ $json.body.call.retell_llm_dynamic_variables.uuid }}",
"Qualification": "={{ $json.body.call.call_analysis.custom_analysis_data.qualification }}"
},
"schema": [
{
"id": "UUID",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "UUID",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Phone Number",
"type": "string",
"display": true,
"required": false,
"displayName": "Phone Number",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Datetime Called",
"type": "string",
"display": true,
"required": false,
"displayName": "Datetime Called",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Qualification",
"type": "string",
"display": true,
"required": false,
"displayName": "Qualification",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "string",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"UUID"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "id",
"value": "="
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "="
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "51us92xkOlrvArhV",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "20757ff8-6604-4c80-96ec-32bfac983ed7",
"name": "Enviar correo con resumen de la llamada",
"type": "n8n-nodes-base.gmail",
"position": [
2220,
-40
],
"webhookId": "806ec3f9-8bcb-48ef-8e22-9d1ce3b06bf0",
"parameters": {
"sendTo": "youremail@gmail.com",
"message": "=Name:\n{{ $json.body.call.call_analysis.custom_analysis_data.first_name }}\n\nNumber:\n{{ $json.body.call.call_analysis.custom_analysis_data.phone_number }}\n\nQualification:\n{{ $json.body.call.call_analysis.custom_analysis_data.qualification }}\n\n\nCall Summary:\n{{ $json.body.call.call_analysis.custom_analysis_data.call_summary }}",
"options": {},
"subject": "=New Lead - Call Summary",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "rKxQHWZ2F5XLJmwF",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "753bd92d-b95b-4710-bf49-6da89a43223f",
"name": "Generar resumen de llamada con OpenAI",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1860,
180
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "GPT-4.1"
},
"options": {},
"messages": {
"values": [
{
"content": "=Analyze this call transcript to identify how the call went and identify possible improvements to the voice prompt:\n\n{{ $json.body.call.transcript }}"
}
]
}
},
"credentials": {
"openAiApi": {
"id": "6h3DfVhNPw9I25nO",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "cf600277-bb07-4f7a-a9b7-3e20017f716d",
"name": "Enviar correo de confirmación al lead",
"type": "n8n-nodes-base.gmail",
"position": [
2220,
180
],
"webhookId": "453fe9d9-1de6-40a2-bd0c-88cb9c1cc7ef",
"parameters": {
"sendTo": "youremail@gmail.com",
"message": "=New roofing appointment:\n\nClient Name:\n{{ $('Check if call was outbound').item.json.body.call.call_analysis.custom_analysis_data.first_name }}\n\nClient Number:\n{{ $('Check if call was outbound').item.json.body.call.call_analysis.custom_analysis_data.phone_number }}\n\nAvailabilities:\n{{ $('Check if call was outbound').item.json.body.call.call_analysis.custom_analysis_data.availabilities }}\n\n\nCall Summary:\n{{ $('Check if call was outbound').item.json.body.call.call_analysis.call_summary }}\n\n\nChatGPT analysis of how the call went and suggestions for improving the voice prompt:\n{{ $json.message.content }}",
"options": {},
"subject": "=Roofing Appointment Scheduled",
"emailType": "text"
},
"credentials": {
"gmailOAuth2": {
"id": "rKxQHWZ2F5XLJmwF",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "f75763b6-0867-4625-89e1-cafa3c9e6e44",
"name": "Nota adhesiva 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-240,
-420
],
"parameters": {
"width": 1260,
"height": 400,
"content": "# ✅ General Workflow Explanation\n## This workflow automates outbound and inbound lead calls with RetellAI, Google Sheets, OpenAI, and Gmail. It handles:\n\nScheduling and reminding outbound qualification calls\nHandling inbound appointment calls\nAutomatically updating records and sending summaries post-call\n\n## 👉 Dependencies:\n\nActive RetellAI API key\nGoogle Sheet set up with lead data\nGmail API credentials configured"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "879f8e4d-91d7-41fc-825d-08f2ef283c25",
"connections": {
"f8cae0c3-1b5d-47e6-b7fd-b47558c30d3f": {
"main": [
[
{
"node": "8997d5ec-bfb9-4ce9-9e13-6035f02b634e",
"type": "main",
"index": 0
}
],
[
{
"node": "753bd92d-b95b-4710-bf49-6da89a43223f",
"type": "main",
"index": 0
}
]
]
},
"215e2031-983a-4785-b46d-026f64c115e4": {
"main": [
[
{
"node": "f8cae0c3-1b5d-47e6-b7fd-b47558c30d3f",
"type": "main",
"index": 0
}
]
]
},
"d082f904-f185-4615-b0d8-9438c731786f": {
"main": [
[
{
"node": "c61172c2-7795-47be-acaa-d4824ca69680",
"type": "main",
"index": 0
}
]
]
},
"753bd92d-b95b-4710-bf49-6da89a43223f": {
"main": [
[
{
"node": "cf600277-bb07-4f7a-a9b7-3e20017f716d",
"type": "main",
"index": 0
}
]
]
},
"d88573d4-ec99-40e4-8603-f1e910d034d1": {
"main": [
[
{
"node": "d6778895-90dd-471e-9d9d-c48a35154291",
"type": "main",
"index": 0
}
]
]
},
"8997d5ec-bfb9-4ce9-9e13-6035f02b634e": {
"main": [
[
{
"node": "20757ff8-6604-4c80-96ec-32bfac983ed7",
"type": "main",
"index": 0
}
]
]
},
"c61172c2-7795-47be-acaa-d4824ca69680": {
"main": [
[
{
"node": "d88573d4-ec99-40e4-8603-f1e910d034d1",
"type": "main",
"index": 0
}
]
]
},
"8e7e7c0c-2600-4b20-ba30-b855d456d302": {
"main": [
[
{
"node": "36bf25b0-d39d-4127-b005-5e3619069744",
"type": "main",
"index": 0
}
]
]
},
"36bf25b0-d39d-4127-b005-5e3619069744": {
"main": [
[
{
"node": "0b2dc7b9-84c1-488b-9d02-47cf6ee460c7",
"type": "main",
"index": 0
}
]
]
},
"063a4a31-429f-4cf0-b248-869131e92633": {
"main": [
[
{
"node": "215e2031-983a-4785-b46d-026f64c115e4",
"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?
Avanzado - Ventas, Soporte, Inteligencia Artificial
¿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
Dr. Firas
@drfirasAutomation expert and certified trainer. I create hands-on courses to master automation with n8n. Contact me to access my exclusive training and start building powerful workflows today. 🚀
Compartir este flujo de trabajo