Saltar al contenido
Menú de la documentación

Catálogo de eventos

Todos los tipos de evento a los que puedes suscribir un webhook, cada uno con sus campos, su versión, su esquema JSON y un ejemplo tal y como llega; los objetos que comparten y los vocabularios cerrados. Cómo crear un webhook y verificar la firma está en la guía.

Objetos comunes

#

Los objetos que comparten los eventos de llamadas, WhatsApp y leads.

call

#
CampoTipo¿Puede ser null?Qué es
identeronoEl id de la llamada en Calligence.
directiontexto de sentido de la llamadanoVer sentido.
statustexto de estados de la llamadanoVer estados de la llamada.
attempt_indexenterosíQué intento es para este lead (1, 2, 3…); null en una entrante.
started_atfecha y hora ISO-8601 UTCsíCuándo empezó.
ended_atfecha y hora ISO-8601 UTCsíCuándo terminó: la hora que nos dio el proveedor de voz; si no la dio (por ejemplo, una llamada cortada al saludar), cuándo lo supimos. En call.failed (initiation), siempre cuándo lo supimos. null mientras la llamada no ha terminado (call.dispatched, call.failed en dispatch).
duration_snúmerosíDuración en segundos, según el proveedor. Es la duración de la llamada: no la calcules como ended_at − started_at. 0 en call.failed (initiation); null antes de terminar.
from_numbertextosíQuién llama, en E.164: tu número en una saliente, el del cliente en una entrante. null si el cliente llamó con el número oculto.
to_numbertextosíA quién se llama, en E.164: el del cliente en una saliente, tu número en una entrante. null si es el del cliente y lo tenía oculto.

lead

#
CampoTipo¿Puede ser null?Qué es
identeronoEl id del lead en Calligence.
statustexto de estados del leadnoSu estado en el momento del evento. Ver estados del lead.
status_reasontextosíEl motivo interno de ese estado (texto libre, puede ampliarse).
product_nametextosíEl producto que le interesa al cliente.
product_codetextosíEl código de ese producto.

customer

#
CampoTipo¿Puede ser null?Qué es
identeronoEl id del cliente en Calligence.
external_idtextosíTu identificador, tal y como nos llegó; null si el lead entró sin él.
phonetextosíSu teléfono, en E.164; null si llamó con el número oculto.
nametextosíSu nombre; null si no lo conocemos.

campaign

#
CampoTipo¿Puede ser null?Qué es
identeronoEl id de la campaña en Calligence.
nametextosíSu nombre.

agent

#
CampoTipo¿Puede ser null?Qué es
typetextosíLa clave del agente que hizo o atendió la llamada; null si no hubo agente.

Un turno de transcript

#
CampoTipo¿Puede ser null?Qué es
roletexto de turnos de la transcripciónnoQuién habla. Ver turnos.
texttextonoLo que dijo.

outcome

#
CampoTipo¿Puede ser null?Qué es
lead_statustexto de estados del leadsíEl estado que decidió esta llamada. Puede no coincidir con lead.status, que es el estado del lead después del análisis: si tu equipo o el chat de WhatsApp ya habían cerrado el lead, una llamada sin veredicto no lo reabre y lead.status conserva ese cierre. Para automatizar, usa lead.status.
reasontextosíEl motivo de ese veredicto (texto libre, puede ampliarse).
intenttextosíLa intención detectada en el cliente (por ejemplo acepta_traspaso o reagendar_calligence), o null.

media

#
CampoTipo¿Puede ser null?Qué es
kindtexto de tipos de adjuntonoVer tipos de adjunto.
content_typetextosíEl tipo MIME que declaró WhatsApp.

Vocabularios cerrados

#

Los campos con un conjunto fijo de valores. Pueden ganar valores nuevos (trátalos con un caso por defecto), nunca perderlos.

Estados del lead

#
ValorQué significa
PENDIENTEEn curso: el lead sigue abierto (quedan intentos o hay otra llamada programada). Como veredicto de una llamada (outcome) significa «sin veredicto».
EXITOObjetivo conseguido: cita acordada, traspaso aceptado o transferencia a una persona de tu equipo.
INVALIDODescartado: ilocalizable tras todos los intentos, persona equivocada o no cumple los requisitos.
NO_INTERESADOEl cliente rechazó la propuesta.
TRABAJADO_EXTERNOTu equipo lo cerró fuera de Calligence. Nunca sale del análisis de una llamada.

