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.

EventoCuándo se dispara
survey_sentLa encuesta se envió al contacto
survey_startedEl contacto empezó a responderla
survey_response_receivedLlegó una respuesta
survey_completedLa encuesta se completó
survey_expiredVenció sin completarse

Los cinco se filtran por línea.

Campos garantizados

CampoTipoNotas
session_idintId de la sesión de encuesta. Es la llave que une los cinco eventos
survey_config_idintConfiguración de encuesta que la originó
user_idintCuenta dueña
whatsapp_number_idintLínea por la que se envió
contact_idint | nullId del contacto
contact_wa_idstring | null⚠️ Clave de conversación: teléfono o BSUID, igual que wa_id en los mensajes
bsuidstring | nullVer Identidad del contacto
wa_usernamestring | null
agent_idint | nullAgente que atendió la conversación
chat_bot_idint | nullBot que la originó, si aplica
trigger_typestring | nullQué disparó la encuesta
statusstringpending, sent, in_progress, completed, expired, cancelled
versionint1

Campos propios de cada evento

Además del piso, cada evento agrega los suyos:

EventoCampos extra
survey_sentsent_at, lock_until
survey_startedstarted_at
survey_response_receivedresponse_id, response_type, response_value, response_text, responded_at, current_step_id, session_status
survey_completedcompleted_at, total_responses, responses (el arreglo con todas)
survey_expiredexpired_at, previous_status

Ejemplo — 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

{
  "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

Los 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

Si 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

Si 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


Did this page help you?