Skip to main content
Recibes callbacks POST de cualquier servicio externo (pasarelas de pago, GitHub, CRMs, etc.), validas el payload y procesas el evento. Patrón: ruta personalizada + solo POST + MCP desactivado + validación de payload.
index.ts

Prueba local

Por qué funciona así

  • config.methods: ["POST"] — rechaza GET, PUT, etc. Los webhooks siempre son POST.
  • config.mcp: false — no tiene sentido exponer un webhook como herramienta de IA.
  • config.path — ruta fija que configuras en el servicio externo.
  • El esquema input valida la estructura del payload antes de que llegue al handler.

Validar firma del webhook

Una función pública puede ser llamada por cualquiera que conozca la URL. En producción, verifica la firma del servicio antes de procesar el evento — ctx.verify* lo hace en una línea:
Si la firma no coincide, lanza un error y el evento no llega a tu lógica. Para Stripe, Shopify y Meta usa el verificador de cada proveedor, que ya conoce su cabecera y su secret:
Configura el secret antes de desplegar: jelou functions secrets set mi-webhook WEBHOOK_SECRET=whsec_...

Guía de webhooks

Proveedores soportados, rotación de secrets, códigos de error y testing.