Motivos de fallo

#
ValorQué significa
busyEl número comunicaba.
no_answerSonó y nadie contestó.
not_connectedLa red telefónica no conectó la llamada por otro motivo: número inexistente, fuera de servicio, rechazada…
unreachable_numberNo se puede llamar a ese número desde Calligence (destino no permitido). Reintentar no servirá.
missing_variablesFaltaba un dato que el agente necesita para saludar (por ejemplo, el nombre del cliente): la llamada no se hizo o se cortó al empezar. Revisa los datos del lead.
provider_errorUn error de nuestro proveedor de voz.
dispatch_errorUn error interno al iniciar la llamada.
unknownEl proveedor no dio ningún motivo. Solo aparece en call.failed.

Etapas de fallo

#
ValorQué significa
dispatchCalligence no pudo iniciar la llamada: normalmente, el teléfono del cliente no llegó a sonar (ver los casos límite).
initiationLa llamada se inició, pero no llegó a conectar con el cliente.

Sentido de la llamada

#
ValorQué significa
outboundSaliente: la hizo tu agente.
inboundEntrante: el cliente llamó a tu número.

Estados de la llamada

#
ValorQué significa
initiatedIniciada, todavía sin resultado.
completedLa conversación terminó con normalidad.
failedLa llamada falló: no conectó, o la conversación se cortó por un error.

Turnos de la transcripción

#
ValorQué significa
agentHabla el agente de IA.
userHabla el cliente.

Autores de un mensaje de WhatsApp

#
ValorQué significa
templateUna plantilla aprobada por Meta (la única forma de escribir fuera de la ventana de 24 h).
precall_noticeEl aviso que se envía antes de una llamada.
aiUna respuesta del agente de IA.
operatorUna persona de tu equipo, desde la consola.

Estados de entrega de WhatsApp

#
ValorQué significa
sentSalió hacia WhatsApp.
deliveredLlegó al teléfono del cliente.
readEl cliente lo leyó (si tiene activadas las confirmaciones de lectura).
failedNo se pudo enviar o entregar; error dice por qué.
undeliveredWhatsApp no pudo entregarlo. Llega sin motivo: su error es null.

Errores de envío de WhatsApp

#
ValorQué significa
rejectedWhatsApp rechazó el envío.
not_sentNo llegó a enviarse.
outcome_unknownNo sabemos si se envió (se cortó la comunicación con el proveedor); no lo reintentamos para no duplicarlo.
delivery_failedSe aceptó, pero después no se pudo enviar ni entregar: un failed que llega tras whatsapp.message.sent.

Tipos de adjunto

#
ValorQué significa
audioUna nota de voz o un audio.
imageUna imagen.
mediaCualquier otro adjunto (documento, vídeo…).

Resultados del procesado de un adjunto

#
ValorQué significa
doneConvertido a texto (por ejemplo, una nota de voz transcrita).
failedLa conversión falló.
too_largeDemasiado grande para procesarlo.
unsupportedFormato no admitido.
disabledEl procesado de ese tipo de adjunto no está activado.

Casos límite

#
  • Un webhook filtrado por campañas nunca recibe lo que no tiene campaña: por ejemplo, la llamada entrante de alguien que no es lead de ninguna campaña activa, o los mensajes de WhatsApp de un chat que no pertenece a ningún lead. Solo la reciben los webhooks con «Todas».
  • Un intento que no llega a existir no emite nada. Si no podemos ni crear la llamada (no hay ningún número disponible, el cliente ya no existe), no hay call.failed.
  • Muy raramente, call.dispatched va seguido de call.failed (dispatch): el proveedor aceptó la llamada pero fallamos al registrarlo. El teléfono pudo sonar, y después pueden llegar call.ended y call.analyzed.
  • Igual de raro: si falla el guardado que registra que el proveedor aceptó la llamada, no llega call.dispatched, solo call.failed (dispatch), aunque el teléfono pudo sonar.
  • call.failed llega cuando terminamos de procesar el fallo. Si ese procesado falla una y otra vez, la llamada se queda como iniciada y no se emite.
  • call.analyzed solo llega si el análisis se completa, y outcome.lead_status es lo que decidió esa llamada, mientras que lead.status es el estado del lead después: pueden diferir.
  • Lo que no sabemos viaja como null, nunca como un valor de relleno: un cliente sin nombre tiene name: null, y una llamada entrante, attempt_index: null.