Webhooks SMS: Recibe Notificaciones en Tiempo Real
Aprende a configurar webhooks para recibir notificaciones instantáneas sobre estados de entrega y respuestas.
Los webhooks SMS te permiten recibir notificaciones instantáneas cuando ocurren eventos específicos: entrega de mensajes, fallos, respuestas de usuarios y más. Es esencial para automatizar procesos y mejorar la experiencia del cliente.
¿Qué son los Webhooks SMS?
Los webhooks son notificaciones automáticas que se envían a tu servidor cuando ocurre un evento específico. En lugar de consultar constantemente el estado de tus mensajes (polling), los webhooks te notifican al instante.
Con webhooks puedes construir flujos automatizados: confirmar entrega, detectar respuestas, manejar errores y más.
Eventos Disponibles
Puedes suscribirte a los siguientes eventos:
message_sent
El mensaje fue enviado exitosamente desde nuestros servidores.
message_delivered
El mensaje fue entregado al teléfono del destinatario.
message_failed
El mensaje no pudo ser entregado. Incluye código de error.
message_received
El usuario respondió al mensaje recibido (SMS bidireccional).
Cómo Configurar Webhooks
Sigue estos pasos para configurar tu webhook:
- 1
1. Crea tu Endpoint
Crea una URL pública en tu servidor que pueda recibir requests POST. Debe responder con código 200 OK.
- 2
2. Registra tu Webhook
Desde el panel de LETEL, registra la URL de tu webhook y selecciona los eventos a los que quieres suscribirte.
- 3
3. Verifica la Firma
Cada request incluye una firma HMAC-SHA256. Verifica esta firma para asegurar que proviene de LETEL.
- 4
4. Procesa los Eventos
Tu servidor debe procesar el payload JSON y retornar código 200 dentro de 30 segundos.
Estructura del Payload
Ejemplo de payload recibido:
{
"event": "message_delivered",
"messageId": "sms_1234567890",
"phone": "+56912345678",
"status": "delivered",
"timestamp": "2026-03-01T10:05:00Z",
"operator": "entel"
} Casos de Uso
Confirmación de Entrega
Actualiza el estado de tus pedidos o transacciones cuando el SMS se entrega.
Respuestas de Clientes
Recibe y procesa las respuestas de tus clientes para crear conversaciones bidireccionales.
Manejo de Errores
Detecta fallos y reintenta el envío o notifica a tu equipo de soporte.
Analítica en Tiempo Real
Construye dashboards con métricas de entrega, tiempos de respuesta y más.
Seguridad
Siempre verifica la firma del webhook para asegurar que las solicitudes provienen de LETEL. No proceses requests sin firma válida.
Importante
Tu endpoint debe responder en menos de 30 segundos. Implementa una cola asíncrona para procesamiento pesado.
Implementación de Servidor Webhook con Express
Aquí mostramos cómo crear un servidor Express completo que recibe webhooks de SMS y los procesa correctamente:
const express = require('express');
const crypto = require('crypto');
require('dotenv').config();
const app = express();
app.use(express.json());
// Logger para debugging
function logWebhook(event, data) {
const timestamp = new Date().toISOString();
console.log(`[${timestamp}] WEBHOOK_${event}:`, JSON.stringify(data, null, 2));
}
// Verificar firma del webhook (seguridad)
function verifyWebhookSignature(payload, signature) {
const secret = process.env.LETEL_WEBHOOK_SECRET;
const hash = crypto
.createHmac('sha256', secret)
.update(JSON.stringify(payload))
.digest('hex');
return hash === signature;
}
// Endpoint para recibir webhooks
app.post('/webhooks/sms', (req, res) => {
try {
const signature = req.headers['x-letel-signature'];
const payload = req.body;
// Verificar autenticidad del webhook
if (!verifyWebhookSignature(payload, signature)) {
logWebhook('SIGNATURE_FAILED', { signature, messageId: payload.messageId });
return res.status(401).json({ error: 'Signature inválido' });
}
logWebhook('RECEIVED', payload);
// Procesar diferentes eventos
switch (payload.event) {
case 'message_delivered':
handleMessageDelivered(payload);
break;
case 'message_failed':
handleMessageFailed(payload);
break;
case 'message_bounced':
handleMessageBounced(payload);
break;
case 'sms_received':
handleSmsReceived(payload);
break;
default:
console.warn('Evento desconocido:', payload.event);
}
// Responder rápidamente al webhook
res.json({ received: true });
} catch (error) {
logWebhook('ERROR', { error: error.message });
res.status(500).json({ error: 'Error procesando webhook' });
}
});
// Handlers para cada tipo de evento
function handleMessageDelivered(payload) {
// Actualizar estado en base de datos
console.log(`✓ SMS ${payload.messageId} entregado a ${payload.phone}`);
// db.update('messages', { messageId: payload.messageId }, { status: 'delivered' });
}
function handleMessageFailed(payload) {
console.error(`✗ SMS ${payload.messageId} falló: ${payload.error}`);
// Reintentar o notificar al usuario
}
function handleMessageBounced(payload) {
console.warn(`⚠ SMS ${payload.messageId} rechazado: ${payload.reason}`);
// Marcar número como inválido
}
function handleSmsReceived(payload) {
console.log(`← SMS recibido de ${payload.phone}: ${payload.message}`);
// Procesar respuesta del usuario
}
app.listen(3000, () => {
console.log('Webhook server escuchando en puerto 3000');
}); Debugging y Monitoreo de Webhooks
Durante el desarrollo, necesitas ver exactamente qué webhooks recibes. Aquí te mostramos herramientas y técnicas para debugging:
// 1. Logger detallado para debugging
class WebhookLogger {
static logReceived(payload) {
console.log('\n=== WEBHOOK RECIBIDO ===');
console.log('Evento:', payload.event);
console.log('Teléfono:', payload.phone);
console.log('Message ID:', payload.messageId);
console.log('Status:', payload.status);
console.log('Timestamp:', payload.timestamp);
if (payload.message) console.log('Mensaje:', payload.message);
console.log('===========================\n');
}
static logProcessed(event, result) {
console.log(`[${new Date().toISOString()}] Processed ${event}: ${JSON.stringify(result)}`);
}
}
// 2. Testing con webhooks simulados
async function testWebhook() {
const testPayload = {
event: 'message_delivered',
messageId: 'test-1234567890',
phone: '+56912345678',
status: 'delivered',
timestamp: new Date().toISOString(),
operator: 'entel'
};
console.log('Enviando webhook de prueba...');
try {
const response = await fetch('http://localhost:3000/webhooks/sms', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'x-letel-signature': 'test-signature'
},
body: JSON.stringify(testPayload)
});
console.log('Respuesta:', await response.json());
} catch (error) {
console.error('Error en test:', error.message);
}
}
// 3. Usar curl para testing (desde terminal)
// curl -X POST http://localhost:3000/webhooks/sms \
// -H "Content-Type: application/json" \
// -H "x-letel-signature: test-sig" \
// -d '{
// "event": "message_delivered",
// "messageId": "msg-123",
// "phone": "+56912345678",
// "status": "delivered"
// }'
// 4. Servicio de monitoreo en tiempo real
class WebhookMonitor {
constructor() {
this.events = [];
this.stats = {
delivered: 0,
failed: 0,
bounced: 0,
received: 0
};
}
track(payload) {
this.events.push({
...payload,
receivedAt: new Date()
});
if (payload.event === 'message_delivered') this.stats.delivered++;
else if (payload.event === 'message_failed') this.stats.failed++;
else if (payload.event === 'message_bounced') this.stats.bounced++;
else if (payload.event === 'sms_received') this.stats.received++;
}
getStats() {
return {
totalEvents: this.events.length,
stats: this.stats,
lastEvents: this.events.slice(-5)
};
}
}
// Usar en la app
const monitor = new WebhookMonitor();
app.get('/debug/stats', (req, res) => {
res.json(monitor.getStats());
}); Recibe notificaciones webhook en tiempo real con LETEL
Integra los webhooks de LETEL en tu sistema para obtener actualizaciones instantáneas sobre el estado de tus SMS. Eventos verificados con firma HMAC-SHA256 para máxima seguridad.
- ✓ Notificaciones en tiempo real (entregado, fallido, rechazado)
- ✓ Verificación de seguridad con HMAC-SHA256
- ✓ Reintentos automáticos de webhooks fallidos
- ✓ Dashboard para monitorear eventos en vivo
Conclusión
Los webhooks son esenciales para construir integraciones robustas con SMS. Te permiten recibir información en tiempo real y automatizar respuestas basadas en eventos.
Preguntas Frecuentes sobre Webhooks SMS
¿Qué es un webhook de SMS?
¿Necesito un servidor propio para webhooks?
¿Los webhooks tienen costo adicional?
¿Qué pasa si mi servidor no responde?
¿Puedo tener múltiples webhooks?
LETEL
Expertos en telecomunicaciones y automatización empresarial
🚀 Próximas Acciones
Para complementar tu implementación de webhooks:
- → Referencia completa de la API SMS - Todos los endpoints disponibles
- → Implementar en Node.js - Ejemplo de integración con Express
- → Planes y soporte técnico - Contacta a nuestro equipo
Artículos Relacionados
SMS Masivo Chile: Guía Completa 2026
Guía completa de SMS Masivo en Chile 2026. Precios desde $5 CLP por SMS, beneficios, mejores prácticas y cómo implementar campañas con 98% de apertura.
API SMS: Guía Completa para Enviar Mensajes desde tu Sistema
Aprende a integrar la API de SMS en tu software. Endpoint, autenticación, ejemplos de código y mejores prácticas para enviar SMS desde tu sistema.
Enviar SMS desde Node.js: Tutorial Práctico con API REST
Aprende a enviar SMS desde Node.js con este tutorial práctico. Incluye código ejemplo, manejo de errores, validación y mejores prácticas para integración segura.
¿Necesitas ayuda con webhooks?
Nuestro equipo puede ayudarte a configurar webhooks para tu caso de uso.