Soy Marcos Barrientos, el CTO de Incontacto (in-contacto.com), una eventech con presencia directa en 9 países, Colombia, Guatemala, Costa Rica, República Dominicana, Panamá, Ecuador, Perú, Estados Unidos y España y un portafolio de más de 60 servicios: registro, credenciales, control de acceso con reconocimiento facial, plataformas virtuales, votaciones y, de forma transversal, comunicación y mailings .
Detrás de la operación hay más de 20 empleados directos y más de 200 indirectos en 9 países, por lo cual el volumen de requerimiento diario operativo es muy alto.
Es una plataforma de tickets interna para la mesa de ayuda. Centraliza todo el flujo de requerimientos internos en un único lugar con roles claros, ciclo de vida del ticket, trazabilidad y estadísticas que generan mas valor.
La construí para reemplazar una herramienta cerrada y rígida que utilizamos actualmente, y para resolver dolores concretos del día a día.
Hasta hoy trabajamos con una plataforma rígida, que no nos suministra mucha información y es muy limitada en sus funciones para lo que necesitamos en el día a día. Se queda corta para atender la operación real de la empresa:
Construir una plataforma propia que entienda nuestra operación en lugar de obligarnos a adaptarla a la herramienta, que se adapte al tipo de solicitud (campos personalizados), que nos dé visibilidad real (estadísticas por rol y sede) y que resuelva dolores concretos como el flujo del ticket o los comentarios en el mismo. La idea es que mejore notablemente la velocidad y el proceso con los que hoy se atienden los requerimientos internos.
Tenía que entender que lo primero que había que cambiar era el ciclo de vida de un ticket, ya que en la herramienta actual, el ticket se crea, se asigna y se cierra, pero ese flujo no siempre es así, en la empresa nos pasa mucho que un agente no lo puede atender luego de estar asignado, o en ocasiones se tiene que reabrir el ticket porque el solicitante pide nuevos cambios sobre el mismo y no queremos perder todo el contexto que llevamos creando uno nuevo.
Pero no solo era definir un flujo que se acomode a nuestras necesidades actuales. También nos faltaba que cada ticket pudiera tener adjuntos e imágenes para dar más contexto al agente, comentarios públicos y privados para separar lo que ve quien abrió el ticket de lo interno del equipo, texto enriquecido (negrilla, subrayados, URLs y más) para darle más valor y contexto a la descripción, y un historial de estados siempre presente en el ticket para no perder la trazabilidad de nada de lo que va pasando.
Cada ticket recorre un flujo bien definido, con transiciones automáticas de acuerdo a las necesidades actuales. Nadie tiene que acordarse de cambiar el estado a mano, el sistema lo hace solo según lo que va pasando. Si quien abrió el ticket comenta sobre uno que ya estaba resuelto porque necesita un ajuste, el ticket vuelve a abrirse sin perder nada del contexto acumulado. Así el flujo se acomoda a la realidad de la operación, donde un agente a veces no puede atender un ticket ya asignado y quiere liberarlo para otro agente; o el solicitante pide cambios sobre algo que se dio por cerrado.
Si quien abrió el ticket comenta sobre uno resuelto porque necesita un ajuste, se reabre automáticamente.
Si un agente ve que no puede atender un ticket que tiene asignado, lo puede liberar para que vuelva a la cola y otro agente se lo asigne.
Cuando el agente resuelve el ticket, le llega automáticamente la evaluación al solicitante, así cada ticket resuelto se evalúa y se mide la calidad de la atención.
Comentarios visibles para quien abrió el ticket y comentarios internos reservados al equipo de agentes, para separar lo que se comunica del trabajo interno.
Cada ticket puede llevar archivos adjuntos para que el agente tenga todo lo necesario para diagnosticar desde el primer momento.
El historial de estados queda registrado y siempre visible dentro del ticket, así no se pierde la trazabilidad de nada de lo que va pasando.
Emails personalizables ante cada evento del sistema.
La descripción del ticket soporta negrillas, subrayados, URLs y más, para que sea más clara y lleve más información desde el primer momento.
Cada ticket muestra cuánto lleva en su estado actual, sea sin atender o en atención, para que el agente vea la urgencia real en todo momento.
Administrador, agente y solicitante ven solo lo que les corresponde, con gráficos de creados vs. resueltos y distribución por categoría, prioridad y sede. El agrupamiento por sede es clave para una empresa que opera en 9 países: permite ver, de un vistazo, cuál es la sede que más demanda genera y cómo se reparte la carga entre regiones. Esa visibilidad global es uno de los argumentos más fuertes para tener una plataforma propia: la decisión se toma sobre datos vivos del sistema, no sobre una planilla de Excel.
Más allá de cubrir lo básico, aproveché para mejorar, optimizar y crear cosas que hicieran la operación más ágil y, sobre todo, que el día a día del equipo fuera más llevadero y gratificante. Estas son algunas de las decisiones que tomé con ese objetivo.
Ya sabíamos que necesitábamos campos diferentes según el tipo de ticket. Aprovechando eso, también definí qué tipo de campo era cada uno (numérico, texto, selección, fecha) para que la información tuviera formato y no llegara como texto libre, y que se pudiera marcar cada campo como obligatorio o no según conviniera.
Además, cada tipo de ticket se puede marcar con un color, para que el agente lo identifique a simple vista en la cola sin tener que leer el título.
Así cada tipo de ticket captura exactamente lo que necesita, con el formato correcto, desde el momento en que se crea.
Sección del software · Navegador · Error que sale
Tipo de ayuda · Aplicación donde se requiere · Sistema operativo
Nombre del remitente · Correo del remitente · Asunto
Para nosotros, el envío de comunicaciones y mailings es parte central de lo que hacemos. Pero los tickets de email eran un problema crónico: la persona que crea el ticket no tiene claro cómo quiere que se envíe el email, o el cliente final nunca le especificó el formato, los colores, el orden de los contenidos.
El agente terminaba improvisando el HTML a mano, o iterando por chat con el solicitante.
Se marca una categoría para indicar que sus tickets generan envíos de email. La aplicación, automáticamente activa un botón para interactuar con todo el tema de plantilas de email.
El administrador puede tener un repositorio de plantillas que puede generar como base para que los agentes las usen e iteren sobre ellas. Pero si el agente o el solicitante tiene una, o le mandaron algo, o quiere hacerla desde cero, también tiene la posibilidad de hacerlo.
Los cambios se solicitan a un agente de IA, sin necesidad de saber HTML ni CSS. Cada usuario cuenta con hasta 5 iteraciones por ticket para refinar el resultado. Tanto agente como solicitante pueden utilizar la función
Aunque esta funcionalidad se va a utilizar al interior de la empresa por usuarios que únicamente el administrador cree, siempre hay que pensar en la seguridad y en hacerlo con buenas prácticas, por eso tuve en cuenta:
Solo modifica HTML de plantillas de correo y rechaza cualquier instrucción que se desvíe del tema.
La entrada del usuario se delimita y aísla para mitigar intentos de manipular el comportamiento del agente.
Cada interacción queda registrada, visible por el administrador.
Si dos personas editan el mismo email, el sistema avisa quién y cuándo lo modificó para que no se pierda el HTML construido.
Lo que empezó como una necesidad lo convertí en una novedad: todas las plantillas son editables por el administrador, trabajan con todos los campos del sistema y se manejan sin tocar una línea de código.
Cada plantilla puede usar cualquier campo del sistema como etiqueta que el sistema reemplaza automáticamente al enviar el correo.
El administrador crea y edita cada plantilla: asunto, cuerpo, remitente, qué campos reemplazar. Todo desde un panel, sin pedirle nada a desarrollo.
El envío se hace con SendGrid y de cada correo se guarda el messageId, para poder rastrear y auditar qué llegó y qué no, en caso de que haga falta.
Así la comunicación que sale de la plataforma se mantiene y se ajusta sin pasar por código y cada mensaje llega con la información específica que se requiera.
El trabajo de soporte en la empresa es intenso y el volúmen de tickets que reciben nuestros agentes a diario es muy alto. Por eso la decidí incluír un espacio pensado para que los agentes hagan pausas activas y compitan entre ellos de forma sana, con un ranking que los motiva a despejarse y volver al trabajo mas animados.
Porque la idea: hacer el día a día del agente más agradable, premiando el descanso activo y generando mas interacción y conexiones entre el equipo de agentes.
Si bien lo mas importante es que los juegos pudieran ser jugables fácil,emte, los agentes de la empresa son personas con un perfil técnico muy alto. Conociendo esa capacidad, fue necesario construir el sistema de forma que no se pudiera alterar el resultado de los juegos, no por desconfianza, sino porque para un equipo así sería trivial manipular un marcador sin seguridad.
El puntaje, el momento del juego y el jugador viajan firmados para que el servidor verifique que el resultado fue genuino. Así el ranking refleja de verdad quién jugó mejor. Un respeto por la inteligencia de nuestros agentes.
Cualquier usuario, sin importar su rol, tiene un espacio propio de notas personales dentro de la plataforma. Es un lugar para hacer anotaciones, llevar bitácoras y guardar esas cosas que uno necesita tener a la mano en cualquier momento.
Las notas se pueden marcar como favoritas, así las más importantes quedan siempre en una sección aparte.
Ideal para registrar cómo se resolvió cierto tipo de ticket, atajos, comandos o cualquier conocimiento que uno no quiere perder.
Cada usuario tiene sus propias notas, privadas. No se comparten ni se mezclan con las del resto del equipo.
Por ejemplo, cuando un agente descubre cómo resolver un tipo de ticket complicado, lo anota ahí y la próxima vez que le pase algo del estilo ya sabe que en las notas tiene como se resuelve.
Para ser mas efectiva la plataforma, aunque existe el ingreso con las credenciales, pense que en ocasiones los agentes sobre todo manejan el acceso a múltiples plataformas y no siempre tienen en la cabeza el usuario y clave de esta plataforma, adicional que tanto agentes, como comerciales, como cualquier rol de la empresa van de un evento a otro y se mueven en diferentes lugares. Por lo cual, cree una funcionalidad donde el administrador puede mandar tanto un link por correo o copiarlo y pegarlo en un chat de Whatsapp y con solo ingresar al link el usuuario queda logeado, con un único uso y con expiración rápida.
Al igual que el link de acceso único, tanto el sistema a la hora de resolver el ticket como el administrador, pueden enviar un correo con un link único de calificación de la atención del ticket al solicitante, sin necesidad de iniciar sesión, esto con el fin de reducir la fricción para asegurar la evaluación.
Los usuarios de la empresa se mueven entre eventos y varios lugares, y es fácil que dejen una sesión abierta o pierdan un equipo. Para cubrir eso, el administrador puede ver todas las sesiones activas de cada usuario con su IP, dispositivo, navegador y sistema operativo, y cerrar la sesión de un dispositivo en específico de inmediato.
Si alguien dejó la cuenta abierta en un computador que ya no tiene a mano, le avisa al administrador y este la cierra en segundos, sin tocar al usuario.
De cada sesión se ve la IP, el dispositivo, el navegador y el sistema operativo, además de cuándo y desde dónde se inició.
El administrador cierra la sesión del dispositivo que haga falta y el cambio se aplica al instante, sin esperar a que caduque por tiempo.
Desarrollé que el solicitante pueda suscribirse a un ticket y recibir notificaciones por email en tiempo real cada vez que cambia de estado. Esto no es para todos los tickets: cada solicitante decide a cuáles se suscribe y a cuáles no.
No es global ni obligatorio: cada usuario elige ticket por ticket cuál quiere seguir y cuál no.
Cada vez que el ticket cambia de estado, los suscriptores reciben un email de inmediato, sin esperar a entrar al sistema.
El administrador puede publicar noticias y comunicados que se ven directamente en la página de inicio de la plataforma, visibles para todos los usuarios del sistema.
Así, en lugar de depender de canales externos, la empresa se entera de novedades, políticas y cambios importantes por medio de la plataforma
Novedades, políticas internas, mantenimiento programado, recordatorios: todo lo publica el administrador desde un panel y queda visible para todos sin mover a la gente a otra herramienta.
Dominio → Aplicación → Interfaces → Infraestructura. Las dependencias siempre apuntan hacia adentro y el núcleo de negocio no depende de ningún framework. Un único punto de ensamblado con inyección por constructor.
Dos niveles de test: unitarios (mockeando el repositorio) e integración (contra base de datos real, en transacción reversible).
SPA moderna con rutas lazy-loaded, diseño responsivo y componentes tipados estrictamente.
API REST en arquitectura limpia, con acceso a datos por ORM.
La decisión fue por velocidad y agilidad. Además, Postgres permite usar campos tipo JSON, que son clave para guardar los campos personalizados de cada tipo de ticket sin tener que crear tablas nuevas cada vez.
Las sesiones se guardan en Redis para agilizar la validación de cada petición y permitir expirar una sesión de forma inmediata cuando un usuario cierra sesión o un administrador la revoca.
La idea es que cada vez que un agente cierre un ticket, cuente cómo lo solucionó. Como esa solución suele ser larga, el agente la dicta por voz y una IA la transcribe y la deja en claro antes de guardar.
El agente cuenta la solución hablando; una IA la transcribe y la deja lista para guardar.
En texto claro en la base de datos y como embedding en una base vectorial. La base de conocimiento crece con cada ticket.
Al poner un ticket, el sistema busca en segundo plano en la base de datos vectorial si ya existe una solución parecida.
Al asignarse el ticket, el agente ve: "otro agente ya resolvió algo parecido y fue así…", con el detalle.
Que cada solución se acumule y quede disponible para todos, para agilizar procesos y soluciones y que el conocimiento del equipo nunca se pierda.
Brais quiero agradecer por el máster, su excelente orientación y calidad del contenido. Gracias a lo que aprendí, hoy en Incontacto podemos llevar la operación de la empresa a un nivel más alto: hacer seguimiento real de las solicitudas, medir, mejorar de forma continua y tener una plataforma que crezca con la empresa.
Tickets Incontacto no es un punto de llegada, es el punto de partida para seguir optimizando cómo trabajamos.