Construyendo chatbots, ¿por dónde empezar?

Los chatbots son servicios que permiten al usuario comunicarse con nuestro sistema a través de interfaces, generalmente de introducción de texto o voz, pero podríamos encontrarlos de cualquier otra forma de comunicación: lenguaje de signos, pictográfico, gestos, etc... Están basados en reglas y a veces se apoyan en un motor conversacional.

La finalidad de un chatbot siempre es la misma: darle información a un usuario o darle la posibilidad de interactuar con nuestro sistema. Para cualquiera de ellas, la principal tarea del chatbot es conseguir la información necesaria del usuario para atender a su petición correctamente. Una vez tengamos la información, podremos usarla para recuperar una respuesta a través de servicios propios o de terceros.

A la hora de plantear un chatbot, una de las decisiones más importantes es resolver cómo el chatbot va a interactuar con el usuario para entender su necesidad y responder acorde a ella. Actualmente, las dos maneras más usadas de interacción son:

  • las interfaces propias de cada servicio de chat (telegram, FB Messenger, Slack…).
  • la entrada de texto o voz que debe estar soportada con algún motor conversacional.

Ambas se pueden usar por separado o combinarlas para ofrecer una experiencia más completa al usuario.

¿Qué tipos de chatbots podemos encontrar?

Atendiendo a lo anterior, podemos separar los chatbots en dos grandes grupos: los basados en reglas y los basados motores conversacionales (MC).

Chatbot basados en reglas

  • Más limitados y capaces de construir flujos sencillos donde el input de los usuarios sea directo.
  • Si el usuario se sale del guión el chatbot no sabrá responder, reconocer errores o reconducir al usuario.
  • Son “tan inteligentes” como el programador haya sido al programarlo.

Estos bots suelen usar las interfaces disponibles en el servicio de chat para el que hayan sido diseñados. Cada una de las plataformas de mensajes ofrece un API personalizado para poder interactuar con los usuarios. Los elementos de interfaz que ofrecen son bastante limitados (básicamente botones, imágenes, selector de opciones y comandos personalizados en texto).

A través de estos elementos se pueden conseguir flujos de interacción bastante sencillos y muy potentes para obtener información concreta, por su sencillez y rapidez. Normalmente, los flujos se presentan con una sucesión de preguntas directas al usuario con varias opciones (botones) que presentan las posibles respuestas permitiendo, también, la introducción de texto como posible respuesta del usuario.

Otro elemento muy utilizado son los comandos directos que el usuario puede escribir con un formato concreto y definido. Esta forma de recoger el input del usuario también puede resultar muy potente, aunque suele reservarse para usuarios algo avanzados.

La mayoría de estas interfaces admiten, además, comunicarte con ellas a través de ficheros adjuntos que son capaces de interpretar. Localizaciones, imágenes y vídeos son los más comunes. Estos adjuntos también se pueden usar para devolver información al usuario, enviándole un archivo multimedia o una localización como respuesta.

Atendiendo a las herramientas que nos ofrecen estas interfaces, lo más complicado es conseguir que el usuario siga correctamente los flujos definidos y la dificultad de mantener un contexto completo de toda la interacción para seguir escenarios dinámicos.

Chatbots basados en Motores Conversacionales

  • Interactúan en un lenguaje natural para conseguir información del usuario.
  • Posibilidad de construir flujos complicados de interacción.
  • Capaces de reconducir al usuario al punto necesario de la conversación.
  • Muy potentes usando la voz.

Los bots conversacionales son aquellos capaces de interactuar con los usuarios a través de flujos de conversaciones, ya sean escritas o habladas. Estos bots utilizan un API de un motor conversacional, normalmente alimentado por algún tipo de tecnología de Machine Learning.

Estas APIs se basan en ir definiendo escenarios donde vas dirigiendo al usuario a través de la conversación. De cada escenario vas extrayendo información en variables que son guardadas en el contexto para ser utilizadas más adelante o para seguir segmentando los resultados, dirigiendo así al usuario por distintos escenarios, dependiendo de la información que ya nos han dado.

 

La potencia de estas herramientas reside en la capacidad del motor para decidir qué escenarios ir usando dependiendo de la información en el contexto y los inputs de los usuarios. Además, es más fácil seguir flujos dinámicos o dirigir al usuario a un escenario concreto si se sale del guión.

Algunas de las APIs disponibles como servicio ofrecen paquetes enteros de funcionalidades para el bot. Desde “charla ligera” para que el bot sea capaz de mantener una conversación “de ascensor” a paquetes de geolocalización, información meteorológica o búsqueda web. Con solo activar (previo pago) alguno de esos paquetes, nuestro bot obtiene la capacidad de responder ese tipo de interacciones (la mayoría totalmente configurables).

En cualquier momento, el MC puede hacer llamadas a un servidor externo enviándole el contexto para que desde el servidor se pueda obtener datos de cualquier otro API o calcularlos, para responder al usuario con la información que esté solicitando atendiendo a la información que ya hemos conseguido en el resto del contexto de la conversación.

