Webhook Tester

Un probador de webhooks es una dirección pública temporal que registra cada solicitud HTTP que se le envía, para que veas exactamente qué entregó realmente un remitente de webhooks. Crea un hook abajo y obtendrás una URL única que vive 30 minutos: apunta Stripe, GitHub, un proveedor de pagos, un servicio de monitorización o tu propio código a ella, dispara el evento, y cada entrega llega aquí — método, ruta y consulta, cabeceras, cuerpo y dirección de origen — para que la inspecciones antes de conectar el manejador real.

Última actualización:

Qué almacena este servicio — y qué no hace nunca

Crear un hook almacena, en el servidor de comprobación de SysOSX, solo el id del hook, sus horas de creación y caducidad y la dirección que lo creó. Cada solicitud capturada guarda la hora de llegada, el método, la ruta con su cadena de consulta, las cabeceras tal como se enviaron, el cuerpo hasta 256 KB (lo que lo supere se trunca y se marca) y la dirección del remitente. Un hook guarda como máximo 50 solicitudes; las entregas posteriores se rechazan hasta que caduca. Todo se elimina 30 minutos después de crear el hook, o inmediatamente cuando pulsas el botón de eliminar. El receptor solo recibe: nunca obtiene, sigue ni repite nada — una solicitud capturada no provoca ninguna llamada saliente. Para la herramienta de depuración vecina, consulta el trazador de cadenas de estado HTTP, y para el flujo completo lee depurar webhooks sin la fontanería.

Por qué depurar webhooks es incómodo sin un receptor

Un webhook es el servidor de otro llamando al tuyo, según su horario, en respuesta a un evento que no controlas: un pago que se completa, un push que llega, una alerta que se dispara. Esa forma es lo que hace que los webhooks sean difíciles de depurar. El remitente no puede llegar a tu portátil, así que el desarrollo local necesita un túnel o una máquina pública de staging antes de ver una sola entrega real; el evento puede ser difícil de disparar dos veces, así que la única entrega que consigas más vale que se capture completa; y cuando algo falla, el panel del remitente suele mostrar solo el código de estado que devolvió tu endpoint, no lo que realmente envió. ¿Estaba la cabecera de firma? ¿Era el cuerpo la forma JSON que prometía la documentación, o venía codificado como formulario? ¿El reintento envió el mismo id de evento? Ninguna de esas preguntas puede responderse solo con los registros de tu manejador si este rechazó la solicitud antes de registrarla — que es exactamente lo que ocurre con los errores de firma y de análisis que dominan la depuración de webhooks.

Un receptor temporal elimina la fontanería de ese ciclo. En lugar de desplegar un manejador a medio escribir solo para ver qué llega, creas una dirección que lo acepta todo, lo registra fielmente y te lo muestra: las cabeceras en el orden y la capitalización en que llegaron, el cuerpo sin procesar antes de que ningún analizador haya podido rechazarlo, la cadena de consulta en la que los remitentes a veces esconden parámetros, y el método exacto — porque algunos proveedores entregan con POST, otros con PUT, y unos pocos comprueban el estado con GET. Con una entrega real capturada en pantalla puedes escribir tu manejador contra la verdad en lugar de contra la documentación, construir un fixture para tus pruebas a partir de la carga real y comparar un reintento fallido con el original lado a lado. Después eliminas el hook, apuntas el proveedor a tu endpoint real y disparas el evento una vez más para ver a tu propio manejador responderlo. Treinta minutos es deliberadamente corto: suficiente para una sesión de depuración, y corto para que una dirección de prueba olvidada y llena de cargas capturadas no se quede rondando por internet.

Preguntas frecuentes

¿Cuánto vive un hook y cuánto puede capturar?

Un hook vive 30 minutos desde que lo creas; después, el hook y todo lo que capturó se eliminan automáticamente. Guarda hasta 50 solicitudes; las entregas que superen esa cifra se rechazan con una respuesta 429 hasta que el hook caduca. Cada cuerpo se almacena hasta 256 KB: un cuerpo más largo se trunca y la captura se marca como truncada para que sepas que no lo estás viendo todo.

¿Quién puede ver lo que captura mi hook?

Cualquiera que tenga la URL del hook. El id de la URL es la única credencial: autoriza tanto enviar solicitudes como leer las capturas, sin cuenta ni contraseña encima. Eso es lo que hace que la herramienta sea instantánea de usar, y es por lo que debes tratar la URL como una contraseña: no la publiques y nunca apuntes tráfico de producción con secretos o datos personales a un visor compartido como este.

¿El receptor responde al remitente, sigue enlaces o repite solicitudes?

No. El receptor contesta a cada entrega aceptada con una pequeña confirmación JSON 200 de que llegó, y no hace nada más con ella: nunca obtiene URL que aparezcan en una carga, nunca sigue redirecciones y no ofrece repetición ni reenvío. Recibir e inspeccionar es todo el servicio, lo que evita que una carga capturada se convierta en tráfico saliente.

¿Qué remitentes puedo probar con esto?

Todo lo que pueda enviar una solicitud HTTP a una URL pública: Stripe, GitHub, Shopify, proveedores de pagos y formularios, servicios de monitorización y CI, un dispositivo IoT, o tu propio código con curl. Crea el hook, pega la URL en los ajustes de webhook del proveedor (o en tu script), dispara el evento y observa cómo la entrega llega aquí en segundos. Recuerda quitar la URL de prueba del proveedor después, o apuntarla a tu manejador real.