Saltar al contenido
Todo Automatizado
Automatización

n8n + Twilio: Automatizar SMS y Llamadas

Conecta n8n con Twilio para automatizar SMS, llamadas y verificaciones. Tutorial con workflows reales y ejemplos de código.

TodoAutomatizado 14 min de lectura

Un cliente reclama un pedido que lleva tres días de retraso. El email de notificación se envió, pero nadie lo leyó. El ticket se abrió en el CRM, pero el comercial estaba de viaje. Al final, la queja escala al director porque nadie se enteró a tiempo. ¿Te suena? Los SMS tienen una tasa de apertura del 98%, y el 90% se leen en los primeros 3 minutos. No hay canal más directo.

Twilio es la plataforma de comunicaciones programáticas más usada del mundo. n8n es tu motor de automatización. Juntos, puedes montar desde alertas de producción por SMS hasta sistemas de verificación por llamada, sin escribir una aplicación desde cero.

Vamos a construir tres workflows reales que puedes tener funcionando hoy mismo.

Qué es Twilio y por qué encaja con n8n

Twilio es una API de comunicaciones. Le das un número de teléfono, le dices qué hacer (enviar un SMS, hacer una llamada, verificar un número) y se encarga del resto. No es una app de mensajería: es infraestructura de telecomunicaciones accesible por HTTP.

Lo que lo hace interesante para automatización:

  • SMS y MMS a más de 180 países.
  • Llamadas de voz programáticas, con texto-a-voz o grabaciones.
  • Twilio Verify para códigos OTP y verificación en dos pasos.
  • Webhooks bidireccionales: puedes recibir respuestas y reaccionar en tiempo real.
  • Precios por uso: no pagas cuota fija, solo por lo que envías.

n8n tiene un nodo nativo de Twilio que cubre SMS y llamadas. Para funciones avanzadas (Verify, Lookup, colas de llamadas), usaremos el nodo HTTP Request contra la API REST de Twilio. Ambas opciones funcionan perfectamente.

Configurar Twilio desde cero

Crear la cuenta y obtener credenciales

Entra en twilio.com y crea una cuenta. Twilio te da crédito gratuito para pruebas (normalmente 15 USD), suficiente para enviar cientos de SMS de prueba.

Una vez dentro, necesitas tres datos:

  1. Account SID: el identificador de tu cuenta. Está en el dashboard principal.
  2. Auth Token: la contraseña de tu API. Junto al SID en el dashboard.
  3. Número de teléfono Twilio: lo compras desde la sección “Phone Numbers”. Para pruebas, el número que te asigna Twilio gratis funciona, pero solo puede enviar a números verificados.

Apunta estos tres valores. Los necesitarás para configurar las credenciales en n8n.

Comprar un número para producción

El número gratuito de prueba tiene limitaciones: solo envía a números que hayas verificado manualmente. Para producción, necesitas un número de pago.

Ve a Phone Numbers → Buy a Number y filtra por país y capacidades (SMS, Voice, MMS). Un número de EE.UU. cuesta 1,15 USD/mes. Números españoles (+34) cuestan más (desde 6 USD/mes) y requieren documentación de identidad por regulación local.

Mi recomendación: para pruebas y proyectos internos, un número de EE.UU. es más barato y no necesita documentación. Para comunicación con clientes en España, necesitarás un número local.

Configurar credenciales en n8n

En n8n, ve a Credentials → Add Credential → Twilio API. Rellena:

  • Account SID: el que copiaste del dashboard.
  • Auth Token: el token de autenticación.

Guarda y n8n verificará la conexión automáticamente. Si falla, revisa que no hayas copiado espacios en blanco extra.

Workflow 1: Alertas SMS automáticas

El caso de uso más directo: algo pasa en tu sistema y necesitas que alguien se entere inmediatamente. Un pedido urgente, una alarma de planta, un servidor caído, un pago recibido.

Estructura del workflow

[Trigger] → [Procesar datos] → [Twilio: Send SMS]

El trigger puede ser cualquier cosa: un webhook, un evento de base de datos, un schedule, un nodo de email que detecta un asunto específico. Lo que importa es la parte de Twilio.

Configurar el nodo Twilio

