Bienvenidos de nuevo a la segunda parte de nuestra serie de dos partes sobre la creación de una aplicación interactiva de atención al cliente que capacite a los agentes de soporte con la ayuda de la IA. El objetivo es mejorar su importante trabajo aprovechando respuestas previamente resueltas para preguntas abiertas actuales de forma rápida e intuitiva mediante la búsqueda vectorial.

tl;dr En caso de que desee pasar directamente a la aplicación, puede encontrar un ejemplo totalmente funcional de esta aplicación en GitHub junto con instrucciones detalladas README.

En la primera parte, configuramos todos los servicios que necesitamos para nuestra aplicación, incluyendo:

    • Couchbase Capella
    • API de mensajes de Vonage
    • API de incrustación de OpenAI

La IA en acción: Mejorar y no sustituir puestos de trabajo

También hemos creado el backend de nuestra aplicación con Ruby on Rails. Ahora, vamos a escribir el código que va a conectar estos tres servicios y unirlos para apoyar el trabajo de los agentes de atención al cliente que responden a las consultas de los usuarios a través de WhatsApp.

En primer lugar, vamos a definir la lógica de negocio de nuestra aplicación.

Definición de la lógica empresarial de la aplicación

Una de las cosas bonitas de Ruby on Rails es su noción de convención sobre configuración. Esto significa que no necesitamos reinventar la rueda para saber dónde poner la lógica de negocio de nuestra aplicación. Lo que construyamos ahora será una versión simplificada. No mostraremos todo el código de la aplicación en este tutorial, pero como mencionamos al principio, todo el código base está disponible para clonar localmente en GitHub.

En resumen, definiremos nuestra lógica en archivos de modelo y controlador. 

La aplicación tendrá tres modelos:

    • Billete
    • Usuario
    • Agente

La aplicación también tendrá dos controladores:

    • Controlador de mensajes
    • Controlador del salpicadero

Otras partes de la aplicación que necesitarán ser configuradas incluyen los inicializadores de Vonage, OpenAI y Couchbase en config/inicializadoresy las rutas para la aplicación en config/rutas.rb. Todos ellos pueden consultarse en GitHub y copiarse directamente desde allí a su propia base de código.

Empecemos por los modelos.

Crear modelos

Es cierto que clásicamente Rails funciona con bases de datos SQL nada más sacarlo de la caja. ¿Y si queremos combinar lo mejor de Rails con lo mejor de una base de datos de documentos JSON como Couchbase? Ahora es posible hacerlo de una forma ágil gracias al ORM Ruby de Couchbase que pone a nuestra disposición gran parte de la funcionalidad ActiveRecord de Rails para trabajar con Couchbase. Cada uno de nuestros modelos heredará de CouchbaseOrm::Base para poner a su disposición los métodos del ORM.

El modelo Ticket

Un ticket de la aplicación debe contener información sobre la consulta, su estado actual, quién la ha realizado, el resumen de la resolución final y el vector de dicha resolución. Podemos definir cada uno de ellos como atributos:

Como puedes ver arriba, también definimos dos constantes, ABIERTO y RESUELTO, que son los dos posibles estados en los que puede encontrarse un ticket. También creamos la relación de un ticket con un usuario y con un agente, opcionalmente.

Además de definir los atributos, también queremos crear algunos métodos en el ticket a los que se pueda acceder en nuestra aplicación. Queremos crear métodos de ayuda que se pueden utilizar para comprobar el estado de un billete como tal:

En conjunto, el modelo Ticket tendrá el siguiente aspecto, incluidas las validaciones adicionales:

Hagamos lo mismo con el modelo de usuario.

El modelo de usuario

Un usuario de la aplicación debe poder tener varios tickets, ya que es posible que un cliente tenga varios problemas para los que busca ayuda. 

También queremos asegurarnos de que podemos encontrar fácilmente un usuario por su número de WhatsApp, por lo que crearemos un método helper en el modelo para eso también. En este método de ayuda, un usuario será encontrado por su número, o si no, entonces se creará un nuevo usuario y una parte de su número se utilizará para rellenar el campo de nombre.

El último modelo que vamos a crear es el modelo de Agente, vamos a hacerlo.

El modelo de agente

En muchos sentidos, el modelo de Agente es paralelo al modelo de Usuario en el sentido de que ambos tienen muchos tickets. Una diferencia clave es que el agente no usa su propio número de WhatsApp para comunicarse en la aplicación. En su lugar, se comunica con los usuarios a través del panel de control de la aplicación y la API de mensajes de Vonage envía mediante programación sus mensajes a la bandeja de entrada de WhatsApp del usuario.

En este punto, hemos creado nuestros modelos. No es el momento de definir los controladores.

Crear controladores

La aplicación tendrá dos controladores que definen lo que sucede dentro de cada ruta del sitio. A saber, un controlador dashboard_controller que supervisa la funcionalidad del Cuadro de mandos, y un controlador_de_mensajes que supervisa la funcionalidad de mensajería.

Empezaremos por el panel de control.

El controlador del salpicadero

