Probar un webhook de Twilio en local
Validar un handler de Twilio (SMS o llamada entrante) sin enviar mensajes reales de pago: es posible. Genera una petición de Twilio firmada (X-Twilio-Signature, HMAC-SHA1) en formato form-urlencoded, edita los parámetros (From, To, Body) y envíala a tu servidor local.
Verificar la firma en el servidor
const twilio = require('twilio');
const valid = twilio.validateRequest(
process.env.TWILIO_AUTH_TOKEN,
req.headers['x-twilio-signature'],
fullUrl, // debe coincidir con la URL de destino usada arriba
req.body // parámetros POST
);Para recibir un webhook real de Twilio en tu máquina, apunta el número a tu túnel Relay.
Signature coming back invalid? This page signs. The Twilio signature validator does the opposite: paste the signature Twilio actually sent and it tells you which URL variant matches — which is to say, which line of your code is lying.
Preguntas frecuentes
¿Cómo probar un SMS entrante de Twilio en local?
Elige el evento 'Incoming SMS', rellena tu Auth Token y la URL exacta de tu handler (la firma de Twilio depende de la URL) y envía. El header X-Twilio-Signature se calcula en HMAC-SHA1 sobre la URL + los parámetros ordenados, igual que lo hace Twilio.
¿Por qué tengo que proporcionar la URL de destino?
La firma de Twilio incluye la URL completa del webhook en el cálculo HMAC. Sin la URL correcta, la firma no será válida en el servidor. Por eso el campo URL de destino es obligatorio para Twilio.
¿El formato es realmente form-urlencoded?
Sí. A diferencia de Stripe o GitHub (JSON), Twilio envía application/x-www-form-urlencoded. El generador produce el Content-Type correcto y codifica los parámetros adecuadamente.
¿Twilio está incluido en el plan gratuito?
Twilio forma parte de los presets premium, disponibles con el plan Pro a 14,90 €/mes.