Añade un nodo Twilio y configura:

  • Resource: SMS
  • Operation: Send
  • From: tu número Twilio (formato internacional, ejemplo: +14155551234)
  • To: el número de destino (formato internacional: +34612345678)
  • Message: el texto del SMS

Para mensajes dinámicos, usa expresiones de n8n:

⚠️ Alerta: {{ $json.tipo_alerta }}
Máquina: {{ $json.maquina }}
Valor: {{ $json.valor }} {{ $json.unidad }}
Hora: {{ $now.format('HH:mm') }}

Ejemplo real: alerta de temperatura en planta

Imagina que tienes sensores que envían datos a una base de datos. Un workflow en n8n consulta la base cada 5 minutos y, si algún valor supera el umbral, envía un SMS al responsable de turno.

[Schedule Trigger: 5 min] → [PostgreSQL: consulta sensores]
→ [IF: temperatura > 85°C] → [Twilio SMS al jefe de turno]

El nodo IF es clave. Sin él, bombardearías a la gente con SMS cada 5 minutos aunque todo esté bien. Nadie quiere eso.

Para evitar spam de alertas repetidas, añade un nodo que compruebe si ya se envió una alerta en la última hora. Un approach simple: guarda el timestamp del último envío en una variable estática de n8n o en una tabla de base de datos.

// En un nodo Code, comprobar cooldown
const lastAlert = $getWorkflowStaticData('global').lastAlertTime || 0;
const now = Date.now();
const cooldown = 60 * 60 * 1000; // 1 hora

if (now - lastAlert < cooldown) {
  return []; // No enviar, aún en cooldown
}

$getWorkflowStaticData('global').lastAlertTime = now;
return $input.all();

Si tu planta ya tiene datos fluyendo hacia una base de datos, puedes conectar directamente este workflow. Echa un vistazo a cómo conectar un PLC a una base de datos SQL para la parte de adquisición de datos.

Gestionar múltiples destinatarios

¿Necesitas avisar a varias personas? No hagas un nodo Twilio por cada una. Usa un nodo Split In Batches o simplemente un array de números:

// En un nodo Code antes de Twilio
const destinatarios = [
  { nombre: 'Jefe de turno', telefono: '+34612345678' },
  { nombre: 'Mantenimiento', telefono: '+34687654321' },
  { nombre: 'Dirección', telefono: '+34698765432' }
];

return destinatarios.map(d => ({
  json: {
    ...d,
    mensaje: `⚠️ ${$json.tipo_alerta}: ${$json.maquina} - ${$json.valor}°C`
  }
}));

Cada elemento del array genera una ejecución del nodo Twilio posterior. Limpio y escalable.

Workflow 2: Verificación por SMS (OTP)

Registros de usuarios, confirmación de pedidos, autenticación de dos factores. El código por SMS es omnipresente. Twilio Verify es un servicio dedicado a esto que gestiona la generación del código, el envío y la verificación por ti.

Por qué usar Twilio Verify y no enviar un SMS manual

Podrías generar un código aleatorio, guardarlo en base de datos y enviarlo por SMS normal. Pero Verify te da:

  • Generación y expiración automática del código (10 minutos por defecto).
  • Protección anti-fraude integrada.
  • Fallback automático a llamada de voz si el SMS no llega.
  • Canal de WhatsApp como alternativa.
  • Dashboard de métricas de entrega y verificación.

Cuesta 0,05 USD por verificación exitosa. Las fallidas no se cobran.

Crear un servicio Verify en Twilio

Ve a Verify → Services en el dashboard de Twilio y crea un nuevo servicio. Dale un nombre (aparecerá en el SMS: “Tu código de [nombre] es: 123456”). Apunta el Service SID (empieza por VA).

Enviar el código OTP desde n8n

Twilio Verify no tiene nodo nativo en n8n, así que usamos HTTP Request:

[Webhook: usuario pide verificación]
→ [HTTP Request: Twilio Verify - enviar código]
→ [Respond to Webhook: "Código enviado"]

