Enviar respuestas a tu propio endpoint con webhooks
Envía cada respuesta que reciba una campaña, firmada, a una dirección HTTPS tuya, o cualquier contenido desde un paso de un flujo de trabajo. En qué se diferencia el conector Webhooks de Configuración → API → Webhooks.
En esta página
El conector Webhooks envía cada respuesta que recibe una campaña a una dirección de tu propio servidor, como un POST firmado, unos instantes después de darse. Un flujo de trabajo también puede usarlo, para enviar todo lo que sabe la ejecución. Al final de esta guía tendrás un endpoint que recibe respuestas y los medios para comprobar que cada solicitud viene de verdad de Polzy.
El conector Webhooks está incluido en el plan Business. Solo un Administrador puede conectarlo y elegir adónde van las respuestas de una campaña.
¿Qué webhook necesitas?
Polzy puede llamar a tu servidor de tres maneras:
| Conector Webhooks (este artículo) | Configuración → API → Webhooks | Paso Webhook saliente | |
|---|---|---|---|
| Qué se envía | Cada respuesta de una campaña, o el contenido de un paso de un flujo de trabajo | Eventos del espacio de trabajo: una respuesta creada, una campaña terminada, una acción creada o completada | Lo que diga el paso del flujo |
| Dónde se configura | Integraciones, luego la pestaña Integraciones de una campaña o un paso de un flujo | Configuración → API → Webhooks | Un flujo de trabajo |
| Plan | Business | Equipo | Equipo |
| Firmado | X-Polzy-Signature, sobre el cuerpo | X-Polzy-Signature, sobre la marca de tiempo y el cuerpo | No |
| Si falla la entrega | Tres intentos en total | Seis intentos en una media hora, con un registro de cada intento | Decide la regla de error del paso |
Para los eventos de todo el espacio de trabajo, consulta Enviar y recibir webhooks.
Antes de empezar
Necesitas:
- Un espacio de trabajo en el plan Business, con el rol de Administrador.
- Integraciones activado para el espacio de trabajo, en Configuración → General → Qué hace este espacio de trabajo.
- Un endpoint en internet, por HTTPS, que acepte un
POSTcon cuerpo JSON y responda con un estado 2xx en menos de 10 segundos. Polzy rechaza las direccioneshttp://y las de una red privada.
Conectar el conector Webhooks
Al conectar se guarda lo que comparten todas las solicitudes: el secreto de firma y los encabezados que quieras.
- En la barra lateral, en Automatizar, abre Integraciones y elige la pestaña Disponibles.
- Busca Webhooks y elige Conectar.
- En Secreto de firma, escribe un valor aleatorio largo y guarda una copia para tu servidor.
- En Encabezados HTTP, añade los encabezados que quieras enviar, como
Authorization. Sus valores se guardan cifrados. Consulta Conviene saber para ver adónde van. - Elige Conectar. La prueba responde Connected. Each survey and step names the endpoint it posts to.
Si dejas vacío el secreto de firma, se crea uno por ti — pero nunca se muestra, así que no podrías comprobar firmas con él. Escribe el tuyo. Para cambiarlo después, elige Configurar y escribe el nuevo encima del valor guardado.
Dar a una campaña su endpoint
- Abre Campañas, luego la campaña y su pestaña Integraciones.
- En Añadir una conexión, busca Webhooks y elige Conectar. Si el botón dice Configurar, el conector aún no está conectado al espacio de trabajo.
- En Destino, escribe la dirección adonde se envían las respuestas de esta campaña.
- Elige Guardar cambios.
Webhooks aparece entonces en Conectado a esta campaña, con Envía a y la dirección, su interruptor, Editar configuración, Desconectar y cuántas respuestas se han enviado y han fallado. Cada campaña puede enviar a su propio endpoint.
Qué recibe tu endpoint
Cada respuesta es un POST con estos encabezados:
| Encabezado | Qué contiene |
|---|---|
Content-Type | application/json |
X-Polzy-Event | response.submitted para la respuesta de una campaña; desde un flujo de trabajo, el Nombre del evento del paso. |
X-Polzy-Signature | El HMAC-SHA256 del cuerpo sin procesar de la solicitud, calculado con el secreto de firma, en hexadecimal. |
X-Polzy-Timestamp | El timestamp del cuerpo. |
Idempotency-Key | Solo desde un paso de un flujo: igual cuando se repite el mismo paso, para que puedas ignorar la repetición. |
Y este cuerpo JSON:
| Campo | Qué contiene |
|---|---|
event | response.submitted. |
timestamp | Cuándo se envió la solicitud. En una respuesta anónima, el día en que se dio. |
survey.id, survey.title | El ID y el título de la encuesta. |
response.id | El ID de la respuesta en Polzy. Vacío en una respuesta anónima. |
response.submittedAt | Cuándo se terminó la respuesta. En una respuesta anónima, solo el día. |
response.answers | Un elemento por pregunta respondida, cada uno con questionId, questionText y value. |
response.score | La puntuación total, si ya estaba calculada al enviarse la solicitud. |
Una respuesta anónima lleva lo que dice, su puntuación y su día, y nada que permita identificar o situar en el tiempo a quien la escribió. Polzy espera a la revisión de seguridad de cada respuesta, hasta 10 minutos, antes de enviarla; una respuesta retenida para revisión de seguridad llega como texto de sustitución. El tamaño mínimo de grupo no retiene las respuestas sueltas.
Comprobar la firma
- Lee el cuerpo de la solicitud tal como llegó, antes de procesarlo.
- Calcula su HMAC-SHA256 con tu secreto de firma, en hexadecimal.
- Compáralo con
X-Polzy-Signaturemediante una comparación de tiempo constante. Si no coinciden, rechaza la solicitud.
La marca de tiempo forma parte del cuerpo, así que una marca de tiempo alterada también invalida la firma.
Enviar un webhook desde un flujo de trabajo
- Abre Flujos de trabajo y el flujo, o crea uno nuevo.
- En Conectores, dentro de Pasos instalados, arrastra Enviar un webhook · Webhooks al lienzo.
- En Endpoint, escribe adónde envía este paso.
- En Nombre del evento, deja
workflow.stepo pon el nombre del evento que espera tu servidor. Se envía comoX-Polzy-Event. - Deja Contenido vacío para enviar todo lo que sabe la ejecución, o escribe el JSON que quieras, con
{{para insertar valores de la ejecución. - Elige Enviar prueba para enviar una solicitud rellenada con una respuesta de ejemplo.
El paso se firma con el secreto de la conexión y deja la respuesta de tu servidor como {{connector.statusCode}} y {{connector.response}}.
Comprobar que funciona
En la pestaña Integraciones de la campaña, la línea de actividad cuenta las respuestas enviadas y las que fallaron. La página del conector muestra cada envío en Actividad, con Correcto o Falló y el motivo.
Solución de problemas
En Actividad, un envío fallido indica Webhook failed: y el motivo; la ejecución de un flujo de trabajo muestra el mismo motivo sin ese prefijo.
- Webhook failed: only https endpoints are allowed. El endpoint debe empezar por
https://. - Webhook failed: private addresses are not allowed. La dirección apunta a una red privada, como
localhosto10.0.0.5. Usa una dirección accesible desde internet. - Webhook failed: that host could not be found. El nombre de la dirección no existe. Revisa cómo está escrito.
- Webhook failed: y un estado, como
500, o timeout of 10000ms exceeded. Tu endpoint respondió con un error o tardó más de 10 segundos. Cualquier respuesta que no sea 2xx cuenta como fallida, y el envío se intenta tres veces en total. - No endpoint for this survey. Set one on its Integrations tab. La campaña no tiene endpoint. Añade uno con Editar configuración en la pestaña Integraciones de la campaña.
- La firma no coincide. Calcúlala sobre el cuerpo sin procesar, antes de cualquier análisis, con el secreto que escribiste. Si el secreto se creó por ti, escribe el tuyo.
- Tu encabezado no llega. Consulta abajo: los encabezados solo van a un host al que la propia conexión envía.
Las respuestas que llegaron antes de guardar el endpoint, o con el interruptor apagado, no se envían después. Expórtalas desde Respuestas de la encuesta.
Conviene saber
- ¿Adónde van los encabezados HTTP? Solo a un host al que la propia conexión envía. Un endpoint que una campaña o un paso elija en otro host se llama sin ellos, así que un valor
Authorizationguardado nunca llega a una dirección a la que no iba destinado. Confía en la firma para distinguir las solicitudes de Polzy de las de cualquier otro. - ¿Se envían las respuestas sin terminar? No. Solo las terminadas, una vez cada una.
- ¿Puede mi endpoint responder con datos? En un paso de un flujo, sí: la respuesta se guarda como
{{connector.response}}para los pasos siguientes. En las respuestas de una campaña solo cuenta su estado.
Artículos relacionados
Los miembros con sesión iniciada pueden preguntar a Polzy o escribir al equipo desde Soporte. La rapidez de nuestra respuesta depende de tu plan.
