Saltar al contenido principal
Esta página presenta herramientas y técnicas para probar integraciones de webhooks durante el desarrollo y para depurar incidencias en producción.

Desarrollo en local

Exposición de servidores locales

Como los webhooks deben acceder a tu servidor desde Internet, tendrás que exponer públicamente tu servidor de desarrollo local.

Uso de Cloudflare Tunnels

Cloudflare Tunnels ofrece una forma gratuita de exponer de forma segura tu servidor de desarrollo local a Internet, sin necesidad de registrar una cuenta ni abrir puertos en el firewall:
# Descarga cloudflared desde las versiones de GitHub o usa un gestor de paquetes

# Expón tu servidor local
cloudflared tunnel --url localhost:3000

# Ejemplo de salida:
# ¡Tu túnel rápido ha sido creado! Accede a él en (puede tardar un poco en estar disponible):
# https://abc123.trycloudflare.com
Utiliza la URL proporcionada en la configuración de tu webhook:
{
  "url": "https://abc123.trycloudflare.com/webhook"
}

Solución de problemas comunes

No llegan los webhooks

  1. Comprueba la accesibilidad de la URL – Asegúrate de que tu endpoint sea públicamente accesible
  2. Verifica HTTPS – Las URL de los webhooks deben usar HTTPS
  3. Revisa la configuración del firewall – Permite conexiones entrantes al puerto de tu webhook
  4. Revisa los filtros de eventos – Asegúrate de estar suscrito a los tipos de eventos correctos

Error en la verificación de la firma

  1. Comprueba la clave secreta – Asegúrate de que estás usando la clave correcta
  2. Verifica el uso del cuerpo en bruto – Asegúrate de que estás utilizando el cuerpo bruto de la solicitud:
// ❌ Incorrecto: usando el body parseado
const signature = crypto
  .createHmac('sha256', secret)
  .update(JSON.stringify(req.body))
  .digest('hex');

// ✅ Correcto: usando el body en crudo
app.use('/webhook', express.raw({ type: 'application/json' }));
app.post('/webhook', (req, res) => {
  const signature = crypto
    .createHmac('sha256', secret)
    .update(req.body) // Buffer en crudo
    .digest('hex');
});