Webhooks — Eventos de encuesta
Los cinco eventos del ciclo de vida de una encuesta de satisfacción.
Cinco eventos siguen el ciclo de vida de una encuesta de satisfacción, desde que se envía
hasta que se completa o vence.
| Evento | Cuándo se dispara |
|---|---|
survey_sent | La encuesta se envió al contacto |
survey_started | El contacto empezó a responderla |
survey_response_received | Llegó una respuesta |
survey_completed | La encuesta se completó |
survey_expired | Venció sin completarse |
Los cinco se filtran por línea.
Campos garantizados
| Campo | Tipo | Notas |
|---|---|---|
session_id | int | Id de la sesión de encuesta. Es la llave que une los cinco eventos |
survey_config_id | int | Configuración de encuesta que la originó |
user_id | int | Cuenta dueña |
whatsapp_number_id | int | Línea por la que se envió |
contact_id | int | null | Id del contacto |
contact_wa_id | string | null | ⚠️ Clave de conversación: teléfono o BSUID, igual que wa_id en los mensajes |
bsuid | string | null | Ver Identidad del contacto |
wa_username | string | null | |
agent_id | int | null | Agente que atendió la conversación |
chat_bot_id | int | null | Bot que la originó, si aplica |
trigger_type | string | null | Qué disparó la encuesta |
status | string | pending, sent, in_progress, completed, expired, cancelled |
version | int | 1 |
Campos propios de cada evento
Además del piso, cada evento agrega los suyos:
| Evento | Campos extra |
|---|---|
survey_sent | sent_at, lock_until |
survey_started | started_at |
survey_response_received | response_id, response_type, response_value, response_text, responded_at, current_step_id, session_status |
survey_completed | completed_at, total_responses, responses (el arreglo con todas) |
survey_expired | expired_at, previous_status |
Ejemplo — survey_response_received
survey_response_received{
"event": "survey_response_received",
"data": {
"session_id": 7001,
"survey_config_id": 12,
"user_id": 1234,
"whatsapp_number_id": 42,
"contact_id": 987654,
"contact_wa_id": "573001234567",
"bsuid": null,
"wa_username": null,
"agent_id": 88,
"chat_bot_id": null,
"trigger_type": "conversation_closed",
"status": "in_progress",
"response_id": 30012,
"response_type": "rating",
"response_value": { "rating": 5, "text": "Excelente atención" },
"response_text": "Excelente atención",
"responded_at": "2026-08-07 15:22:40",
"current_step_id": 1,
"session_status": "in_progress",
"version": 1
}
}Ejemplo — survey_completed
survey_completed{
"event": "survey_completed",
"data": {
"session_id": 7001,
"survey_config_id": 12,
"user_id": 1234,
"whatsapp_number_id": 42,
"contact_id": 987654,
"contact_wa_id": "573001234567",
"bsuid": null,
"wa_username": null,
"agent_id": 88,
"chat_bot_id": null,
"trigger_type": "conversation_closed",
"status": "completed",
"completed_at": "2026-08-07 15:23:02",
"total_responses": 2,
"responses": [ { "...": "cada respuesta de la sesión" } ],
"version": 1
}
}Notas de comportamiento
Use session_id para unir el ciclo
session_id para unir el cicloLos cinco eventos de una misma encuesta comparten session_id. Es la llave para armar el
recorrido completo sin depender del orden de llegada — que no está garantizado.
survey_completed trae todo junto
survey_completed trae todo juntoSi solo le interesa el resultado final y no el recorrido, suscríbase únicamente a
survey_completed: trae responses con todas las respuestas de la sesión, así que no
necesita ir acumulando los survey_response_received.
Una encuesta puede terminar sin survey_completed
survey_completedSi el contacto no responde, la sesión vence y llega survey_expired, no survey_completed.
Si su lógica espera un cierre, contemple los dos.
Ver también
- Identidad del contacto —
contact_wa_idpuede ser un BSUID
Updated 17 days ago