Configuración del nodo HTTP Request para enviar el código:

  • Method: POST
  • URL: https://verify.twilio.com/v2/Services/VAXXXXXXXXX/Verifications
  • Authentication: Basic Auth (usuario: Account SID, contraseña: Auth Token)
  • Body Content Type: Form-Urlencoded
  • Body Parameters:
    • To: +34612345678 (el número a verificar)
    • Channel: sms

La respuesta incluye un status: "pending" si el SMS se envió correctamente.

Verificar el código que introduce el usuario

Cuando el usuario introduce el código, haces otra petición:

[Webhook: usuario envía código]
→ [HTTP Request: Twilio Verify - comprobar código]
→ [IF: status == "approved"] → [Activar cuenta / confirmar pedido]
                               → [Responder "Código incorrecto"]

Configuración del nodo HTTP Request para verificar:

  • Method: POST
  • URL: https://verify.twilio.com/v2/Services/VAXXXXXXXXX/VerificationCheck
  • Authentication: Basic Auth
  • Body Parameters:
    • To: +34612345678
    • Code: {{ $json.codigo }} (el que introdujo el usuario)

Si la respuesta tiene status: "approved", el código es correcto. Cualquier otro valor significa fallo.

Workflow completo de registro con verificación

Combina ambos pasos en un flujo de registro:

// Paso 1: Recibir datos de registro via webhook
// POST /registro { email, telefono, nombre }

// Paso 2: Guardar usuario en BD con status "pendiente"
// INSERT INTO usuarios (email, telefono, nombre, status)
// VALUES ($email, $telefono, $nombre, 'pendiente')

// Paso 3: Enviar código OTP via Twilio Verify

// Paso 4: Segundo webhook recibe el código
// POST /verificar { telefono, codigo }

// Paso 5: Verificar con Twilio
// Si approved → UPDATE usuarios SET status = 'activo'
// Si no → Responder error

Esto es lo que hacen la mayoría de plataformas cuando te registras. Ahora puedes montarlo tú sin depender de servicios de terceros para la lógica.

Workflow 3: Llamadas automáticas con texto a voz

Los SMS son geniales, pero hay situaciones donde una llamada tiene más impacto. Alertas críticas que requieren acuse de recibo, recordatorios de citas donde quieres confirmación por teclado, o escalaciones cuando nadie respondió al SMS.

Cómo funciona la API de voz de Twilio

Twilio hace la llamada y ejecuta instrucciones escritas en TwiML (Twilio Markup Language), un XML sencillo que define qué pasa durante la llamada: reproducir audio, hablar con text-to-speech, grabar, redirigir, recoger pulsaciones de teclado.

Puedes pasar el TwiML directamente en la petición API o apuntar a una URL que lo sirva. Para n8n, la opción más limpia es usar un webhook que sirva el TwiML y un nodo HTTP Request que inicie la llamada.

Llamada simple con mensaje de voz

El nodo Twilio de n8n soporta llamadas directamente:

  • Resource: Call
  • Operation: Make
  • From: tu número Twilio
  • To: número de destino
  • TwiML: el XML con las instrucciones
<Response>
  <Say language="es-ES" voice="Polly.Lucia">
    Atención. Se ha detectado una alarma crítica en la línea 3.
    Presión del sistema a 12 bar, por encima del umbral de seguridad.
    Contacte con mantenimiento inmediatamente.
  </Say>
  <Pause length="2"/>
  <Say language="es-ES" voice="Polly.Lucia">
    Repito. Alarma crítica en línea 3. Presión a 12 bar.
  </Say>
</Response>

Polly.Lucia es una voz neural de Amazon Polly en español de España. Suena bastante natural. Otras opciones: Polly.Conchita (más formal) o Polly.Enrique (voz masculina).

Llamada con confirmación por teclado (DTMF)

Esto es más potente: llamas, reproduces un mensaje y pides al usuario que pulse una tecla para confirmar que ha recibido la alerta. Si no confirma, escalas a la siguiente persona.

Para esto necesitas un webhook en n8n que sirva TwiML dinámicamente:

Webhook 1: Iniciar la llamada

// Nodo Code que genera la petición a Twilio
const accountSid = 'ACXXXXXXXXX';
const authToken = 'tu_auth_token';
const from = '+14155551234';
const to = '+34612345678';

