Skip to main content

event_log (logging estructurado)

Toda la observabilidad se apoya en una única tabla append-only, event_log (src/event-log/). Es a la vez herramienta de debugging y combustible del flywheel.

La tabla

ColumnaNotas
idUUID
event_datetimestamptz (default now), indexado
eventenum event_type
call_id / agent_idreferencias de la llamada / agente
user_id / user_emailidentidad del usuario autenticado (solo en acciones de usuario)
entity_id / entity_typereferencia genérica
payloadjsonb flexible por tipo de evento

EventLogService.log(event, context) es fire-and-forget (void ...): si falla, loguea el error pero nunca rompe el flujo de la llamada.

Tipos de evento

EventoCuándoPayload destacado
call_started / call_endedinicio/fin de llamadasource, callerNumber
knowledge_queriedcada recuperación RAG (hit y miss)query, hit, scores, embedMs, queryMs, reason
suggestion_generatedse generó una sugerenciachars, llmMs, ragHit, ragScore, tokens
feedback_givenel operario marcó una sugerenciaaction, suggestionId
claim_initiatedun agente tomó una llamadasource
call_releasedun agente liberó una llamadasource
transfer_initiatedderivación a humano (Retell)patient, summaryChars
memory_createdse guardó una lección (flywheel)category

Identidad del usuario

user_id / user_email solo se pueblan en acciones que entran por HTTP autenticado (feedback, claim, release), tomadas de @CurrentUser() en el controller.

agent_id NO es la identidad del usuario

agent_id es el último segmento de la URL del WebSocket del copiloto (VITE_COPILOT_WS_URL), frecuentemente 'unknown'. Para auditoría (quién hizo qué) usar user_id / user_email. Los eventos del bot (RAG, sugerencias, inicio/fin) no tienen usuario.

Qué alimenta

  • Métricas operativas (cobertura, se calló/derivó, latencia) → panel /operations.
  • Auditoría de acciones de usuario → panel /logs.

Ver Métricas y paneles.