Desarrollamos analítica de voz para un contact center combinando PrimeNG en el frontend, NestJS en el backend y reconocimiento automático del habla a través de Yandex Speechkit. El reconocimiento convierte el audio en texto y nuestro motor propio ejecuta la analítica posterior. Durante el desarrollo aparecieron aprendizajes útiles que resumimos aquí, junto con una perspectiva de cómo un stack PrimeNG + NestJS + STT API puede escalar en proyectos de aplicaciones a medida e inteligencia artificial para empresas.
1. Reproductor de audio en la tarjeta de transcripción
La tarjeta de transcripción muestra la información del audio con un deslizador de reproducción en la parte superior y las réplicas del diálogo debajo. Al hacer clic en una réplica, el reproductor salta a su fragmento. Para ello añadimos a cada réplica un campo start_time en segundos desde el inicio y, al seleccionar la réplica, actualizamos el tiempo del elemento audio del documento y lo reproducimos. Es simple, nativo y evita dependencias adicionales.
2. Resaltado de palabras en réplicas y etiquetas
Necesitábamos subrayar o colorear palabras que coinciden con diccionarios y, además, mostrar las etiquetas encontradas por réplica. Decidimos generar el marcado HTML en el backend. La razón es doble: ya contamos y parseamos ahí las coincidencias y, así, el frontend solo pinta la cadena HTML segura que llega con los estilos adecuados, ahorrando lógica duplicada y datos intermedios sobre posiciones de palabras.
3. Edición de palabras en un fragmento
Los fragmentos sirven para definir guiones de conversación y controlar su cumplimiento durante la llamada. Un fragmento es un conjunto de palabras. El backend envía la entidad con su lista de términos y en el frontend construimos un formulario para añadir, corregir o eliminar palabras. Al guardar, devolvemos el fragmento con el nuevo array y persistimos la versión actualizada en el servidor.
4. Selección de columnas en el registro de llamadas
En un registro de transcripciones, la entidad puede tener muchos campos: sentido de la llamada entrante o saliente, departamento, ciudad, puntuación, número de palabras por interlocutor y más. Habilitamos la elección dinámica de columnas, dejando como fija únicamente la columna de ID con acceso a la vista detallada. La preferencia de columnas se guarda en cookies del navegador y se restaura al volver a entrar en la sección.
5. JWT y cuenta de usuario
La autenticación no termina al firmar un token. Es clave identificar al usuario en cada request y trabajar con su identidad. Creamos un decorador sencillo que extrae del payload del JWT el dato de cuenta, por ejemplo el email. Con ese valor, el controlador delega en los servicios la lógica, ya sea para listar conversaciones o validar permisos de lectura, actualización o borrado lógico.
6. Roles y permisos, dónde comprobarlos
La duda frecuente es si chequear permisos en el controlador o dentro del servicio. Optamos por centralizar un servicio de derechos de acceso que construye condiciones where para las consultas, incluyendo borrado lógico. Por ejemplo, para un usuario estándar se generan condiciones OR que filtran registros donde es responsable o autor y deleted es no. Los servicios de dominio agregan luego sus propios criterios, como categoría igual a nuevo, sobre cada rama de la condición, manteniendo la semántica sin duplicar lógica.
7. Derechos de usuario también en el frontend
Además de validarlo en backend, la interfaz debe comunicar claramente lo que está permitido. Exponemos un endpoint que devuelve el rol del usuario y, con ello, deshabilitamos acciones como crear, editar o eliminar cuando no corresponda. Esto mejora la experiencia y reduce errores innecesarios.
8. Historial de cambios
Para auditar quién cambió qué y cuándo, implementamos un historyService con un método genérico calcChangeAndCreate. Este compara entidad anterior y nueva, ignora metacampos como created y updated, normaliza valores de fecha y guarda la lista de campos alterados. También registramos cambios de entidades hijas, como números de teléfono de un contacto, dentro del historial del padre para mantener el contexto.
Resultados y valor para negocio
Con este enfoque, la solución de analítica de voz ofrece navegación precisa por audio, búsqueda y resaltado de términos clave, control granular de permisos, auditoría completa y una interfaz flexible con PrimeNG. Es una base sólida para iniciativas de ia para empresas como evaluación de calidad, detección de silencios, análisis de sentimiento, categorización por intención o activadores de agentes IA.
Sobre Q2BSTUDIO
En Q2BSTUDIO diseñamos y construimos software a medida y aplicaciones a medida que combinan inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio y automatización end to end. Nuestro equipo integra procesamiento del lenguaje natural, pipelines de datos, APIs seguras y cuadros de mando con power bi para acelerar la toma de decisiones. Si buscas impulsar la analítica de voz u otros casos de uso de ia para empresas, visita nuestra página de inteligencia artificial o descubre cómo abordamos proyectos de software a medida.
Palabras clave
aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi, automatización de procesos