Tickets
El módulo de Tickets es el sistema de gestión de incidencias de soporte de Vivla (propiedades, experiencia del cliente, administrativo). Nació como un espejo de Zendesk y está en transición para que Vivla Tools sea la herramienta principal, manteniendo sincronización con Zendesk mientras ambos conviven.Operativamente lo usa el equipo de CX. Cada cambio de campo, adjunto o
comentario hecho en Vivla Tools se sincroniza de vuelta a Zendesk (write-back)
para no perder información durante la transición.
Arquitectura
- Fuente de verdad: Vivla Tools gobierna las opciones de los desplegables (config en código) y aloja los adjuntos en su propio Cloudinary. Zendesk sigue como inbound (import + webhook) y recibe el write-back durante la transición.
- Sincronización: import diario (vía Windmill) + webhook en tiempo real. Ver Sincronización.
Superficies
El módulo se expone en dos lugares:| Superficie | Ruta | Uso |
|---|---|---|
| Tool dedicada | /app/tickets | Herramienta top-level: dashboard + lista + detalle |
| Chat-embed | /app/chat/tickets | Tickets embebidos dentro del módulo de Chat |
TicketsToolLayout / EmbeddedTicketsLayout) con sub-navegación a Panel (dashboard) y Tickets (lista), y el detalle del ticket (/.../list/$ticketId).
El ticket se gestiona por completo desde el detalle: la sección
Gestión permite cambiar estado (incluido darlo por finalizado),
prioridad, tipo (incidencia | propuesta de mejora) y asignación
con guardado inmediato al seleccionar, y también se editan título,
descripción, routing, reparación, notas y fechas.
Tipo de ticket (ticket_kind)
Cada ticket tiene una naturaleza persistida en la columna ticket_kind:
- Incidencia (
incident, default): el ticket de soporte estándar. - Propuesta de mejora (
improvement_proposal): una idea de mejora para la casa, no una incidencia.
“Propuesta de mejora” fue en su día un estado falso del
status; ahora es
su propia dimensión (ticket_kind). Ver la transición two-phase.Funcionalidades
Campos y formulario
Campos nativos, desplegables (fuente de verdad en Tools), mapeo con Zendesk
y automatizaciones (casa→destino, pagador auto, estado de reparación).
Adjuntos
Archivos a nivel ticket (fotos + PDFs) en Cloudinary, con write-back a
Zendesk y re-alojado de imágenes de chat.
Dashboard y SLAs
KPIs, cumplimiento de SLA por prioridad, cohortes de antigüedad, tipos de
ticket (Casa/Experiencia/Administrativo/Dormido) y FCR.
Actividad e IA
Audit log (quién creó/cambió qué), soft-delete de inválidos y planes de
mejora generados con IA.
Sincronización Zendesk
Import, webhook, comentarios y los CLIs de backfill (históricos, comentarios,
historial, equipos por IA).
Modelo de datos
| Tabla | Descripción |
|---|---|
chat_tickets | Ticket: campos nativos (incl. ticket_kind) + columnas derivadas (resolved_at, reopened_count) + soft-delete (invalid) + rango de coste + plan de mejora IA |
chat_ticket_comments | Comentarios (importados de Zendesk + creados en Tools) |
chat_ticket_attachments | Adjuntos a nivel ticket alojados en Cloudinary (Fase I) |
chat_ticket_status_history | Historial/actividad append-only: transiciones y cambios de campo con actor |
chat_ticket_messages | Mensajes de chat asociados al ticket |
Backend
apps/backend/src/chat/integrations/ticketing/.