En índice y Mostrar se definirán en el controlador del cuadro de mandos, junto con métodos de ayuda para obtener la similitud vectorial de los tickets resueltos previamente para los agentes de soporte en su trabajo con los tickets actuales. 

El SDK Ruby de Couchbase incluye muchas abstracciones útiles para hacer más ágil la interacción con la funcionalidad de Couchbase. Esto incluye la creación de una nueva búsqueda vectorial usando Couchbase::VectorSearch.new definiendo los argumentos dentro de la instanciación de un nuevo VectorSearch objeto como tal:

En primer lugar, el VectorSearch se envuelve dentro de una nueva instancia de Couchbase::PeticiónDeBúsquedacomo el VectorSearch es un tipo de solicitud de búsqueda. A continuación, una nueva Couchbase::VectorQuery se pasa a la instancia VectorSearch especificando el campo en el que se va a buscar (por ejemplo, incrustación) y la consulta del cliente convertida en su propia incrustación como segundo argumento.

Con esto en mente sobre cómo crear una búsqueda vectorial usando el SDK de Ruby echemos un vistazo al código completo del controlador del dashboard:

Con ese código, hemos definido la lógica funcional tanto para la vista principal del cuadro de mandos como para la vista de cada ticket individual en el cuadro de mandos. 

El código del frontend se encuentra en GitHub para ambas vistas y puede copiarse directamente en su código base o editarse para sus necesidades específicas.

El controlador de mensajes

Ahora necesitamos definir la lógica para todos los mensajes que serán recibidos y enviados a través de la aplicación vía WhatsApp. El controlador de mensajes también será responsable de garantizar que se creen nuevas entradas y usuarios cuando un usuario envíe un mensaje por primera vez. 

Es posible que en una iteración posterior de la aplicación parte de esta funcionalidad pueda ser movida y separada a diferentes áreas en el código base, pero por simplicidad lo mantendremos todo en el controlador de mensajes por ahora.

Uno de los grandes aspectos de Rails es la capacidad de inyectar dinámicamente nuevo contenido en la ventana del navegador sin necesidad de utilizar JavaScript. Esto se consigue con ActionCableuna característica central de Rails. También utilizaremos ActionCable para actualizar la vista de ticket individual del panel de control con los últimos mensajes enviados y recibidos con la API de mensajes de Vonage.

Como se menciona en el Uso de la API de mensajes de Vonage para fines de desarrollo, estamos construyendo con la API sandbox, por lo que nuestra llamada a la API para enviar mensajes se construirá manualmente como una solicitud HTTP POST. Una vez que hayas completado los pasos necesarios descritos en la documentación de Vonage para obtener una cuenta empresarial Meta WhatsApp, puedes utilizar el SDK Ruby de Vonage para abstraer estas solicitudes HTTP por ti.

Aquí está el código para el controlador:

Con la creación del controlador de mensajes, hemos definido casi toda la funcionalidad que necesitamos en nuestra aplicación. 

Todo lo que aún esté intentando averiguar está disponible en la aplicación de ejemplo, totalmente completa y operativa, en GitHub.

Ahora sólo nos queda ejecutar nuestra aplicación. 

Ejecutar la aplicación

Para utilizar la aplicación, abra una ventana de terminal y ejecute bin/dev dentro de la carpeta de la aplicación. Esto iniciará un entorno de desarrollo de la aplicación. Ahora, en una ventana de terminal separada, inicia ngrok, si estás usando ngrok como se describió anteriormente para hacer tu entorno localhost accesible externamente, ejecutando ngrok http 3000

Una vez realizados ambos comandos, puedes abrir en tu navegador http://localhost:3000. Verá un tablero de mandos vacío sin entradas. Eso es porque aún no ha creado ninguna.

Continúa y envía un mensaje al número de WhatsApp que se te proporcionó en tu sandbox de la API de mensajes de Vonage. La aplicación responderá pidiéndote que expliques tu pregunta de soporte. Una vez que lo hagas, el panel de tu navegador se completará con el nuevo ticket. Luego, puedes abrir el ticket haciendo clic en Ver y empezar a interactuar con él.

Una vez que empiece a tener tickets marcados como resueltos, los tickets futuros se rellenarán con un Soluciones propuestas como puede ver en la captura de pantalla anterior. Cada solución sugerida se clasificará por su similitud con la pregunta de soporte actual. 

De este modo, hemos creado una aplicación que utiliza la IA para capacitar a los miembros del equipo en su trabajo y no pretende sustituirlos en sus tareas.

Conclusión

Mediante la integración de Couchbase, Vonage y OpenAI, hemos creado una aplicación que permite a los agentes acceder rápidamente a la información relevante, mejorando su eficiencia y permitiéndoles centrarse en ofrecer un excelente servicio al cliente. Este proyecto muestra cómo se puede aprovechar la tecnología para apoyar y elevar las funciones humanas en el lugar de trabajo, lo que lleva a mejores resultados tanto para los empleados como para los clientes. Ahora que has visto el potencial, es hora de aplicar estos conceptos a tus propios proyectos y seguir innovando.



Autor

Publicado por Ben Greenberg, Desarrollador Evangelista Senior

Dejar una respuesta