Webhooks
Actualizado
En esta página
Un webhook envía cada respuesta completa de la encuesta a la URL que indiques, como una solicitud HTTP con cuerpo JSON. Úsalo para pasar las respuestas a tu CRM, a tu backend o a un servicio de automatización.
Antes de empezar
Necesitas un servidor o un servicio que acepte solicitudes HTTP en una dirección pública. Para probar los webhooks sin tu propio servidor, usa un endpoint de prueba de un servicio como webhook.site.
Crear un webhook
- Abre la encuesta y ve a la pestaña Integraciones.
- Haz clic en Webhook en la lista.
- Haz clic en Crear webhook. Si la encuesta ya tiene webhooks, haz clic en Crear nuevo webhook.
- Completa los campos:
Campo Qué ingresar Nombre del webhook Cualquier nombre para distinguir los webhooks, por ejemplo "CRM" URL de callback (1) La dirección que recibe las respuestas. Debe ser una dirección pública: no se permiten direcciones internas ni locales Formato de datos Siempre JSON Tipo de solicitud (2) POST, PUT, PATCH o GET. La mayoría de los servicios esperan POST - En Encabezado (3), agrega los encabezados que necesita tu servidor, por ejemplo un token de autorización: escribe el Nombre del encabezado y el Valor. Para agregar otro encabezado, haz clic en Añadir fila.
- En Elementos (4), elige las preguntas que se envían. De forma predeterminada están seleccionadas y resaltadas todas las preguntas y variables ocultas. Haz clic en una pregunta para excluirla de la solicitud y vuelve a hacer clic para agregarla de nuevo. Las variables ocultas funcionan igual en Variables ocultas.
- En Nombres de parámetros, puedes dar nombres cortos a las preguntas seleccionadas. El nombre se envía en el campo name de la pregunta.
- Haz clic en Guardar.

El webhook nuevo aparece desactivado en la Lista de webhooks. Activa el interruptor que está a su lado para empezar a enviar respuestas.
Contenido muestra los ID de los elementos seleccionados. En el cuerpo de la solicitud, las preguntas usan estos ID como claves, y las variables ocultas van en extra_params.
Una encuesta puede tener varios webhooks. La Lista de webhooks los muestra todos, y el menú de cada uno tiene Editar, Registros y Eliminar.
Enviar respuestas incompletas
De forma predeterminada, el webhook solo recibe respuestas completas. Para recibir también las que los encuestados empezaron y no terminaron, activa Enviar respuestas inconclusas y elige un intervalo en Enviar cada: 1, 6, 12 o 24 horas. Una respuesta incompleta que ya se entregó no se vuelve a enviar.
El cuerpo de la solicitud no indica si la respuesta está completa. Si el encuestado termina la encuesta más tarde, el webhook vuelve a recibir la respuesta, esta vez como completa.
Formato de la solicitud
SurveyNinja envía la solicitud con el encabezado Content-Type: application/json y los encabezados que agregaste en Encabezado. El cuerpo contiene campos generales y un objeto por cada pregunta seleccionada, con el ID de la pregunta como clave.
| Campo | Descripción |
|---|---|
| extra_params | Valores de las variables ocultas seleccionadas. Las claves son los nombres de las variables en minúsculas. Los valores vacíos se omiten; si no queda ninguno, extra_params es un arreglo vacío [] |
| headers | Los encabezados personalizados de la configuración del webhook |
| score_all, score_earned, score_percent | Puntuación máxima, puntuación del encuestado y porcentaje, si la encuesta usa puntuación |
| scores | Las mismas puntuaciones y el desglose por pregunta (by_question). by_question incluye todas las preguntas respondidas, también las que no seleccionaste en Elementos |
| promo_code, order_number | El código promocional entregado al encuestado y el número de pedido, si la encuesta los usa. Si no, null |
| log_id | El ID del envío en los registros del webhook |
| ID de la pregunta | El título, el tipo, las respuestas (results) y los datos de puntuación de la pregunta |
Ejemplo del cuerpo de una solicitud para una encuesta con una pregunta de opción, una pregunta de correo electrónico y una variable oculta:
{
"extra_params": {
"utm_source": "newsletter"
},
"headers": {
"X-Api-Key": "tu-clave-secreta"
},
"score_all": 0,
"score_earned": 0,
"score_percent": null,
"scores": {
"user": 0,
"max": 0,
"by_question": {
"3ec8521a-3af8-4fec-b11e-7409d38eab33": null,
"87a748c3-43e5-4ecc-bba2-413deb908864": null
}
},
"promo_code": null,
"order_number": null,
"3ec8521a-3af8-4fec-b11e-7409d38eab33": {
"title": "¿Cómo nos conociste?",
"results": [
{ "result": "Buscador", "score": null, "is_correct": null }
],
"score_count": null,
"type": "choiceSingle",
"other": "",
"score_max": null,
"is_correct_question": null,
"uuid": "3ec8521a-3af8-4fec-b11e-7409d38eab33",
"name": "source"
},
"87a748c3-43e5-4ecc-bba2-413deb908864": {
"title": "Tu correo electrónico",
"results": { "result": "anna@example.com" },
"type": "email",
"score_count": null,
"score_max": null,
"is_correct_question": null,
"uuid": "87a748c3-43e5-4ecc-bba2-413deb908864"
},
"log_id": 1024
}
En las preguntas de opción, results es una lista de las opciones elegidas y other contiene el texto de la opción "Otro". En las preguntas de texto, correo electrónico, número y similares, results es un solo objeto con la respuesta en result. El campo name solo aparece en las preguntas a las que diste nombre en Nombres de parámetros. En una solicitud de prueba, name contiene el título de cada pregunta. Decodifica las entidades HTML de name en tu lado, por ejemplo & a &.
Comprobar los envíos en los registros
- En la Lista de webhooks, abre el menú del webhook y elige Registros.
- Haz clic en Solicitud de prueba (1) para enviar una solicitud con respuestas de prueba a todas las preguntas. Se envía aunque el webhook esté desactivado.
- Haz clic en una entrada del registro (3) para ver la respuesta del servidor, el cuerpo de la solicitud y los encabezados.

