Testar um webhook Twilio localmente
Validar um handler da Twilio (SMS ou chamada recebida) sem enviar mensagens pagas de verdade: é possível. Gere uma requisição Twilio assinada (X-Twilio-Signature, HMAC-SHA1) no formato form-urlencoded, edite os parâmetros (From, To, Body) e envie para o seu servidor local.
Verificar a assinatura no servidor
const twilio = require('twilio');
const valid = twilio.validateRequest(
process.env.TWILIO_AUTH_TOKEN,
req.headers['x-twilio-signature'],
fullUrl, // deve corresponder à URL de destino usada acima
req.body // parâmetros POST
);Para receber um webhook real da Twilio na sua máquina, aponte o número para o seu 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.
Perguntas frequentes
Como testar um SMS Twilio recebido localmente?
Escolha o evento 'Incoming SMS', informe o seu Auth Token e a URL exata do seu handler (a assinatura da Twilio depende da URL), e envie. O header X-Twilio-Signature é calculado em HMAC-SHA1 sobre a URL + parâmetros ordenados, como a Twilio faz.
Por que preciso fornecer a URL de destino?
A assinatura da Twilio inclui a URL completa do webhook no cálculo HMAC. Sem a URL certa, a assinatura não será válida no servidor. Por isso o campo URL de destino é obrigatório para a Twilio.
O formato é mesmo form-urlencoded?
Sim. Diferente de Stripe ou GitHub (JSON), a Twilio envia application/x-www-form-urlencoded. O gerador produz o Content-Type certo e codifica os parâmetros corretamente.
A Twilio está incluída no plano grátis?
A Twilio faz parte dos presets premium, disponíveis com o plano Pro por 14,90 €/mês.