Asistente de recordatorios de citas

Intermedio

Este es unAI Chatbot, Multimodal AIflujo de automatización del dominio deautomatización que contiene 11 nodos.Utiliza principalmente nodos como Set, Code, HttpRequest, GoogleCalendar, ScheduleTrigger. Usar Google Calendar y Retell AI para automatizar recordatorios de llamadas de cita

Requisitos previos
  • Pueden requerirse credenciales de autenticación para la API de destino
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
{
  "id": "cmusYcLEtQLBks00",
  "meta": {
    "instanceId": "a18da9fe05787064d0871c067b6baf1f5102992b14efc7335bca39a83ba97eb2",
    "templateCredsSetupCompleted": true
  },
  "name": "Appointment Reminder Agent",
  "tags": [],
  "nodes": [
    {
      "id": "016deabc-cd94-41f8-8470-a4df03cb431c",
      "name": "Configurar (Configuración de Retell)",
      "type": "n8n-nodes-base.set",
      "position": [
        400,
        -48
      ],
      "parameters": {
        "values": {
          "string": [
            {
              "name": "from_number",
              "value": "{{ YOUR_FROM_NUMBER }}"
            },
            {
              "name": "agent_id",
              "value": "{{ YOUR_AGENT_ID }}"
            }
          ]
        },
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "47ccb25c-e543-40d1-8155-18046a85d1d5",
      "name": "Activador Programado (9 AM)",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -352,
        -48
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c0a5e52a-ced2-4bbc-b5f2-99b7989f8b7b",
      "name": "Enviar Llamada de Recordatorio (Retell Api)",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        640,
        -48
      ],
      "parameters": {
        "url": "https://api.retellai.com/v2/create-phone-call",
        "options": {},
        "jsonBody": "={\n\"from_number\": \"{{ $json.from_number }}\",\n\"to_number\": \"{{ $json.phone }}\",\n\"retell_llm_dynamic_variables\": {\n    \"name\": \"{{ $json.name }}\",\n    \"phone_number\": \"{{ $json.phone }}\",\n    \"reason\": \"{{ $json.reason }}\",\n    \"start_time\": \"{{ $json.startTime }}\",\n    \"end_time\": \"{{ $json.endTime }}\"\n},\n\"override_agent_id\": \"{{ $json.agent_id }}\"\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "content-Type",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpCustomAuth": {
          "id": "cY0bhQDArrMSy7x6",
          "name": "Custom Auth account"
        },
        "httpHeaderAuth": {
          "id": "wuo9C8tD1CmNbIPD",
          "name": "Retell AI"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "8d90ec35-90b6-495d-89e9-c816ff9279ca",
      "name": "Obtener Eventos Próximos",
      "type": "n8n-nodes-base.googleCalendar",
      "position": [
        -112,
        -48
      ],
      "parameters": {
        "options": {},
        "timeMax": "={{ $now.plus(12, 'hours') }}",
        "calendar": {
          "__rl": true,
          "mode": "id",
          "value": "={{ Your Calendar Email }}"
        },
        "operation": "getAll",
        "returnAll": true
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "JT4VVIXG6yWNeG8p",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "35fa6c4b-6298-4823-8368-e1153fe4740b",
      "name": "Nota Adhesiva",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -416,
        -208
      ],
      "parameters": {
        "color": 3,
        "width": 208,
        "height": 320,
        "content": "This node triggers the workflow every day at 9 AM.\nYou can change the trigger time in the settings if you want calls at a different hour.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "acb7fd45-ea35-47c2-a69f-b60ee1f98525",
      "name": "Nota Adhesiva1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -192,
        -288
      ],
      "parameters": {
        "color": 5,
        "height": 400,
        "content": "This node fetches all events from your Google Calendar in the next 12 hours.\nReplace the calendar email with your own calendar.\nMake sure your Google Calendar OAuth2 credential is connected.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b621211c-c65b-4dbb-b1d9-b5437a1b1e09",
      "name": "Nota Adhesiva2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -352
      ],
      "parameters": {
        "height": 464,
        "content": "This Code node extracts:\n- Name\n- Phone number\n- Reason\n- Start and End time\n\n➡️ These fields must be present in the Google Calendar event description.\n➡️ Example description format:\nName: John Doe\nPhone Number: +14155552671\nReason: Consultation\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d890a065-3c77-4252-a0cb-a90e38d9a17c",
      "name": "Extraer Detalles de la Cita",
      "type": "n8n-nodes-base.code",
      "position": [
        144,
        -48
      ],
      "parameters": {
        "jsCode": "return items.flatMap(item => {\n  const description = item.json.description || \"\";\n\n  // Normalize newlines\n  const cleaned = description.replace(/\\r?\\n/g, '\\n').trim();\n\n  // Split bookings by empty lines (double newline or similar)\n  const bookings = cleaned.split(/\\n\\s*\\n/);\n\n  return bookings.map(booking => {\n    const flat = booking.replace(/\\n/g, ' ').replace(/\\s{2,}/g, ' ');\n\n    const nameMatch = flat.match(/Name:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n    const emailMatch = flat.match(/Email:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n    const phoneMatch = flat.match(/Phone Number:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n    const reasonMatch = flat.match(/Reason:\\s*(.+?)(?=\\s+[A-Za-z]+:|$)/i);\n\n    return {\n      json: {\n        name: nameMatch ? nameMatch[1].trim() : \"\",\n        email: emailMatch ? emailMatch[1].trim() : \"\",\n        phone: phoneMatch ? phoneMatch[1].trim() : \"\",\n        reason: reasonMatch ? reasonMatch[1].trim() : \"\",\n        startTime: item.json.start?.dateTime || \"\",\n        endTime: item.json.end?.dateTime || \"\"\n      }\n    };\n  });\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "171d92a8-f4b7-4cd7-8ff2-fa60342983d2",
      "name": "Nota Adhesiva3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        320,
        -304
      ],
      "parameters": {
        "color": 4,
        "height": 416,
        "content": "This node stores your Retell setup:\n- from_number (your registered Retell number)\n- agent_id (your Retell agent ID)\n\n➡️ Update these values before using the workflow.\n➡️ They will be passed to the Retell API.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "da1d2978-d402-4524-ac5a-91834b44846b",
      "name": "Nota Adhesiva4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        -304
      ],
      "parameters": {
        "color": 6,
        "height": 416,
        "content": "This node sends the API request to Retell AI to make the phone call.\n\n-It uses your Retell API key stored in n8n credentials.\n-Do NOT hardcode your API key — always use credentials.\n-The call includes dynamic variables: name, phone, reason, start_time, end_time.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f3b6d02b-d978-43ae-b7da-21e439e33779",
      "name": "Nota Adhesiva5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        864,
        -400
      ],
      "parameters": {
        "color": 2,
        "width": 544,
        "height": 736,
        "content": "## Appointment Reminder Agent\n\n### Who's it for\nBusinesses, clinics, and service providers who want to automate **phone call reminders** for upcoming appointments.\n\n### How it works\nThis workflow:\n1. Runs daily at 9 AM (can be changed).\n2. Pulls upcoming events from Google Calendar.\n3. Extracts details (name, phone, reason, time).\n4. Calls the customer using Retell AI’s API.\n\n### How to set up\n1. Add your **Retell API key** in n8n credentials (do not hardcode).\n2. Add your **Google Calendar account** in credentials.\n3. Update the `from_number` (your Retell-registered number).\n4. Update the `agent_id` (your Retell agent ID).\n5. Ensure phone numbers are in **E.164 format** (e.g. `+14155552671`).\n\n### Requirements\n- Retell AI account + API key  \n- Registered Retell phone number  \n- Google Calendar account  \n\n### How to customize\n- Adjust trigger time.  \n- Add logging (Google Sheets / Airtable).  \n- Modify Retell agent script for different appointment types.  \n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "fe292d57-7b18-44cc-9ad6-e9474c2208a2",
  "connections": {
    "8d90ec35-90b6-495d-89e9-c816ff9279ca": {
      "main": [
        [
          {
            "node": "d890a065-3c77-4252-a0cb-a90e38d9a17c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "47ccb25c-e543-40d1-8155-18046a85d1d5": {
      "main": [
        [
          {
            "node": "8d90ec35-90b6-495d-89e9-c816ff9279ca",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "016deabc-cd94-41f8-8470-a4df03cb431c": {
      "main": [
        [
          {
            "node": "c0a5e52a-ced2-4bbc-b5f2-99b7989f8b7b",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d890a065-3c77-4252-a0cb-a90e38d9a17c": {
      "main": [
        [
          {
            "node": "016deabc-cd94-41f8-8470-a4df03cb431c",
            "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 - Chatbot de IA, 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 nodos11
Categoría2
Tipos de nodos6
Descripción de la dificultad

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

Enlaces externos
Ver en n8n.io

Compartir este flujo de trabajo

Categorías

Categorías: 34