Los contadores de arriba muestran los envíos Total, Con error (2) y En cola. Para volver a enviar una solicitud fallida, ábrela y haz clic en Reintentar. Cuando el registro tiene más de una solicitud fallida, aparece el bloque Reenviar registros fallidos: indica las fechas y haz clic en Reintentar para reenviar todas las solicitudes fallidas de ese periodo, hasta 1000 a la vez. Reintentar vuelve a enviar el cuerpo y los encabezados guardados a la URL de callback actual, aunque el webhook esté desactivado.
Desactivar o eliminar un webhook
Para pausar el envío, desactiva el interruptor del webhook en la Lista de webhooks. Para quitar el webhook, abre su menú y elige Eliminar. El webhook y su registro se eliminan al instante, sin confirmación.
Límites
- La URL de callback debe ser una dirección pública http o https, y su dominio debe resolverse al guardar el webhook. No se permiten direcciones internas ni locales.
- Los nombres de los encabezados solo pueden tener letras latinas, dígitos y los caracteres ! # $ % & ' * + - . ^ _ ` | ~. Los encabezados con otros nombres no se envían.
- Las respuestas recibidas mientras el webhook está desactivado no se envían después.
- Nombres de parámetros solo funciona con preguntas. Los nombres que des a las variables ocultas no se usan.
- El cuerpo de la solicitud siempre es JSON.
- El envío se considera correcto si tu servidor responde con cualquier código 2xx. SurveyNinja espera la respuesta hasta 30 segundos y sigue las redirecciones.
- Un envío fallido no se repite automáticamente. Queda en el registro con el error y puedes volver a enviarlo desde ahí.
- Si un webhook falla 20 veces seguidas, o 5 veces seguidas con una respuesta 4xx, SurveyNinja lo desactiva y envía un correo al autor de la encuesta, si tiene activadas las Notificaciones del sistema en su perfil.
Si algo no funciona
- No llegan las respuestas. Un webhook nuevo se guarda desactivado. Activa su interruptor en la Lista de webhooks.
- "Endpoint desactivado automáticamente." El webhook falló varias veces seguidas. Revisa los errores en el registro, corrige el receptor y haz clic en Volver a activar. Después, reenvía las solicitudes fallidas desde el registro.
- El webhook no se guarda. La URL de callback no es una dirección válida, su dominio no se resuelve o apunta a una dirección interna o local. Usa una dirección pública http o https.
- "La dirección del endpoint no es válida: revise la configuración" en el registro. La dirección ahora apunta a una dirección interna o local, así que el reenvío se bloqueó. Cambia la URL de callback.
- Reintentar falla con el mismo error después de cambiar los encabezados. Reintentar envía los encabezados guardados con la solicitud original. Haz clic en Solicitud de prueba para comprobar la nueva configuración. Las respuestas nuevas se envían con los nuevos encabezados.
- "El servidor no respondió en 30 segundos." Tu servidor tarda demasiado en responder. Haz que primero devuelva un código 2xx y que procese los datos después.
- El registro muestra el código 405. El servidor no acepta ese tipo de solicitud. Revisa Tipo de solicitud: la mayoría de los servicios esperan POST.
25 preguntas para encuestar a los clientes de una agencia de viajes