// URL de tu webhook n8n que servirá el TwiML
const twimlUrl = 'https://tu-n8n.com/webhook/twilio-twiml';

const response = await fetch(
  `https://api.twilio.com/2010-04-01/Accounts/${accountSid}/Calls.json`,
  {
    method: 'POST',
    headers: {
      'Authorization': 'Basic ' + btoa(`${accountSid}:${authToken}`),
      'Content-Type': 'application/x-www-form-urlencoded'
    },
    body: new URLSearchParams({ To: to, From: from, Url: twimlUrl })
  }
);

return [{ json: await response.json() }];

Webhook 2: Servir el TwiML

Un segundo webhook en n8n (/webhook/twilio-twiml) responde con:

<Response>
  <Gather numDigits="1" action="https://tu-n8n.com/webhook/twilio-respuesta" method="POST">
    <Say language="es-ES" voice="Polly.Lucia">
      Alerta de planta. Se requiere su confirmación.
      Pulse 1 para confirmar recepción. Pulse 2 para escalar a mantenimiento.
    </Say>
  </Gather>
  <Say language="es-ES" voice="Polly.Lucia">
    No se recibió respuesta. Escalando automáticamente.
  </Say>
  <Redirect>https://tu-n8n.com/webhook/twilio-escalar</Redirect>
</Response>

Webhook 3: Procesar la respuesta

Twilio envía la pulsación del teclado al webhook de respuesta:

// Nodo Code que procesa la pulsación
const digito = $json.body.Digits;

if (digito === '1') {
  // Confirmado - registrar en base de datos
  return [{
    json: {
      twiml: '<Response><Say language="es-ES" voice="Polly.Lucia">Recibido. Gracias.</Say></Response>',
      accion: 'confirmado'
    }
  }];
} else if (digito === '2') {
  // Escalar - llamar a mantenimiento
  return [{
    json: {
      twiml: '<Response><Say language="es-ES" voice="Polly.Lucia">Escalando a mantenimiento. Espere.</Say><Dial>+34687654321</Dial></Response>',
      accion: 'escalado'
    }
  }];
}

Esto no es trivial de montar, pero el resultado es un sistema de alertas de nivel industrial. Lo he visto funcionar en plantas reales donde un SMS no basta porque la gente no mira el móvil durante el turno, pero una llamada sí la cogen.

Recibir SMS entrantes en n8n

La comunicación bidireccional es lo que convierte un sistema de notificaciones en un sistema de gestión. Twilio puede redirigir los SMS entrantes a un webhook de n8n, lo que te permite:

  • Procesar respuestas automáticamente (“CONFIRMAR”, “CANCELAR”, “SÍ”).
  • Crear un sistema de comandos por SMS.
  • Registrar todas las comunicaciones en una base de datos.

Configurar el webhook de recepción

  1. En n8n, crea un workflow con un nodo Webhook como trigger. Copia la URL de producción.
  2. En Twilio, ve a Phone Numbers → tu número → Messaging → A message comes in.
  3. Pega la URL del webhook de n8n y selecciona HTTP POST.

Cada SMS entrante llega a n8n con estos datos:

{
  "From": "+34612345678",
  "To": "+14155551234",
  "Body": "CONFIRMAR PEDIDO 4521",
  "NumMedia": "0",
  "MessageSid": "SMXXXXXXXXXXXXXXX"
}

Ejemplo: sistema de confirmación de pedidos

[Webhook: SMS entrante]
→ [Code: parsear comando]
→ [Switch: según comando]
   ├─ "CONFIRMAR" → [BD: actualizar pedido] → [Twilio: SMS "Pedido confirmado"]
   ├─ "CANCELAR" → [BD: cancelar pedido] → [Twilio: SMS "Pedido cancelado"]
   └─ default → [Twilio: SMS "Comando no reconocido. Envía CONFIRMAR o CANCELAR"]
// Nodo Code para parsear el comando
const body = $json.body.Body.trim().toUpperCase();
const parts = body.split(' ');

return [{
  json: {
    comando: parts[0],
    parametro: parts.slice(1).join(' '),
    remitente: $json.body.From,
    raw: body
  }
}];

Si ya tienes automatizaciones con WhatsApp y n8n, puedes combinar ambos canales: WhatsApp como canal principal y SMS como fallback para números que no tienen WhatsApp.