Como último punto fuerte, podríamos resaltar que las interfaces para trabajar con estos motores conversacionales están bastante trabajadas y no son necesarios conocimientos de programación para construir flujos potentes de interacción con los usuarios. Destacar que en los servicios que hemos escogido para nuestro estudio, wit.ai y api.ai, se presentan los mismos conceptos y estructuras y, además, cuentan con unas apis bien documentadas.

Utilizar un motor conversacional permite construir escenarios más complejos para recoger la información y es posible desarrollar una conversación racional que resulte natural para el usuario.

La arquitectura de un chatbot

A la hora de analizar una arquitectura para montar un chatbot, es muy importante plantear cuál va a ser la pieza que reciba las peticiones directas del cliente. Disponemos de dos opciones: levantar los servicios en nuestro propio servidor o utilizar los de un tercero que ofrezca el MC.

Nuestro servidor

Si no vamos a hacer uso de un MC, podemos alojar el chatbot en cualquier servidor. No es más que un servidor HTTP que acepte peticiones de los clientes.

Motor Conversacional -> Nuestro servidor

Todo el flujo de la conversación se plantea a través del MC. El servicio recibe directamente las peticiones del usuario y decide cuándo debe pasar la petición (con todo su contexto) a nuestro servidor. Si vamos a usar un servicio de terceros, es importante pensar si queremos atarnos a él, ya que si queremos cambiarnos a otro más adelante podría ser complicado.

Este planteamiento puede facilitar el desarrollo ya que no tendremos que interactuar con el API del MC, únicamente tenemos que tener un endpoint que reciba las peticiones que el MC decida enviarnos para devolverle la información que haya que enviar al usuario.

Nuestro servidor -> Motor Conversacional

Los MC suelen exponer un API para interactuar con ello. Podemos recibir las peticiones del cliente directamente al servidor y ser nosotros los que interactuamos con el API del MC para pasarle la conversación y recibir la respuesta.

Este planteamiento nos da mucha más libertad ya que somos nosotros los que controlamos, en todo momento, la petición del usuario y podemos decidir si enviarla o no al MC. Sin embargo, este añade la dificultad de tener que interactuar con sus APIs.

Serverless Architecture

Dada la naturaleza del servicio, la opción de Serverless Architecture es muy viable. Podemos sustituir nuestro servidor por un servicio serverless sin mucho esfuerzo y aprovechar todas las ventajas que ofrece una arquitectura de estas características. La ventaja de estos servicios es que nos permiten abstraernos de la capa servidor, garantizándonos una alta disponibilidad de una manera fiable. Tenemos a nuestra disposición cada vez más frameworks y alternativas para trabajar con arquitecturas serverless y ofrecen un potencial impresionante.

Hay varias buenas opciones donde escoger, hemos probado AWS con sus servicios de AWS Lambda y AWS API Gateway. Las impresiones han sido muy buenas y no resulta complicado ponerlo en marcha, menos aún si usamos alguna librería como claudia-bot-builder (& claudiajs) que nos facilita todas la tareas de versionado, actualización y despliegue con varios comandos de consola (muy útil también para sistemas integración continua)

Conclusión

Las herramientas y ecosistema que existen alrededor de los chatbots son muy potentes y ofrecen muchas facilidades para crearlos. Ya sean basados en reglas o soportados por un motor conversacional, es fácil crear un chatbot sencillo. Obviamente cuanta más funcionalidad queramos añadir, las cosas se irán complicando rápidamente.

Los dos servicios conversacionales que hemos probado eran muy similares en conceptos y con interfaces también parecidas. Característica inherente a nuestro campo de innovación tecnológica: los primeros pasos son muy sencillos de asimilar y de ejecutar, pero a medida que profundizamos en la materia, la complejidad crece exponencialmente y requiere de un análisis más detenido para poder construir algo fiable y robusto.

Dado que la función principal es la de interactuar con los usuarios de una manera natural y sobre todo sencilla, cuanto más sencillo se planteen las interacciones mejor. ¿Por qué usar un sistema conversacional para hablar con mis usuarios si sólo necesito preguntarle 4 datos concretos para darle la información que necesita? Es mucho más sencillo, para un usuario, responder a preguntas concretas y, a ser posible, con opciones claras que empezar una conversación para recabar esos datos.

Eso sí, si lo que necesitas es que tus usuarios interactúen contigo mediante una conversación ya sea escrita o hablada, ya sea por la complejidad de los escenarios o las necesidades del servicio, la actualidad en este tipo de motores conversacionales es bastante potente y tienen un atractivo único para nuestros usuarios, ya que pueden mantener una conversación natural con el chatbot para conseguir la interacción con el sistema.

En este repo podéis ver algo de código sencillo con uno de los chatbots que desarrollamos durante el estudio: https://github.com/alejandrogr/bankSearchBot

Alejandro González Intelygenz

 

¿Estás buscando partner tecnológico?