Buenas prácticas y errores comunes

Rate limiting

Twilio tiene límites de envío por segundo. Para cuentas nuevas, el límite es de 1 mensaje por segundo. Si necesitas enviar ráfagas, usa el nodo Split In Batches con un Wait de 1 segundo entre lotes, o activa “Message Queuing” en Twilio (se encarga él del throttling).

Gestión de errores

Los SMS pueden fallar: número inválido, destino no alcanzable, fondos insuficientes. Siempre añade un nodo de error handling después del nodo Twilio:

// En el error output del nodo Twilio
const error = $json.error;

// Registrar el fallo
// Intentar canal alternativo (email, Telegram...)
// Notificar al administrador si es un error de fondos

return [{
  json: {
    tipo: 'sms_fallido',
    destino: $json.to,
    error: error.message,
    timestamp: new Date().toISOString()
  }
}];

Enviar SMS comerciales en España requiere consentimiento explícito del destinatario. Los SMS transaccionales (alertas, confirmaciones, OTP) tienen base legal diferente, pero igualmente debes informar al usuario.

Lo mínimo:

  • Registro del consentimiento con fecha y canal.
  • Opción de baja en cada SMS comercial (“Responde BAJA para darte de baja”).
  • Proceso real de baja que funcione (no solo ponerlo, sino procesarlo).

Costes que se te pueden escapar

  • Los SMS que fallan en entrega igualmente se cobran.
  • Los mensajes largos (más de 160 caracteres, o 70 con caracteres especiales) se envían como múltiples segmentos, cada uno con su coste.
  • Los emojis y caracteres especiales (ñ, acentos) cambian la codificación de GSM-7 a UCS-2, reduciendo el límite a 70 caracteres por segmento.

Consejo: si tu mensaje tiene acentos o ñ (inevitable en español), calcula que cada 70 caracteres es un segmento. Un SMS de 150 caracteres con ñ son 3 segmentos = 3× el coste.

Integrar con otros canales

La gracia de tener esto en n8n es que puedes combinar canales. Un patrón que funciona bien:

  1. Alerta baja prioridad → email.
  2. Alerta media → SMS via Twilio.
  3. Alerta alta → SMS + llamada automática.
  4. Alerta crítica → Llamada con confirmación. Si no confirma en 5 min, llama al siguiente.

Si ya tienes un bot de Telegram con n8n, puedes añadir Telegram como primer nivel (gratuito) y reservar SMS y llamadas para lo importante.

Todo esto se orquesta desde un único workflow en n8n con nodos Switch/IF que evalúan la severidad. No necesitas aplicaciones separadas ni plataformas de orquestación costosas.

Monitorización y logs

No lances SMS a producción sin monitorización. Twilio tiene un dashboard de logs excelente, pero también puedes traer esos datos a n8n:

[Schedule: cada hora] → [HTTP Request: Twilio Messages API]
→ [Filter: status = "failed" o "undelivered"]
→ [Slack/Email: notificar fallos]

La API de mensajes de Twilio te permite consultar el historial:

GET https://api.twilio.com/2010-04-01/Accounts/{SID}/Messages.json?DateSent>=2026-08-25&Status=failed

Esto te da visibilidad completa: cuántos SMS se enviaron, cuántos fallaron y por qué.

Lo esencial

Twilio + n8n te da un sistema de comunicaciones programáticas sin tener que mantener infraestructura de telecomunicaciones. Los tres patrones que hemos visto — alertas SMS, verificación OTP y llamadas con confirmación — cubren el 90% de los casos de uso reales.

Si estás empezando con n8n, el tutorial en español te pone en marcha en 15 minutos. Si ya lo dominas y quieres combinarlo con WhatsApp, la guía de WhatsApp Business con n8n es el complemento natural.

Lo importante: empieza con un caso de uso concreto. No montes toda la plataforma de comunicaciones de golpe. Un workflow de alertas SMS para tu sistema de monitorización. Cuando funcione y veas el valor, amplía. Así es como se construyen sistemas que duran.

#n8n #twilio #sms #automatización #llamadas #verificación

Sigue leyendo