blog

Un canal efectivo y explosivo de comunicación 2.0: Chatbots + WhatsApp Business

En la actualidad, las comunicaciones son un elemento detonante y diferenciador de empresas que están en la onda 2.0, es decir, empresas que buscan a diario la constante mejora, la conversión de sus visitantes en potenciales clientes, brindar una experiencia de usuario inigualable que haga sentir a ese gran desconocido que nos visita como en casa y, como no, pisar fuerte en el mundo digitalizado que vivimos. Hoy queremos hablar de cómo integrar chatbots y Whatsapp Business en la estrategia de una empresa además de realizar una breve introducción al desarrollo de chatbots con RASA.

¿Qué es la comunicación 2.0?

La comunicación 2.0 ha revolucionado la forma tradicional de comunicarnos (SMS, correo electrónico, verbal, etc.) llevando a ciertos canales al abandono o al desuso, y haciendo crecer las RRSS (redes sociales) que popularmente se han ido expandiendo.

Según varios estudios sobre nuestro comportamiento en la red, de media una persona tiene al menos 8 perfiles sociales, lo que se traduce casi en un 81% de participación activa en estos medios. La comunicación 2.0 nos plantea nuevas formas de ser visibles y de mostrarnos al mundo de una forma más efectiva, siendo su objetivo el lograr que la mayor cantidad de público conozca nuestros principales rasgos como persona o como empresa:

  • ¿Quiénes somos?
  • ¿Qué podemos aportar a la sociedad actual?
  • ¿Por qué somos diferentes a los demás?
  • ¿Puede nuestro mensaje ayudarte a lograr lo que deseas?

Dentro de las redes sociales existen líderes de popularidad y, en el área de mensajería instantánea tenemos como favorito imbatible a WhatsApp con un 87% de preferencia que ocupa en la actualidad la mayor cuota de mercado y concentra una gran cantidad de usuarios a nivel mundial que hacen uso diario de esta aplicación para comunicarse y realizar la mayoría de las tareas cotidianas.

¿Es WhatsApp el mejor canal de comunicación?

Son muchas las apps de mensajería instantánea que han intentado arrebatarle el primer puesto, pero en la actualidad WhatsApp es el canal de comunicación más usado a nivel mundial. En 2020 contaba con más de 2 billones de usuarios activos y con su nuevo modelo de negocio, WhatsApp Business, ofrecen un enfoque total al soporte y atención al cliente que permite a las empresas delegar y automatizar procesos haciendo uso de las nuevas tecnologías, tales como Chatbots operados por IA. Además, al contar con Facebook como principal fuente de soporte, añaden valor y confianza a las empresas que deseen implementarlo como canal de comunicación con sus clientes.

El ofrecer un servicio enfocado a empresas abre un abanico de posibilidades y nichos de mercado muy amplios a tener en cuenta, dado que existe una gran cantidad de procesos donde la IA combinada con WhatsApp Business podrían lograr automatizar diversas tareas o flujos de una empresa.

Chatbots + WhatsApp Business ¿Posible o imposible?

WhatsApp Business es una herramienta que ofrece grandes posibilidades a las empresas que quieren incorporar un nuevo canal de comunicación efectiva con sus clientes. Es importante resaltar que no se trata de una plataforma de marketing mediante mensajería, sino que está pensada para ayudar a las empresas a mejorar la experiencia de usuario, mediante la automatización de determinados procesos relacionados con el soporte o atención al cliente.

Debemos cumplir unos requisitos previos para hacer uso de la versión business de WhatsApp. Así obtendremos un acceso oficial al API y podremos empezar a comunicarnos con nuestros clientes a través de esta plataforma. Esta travesía te permitirá tener la llave maestra al nuevo «olimpo» de las comunicaciones desatendidas.

Integrando un Chatbot

Una vez hemos obtenido la mencionada llave maestra (API Key) para hacer uso de los servicios de WhatsApp Business, solo nos queda ponernos a picar el código.

Para desarrollar un chatbot utilizaremos el lenguaje Python v3.8 en un entorno UNIX (Ubuntu), como lenguaje por excelencia del área de IA, y haciendo uso del framework RASA Open Source, realizaremos el setup inicial de un bot intentando comprender el flujo y funcionamiento del framework, así como la forma en que nos ayuda en el desarrollo de nuestro nuevo amiguete virtual.

En la documentación podemos ver un breve proceso de instalación global haciendo uso del gestor de dependencias de Python conocido como pip usando los siguientes comandos:

user@ubuntu-rasa: /home/user $ pip3 install rasa

Cuando ya tenemos instalado RASA de forma global vamos a crear un nuevo directorio para nuestro proyecto que llamaremos rasa-chatbot-wa.

user@ubuntu-rasa: /home/user $ mkdir –p rasa-chatbot-wa

Entraremos al directorio antes creado para inicializar un nuevo proyecto tal que:

user@ubuntu-rasa: /home/user $ cd rasa-chatbot-wa
user@ubuntu-rasa: /home/user /rasa-chatbot-wa $ rasa init .

¡Felicidades! 🎉  Hemos logrado crear una estructura inicial de un bot con RASA ahora veremos con más detalles que son estas nuevas piezas en nuestro tablero y para qué sirven.

¿Qué es todo esto? ¿RASA? ¿Chatbot?

RASA, en su versión Open Source, se define como un framework que es capaz de proveernos a los desarrolladores, con alguna noción de IA, herramientas de procesamiento de texto o voz, que nos permiten crear interfaces donde se desarrolle una conversación entre un algoritmo (máquina) y un humano.

Implementando modelos de inteligencia artificial, en este caso NLU (Natural Language Understanding) con Tensor Flow, RASA concibe llamar a esta parte del modelo NLU y posteriormente, basados en otro modelo llamado CORE, define las posibles respuestas (utterance) que recibirá el usuario en función de la casuística o intencionalidad (intent) que tenga el mensaje del usuario hacia el bot.

Al iniciar un proyecto nuevo nos encontraremos con multitud de ficheros y directorios donde RASA almacena o lee la información de nuestros modelos de inteligencia artificial, así como el código que definirá nuestra lógica de negocio (business logic). Entre los ficheros o directorios más importantes tenemos:

domain.yml 📄

Es unos de los ficheros más importante para el framework, pues este se sirve de este fichero para crear los dos modelos separados que nombramos anteriormente y modelar gran parte del comportamiento de nuestro bot, tales como:

  • Intents: Todas las intenciones definidas en el fichero nlu.yaml por su nombre o valor clave que deben ser registradas en el modelo NLU.
  • Entities: Todas aquellas entidades que el bot debe reconocer y que basan su principal funcionamiento en reconocer de un texto organizaciones, nombres propios o fechas por ejemplo y que comúnmente se le conoce también como NER (Name Entity Recognition).
  • Slots: Son espacios de memoria usados en tiempo de ejecución por el bot para almacenar toda información relevante que ha sido extraída del texto del usuario tales como usuario, edad, contraseña, ubicación, etc. Principalmente el contenido de estos slots los define una acción, técnica o algoritmo de extracción de entidades.
  • Responses: Son las posibles respuestas que el bot retornará según cada casuística definida, suelen tener un formato estático definido o se construyen a partir de templates que obtienen sus valores calculados en tiempo de ejecución o se extraen de los slots.
  • Actions: Es una lista que define el nombre de acciones externas existentes en uno de los componentes más importantes de nuestro bot al cual llamaremos Action Server y que se suele ejecutar como un servicio REST en el puerto 5005 por defecto.

El Action Server suele ser el lugar donde vive la lógica custom que necesitamos ejecutar con el bot en función de nuestra meta, como una llamada a un API externa, rutinas de código customizadas, procesos de validación de algún formulario entre otros.

  • Forms: Son rutinas de preguntas que nuestro bot llevara a cabo en el momento que nosotros le indiquemos y sirven en conjunto con la extracción de entidades para rellenar nuestros slots, con datos relevantes que necesitemos obtener del usuario durante la conversación.

config.yml 📄

Encontraremos configuración relacionada más con el entrenamiento de los modelos CORE y NLU, básicamente definimos la interacción que nuestros datos tendrán con componentes internos o externos del framework (tokenizers, featurizers, models, policies etc.) para lograr procesar el texto que el usuario nos envía, y así extraer o no datos de interés que vengan en el mensaje que nos remite el usuario, se podría entender que es el pipeline que el mensaje atraviesa antes de obtener una respuesta por parte del bot y puede influir junto a los otros componentes en la decisión final que toma el bot para formular la respuesta adecuada.

credentials.yml 📄

Es el fichero que nos ayuda a declarar todos los canales externos como Slack, Facebook Messenger, Socket.io, Google Voice Assistant, WhatsApp que empleara el bot como interfaz de I/O así como las credenciales de acceso que le permiten al framework interactuar de forma normal con dichos servicios.

endpoints.yml 📄

Almacena principalmente credenciales de componentes directamente relacionados con infraestructura, tales como:

  • Tracker Store: Almacena eventos e historial de conversación de un usuario. Usualmente se relaciona a bases de datos SQL (PostgreSQL) o NoSQL (MongoDB).
  • Lock Store: Almacena datos de rápido acceso en memoria o base de datos y sirve para sincronizar multiples instancias de un mismo bot. Usualmente se relaciona con bases de datos en memoria como Redis.

actions 📁

En el directorio actions vive usualmente nuestra lógica de negocio (business logic) pudiéndose dividir las acciones en varios ficheros para tenerlas más organizadas, especialmente cuando empleamos llamadas a varios servicios o validamos datos que provienen de un formulario y que van a ocupar espacio en un slot para luego ser utilizados en otro momento del flujo de la conversación.

data 📁

En este directorio tenemos 3 ficheros protagonistas que podemos resumir en:

  • 📄 nlu.yml: Almacena todos los intents que nutren a nuestro modelo NLU, le permiten al bot aprender de diversos contextos y que exactamente podría estar deseando el usuario hacer o decir.
  • 📄rules.yml: Modela comportamientos rígidos de la conversación sin dar lugar a improvisaciones del bot.
  • 📄 stories.yml: En base a historias de usuario expuestas como una conversación, ayudan al modelo a ser más autónomo y tomar decisiones de forma inteligente en el transcurso de la conversación.

models 📁

Finalmente, después de un arduo trabajo afinando cada flujo y cada detalle de la conversación la CLI (Command Line Interface) de RASA mediante el comando de entrenamiento (rasa train), persiste los 2 modelos NLU y CORE en un único fichero en formato .tar.gz, que RASA, al ser iniciado, tomará el más reciente y aplicará desde ese momento a cualquier mensaje entrante de un usuario y responderá en consecuencia a partir de dicho modelo.

tests 📁

La filosofía del framework RASA se basa principalmente en un término o metodología de desarrollo que ellos acuñan como CDD (Conversational Driven Design), básicamente en este directorio se nos permite escribir una suite de test de tipo funcional que comprueba cada respuesta de nuestro bot en función de los distintos escenarios que nosotros tengamos.

Desarrollar una aplicación de cualquier índole con una suite de test sobra mencionar que es una idea excelente, dado que un software sin test es un jarrón de cristal que rompe fácil y es resiliente a cualquier cambio que necesitemos hacer en el futuro en el flujo de nuestra aplicación.

¡Hablemos con nuestra creación! 🤖

via GIPHY

Después de haber dado un gran paseo por toda la estructura de directorios y ficheros de un proyecto nuevo de RASA toca probar como se defiende nuestro nuevo bot. ¡Es hora de chatear!

Ubicados en la raíz de nuestro proyecto, ejecutaremos los siguientes comandos que a partir de hoy formaran parte de nuestra rutina de desarrollo:

user@ubuntu-rasa: /home/user/rasa-chatbot-wa $ rasa train

Esto iniciará el proceso de entrenamiento de los modelos NLU y CORE, siempre que el comando detecte que los ficheros anteriormente detallados han sufrido algún cambio importante, persistirá dichos cambios del modelo en el directorio models.

Posteriormente, iniciaremos una conversación con nuestro bot, para ello disponemos de 2 modalidades conocidas como shell e interactive. La primera nos ofrece una interacción más simplificada y la segunda nos permite ver el flujo al completo en cuanto a toma de decisiones, construcción de respuestas y ejecución de acciones en nuestro Action Server.

user@ubuntu-rasa: /home/user/rasa-chatbot-wa $ rasa shell
user@ubuntu-rasa: /home/user/rasa-chatbot-wa $ rasa interactive

Uniendo las piezas 🏁

Ha llegado el momento de unir todas las piezas del tablero y ver como se podrían llegar a entender RASA y WhatsApp Business.

En primer lugar, después de haber ahondado en toda la estructura interna del framework RASA, debemos tener claro que esto es un tira y afloja entre ambas tecnologías, básicamente se resume en entender quién genera el input hacia nuestro bot y quién se encarga de generar el output que finalmente llegará a nuestro usuario a través de un mensaje de WhatsApp.

Para partir de una base, entendamos que el input es generado por el api de WhatsApp hacia nosotros como una petición HTTP que contiene dentro una gran cantidad de datos importantes. Entre ellos tenemos ese mensaje que nuestro algoritmo de inteligencia artificial procesará para posteriormente actuar en consecuencia y proveernos de ese tan ansiado output. Para entender el funcionamiento de RASA, debemos pensar en microservicios orientados a ser una interfaz de comunicación programable (API), la cual desde sus bases provee una forma de comunicarnos con nuestro modelo de IA con el objetivo de obtener una respuesta o acción determinada que nuestro bot debe ejecutar.

La forma en la que RASA lleva a cabo esta comunicación es a través de un componente genérico denominado Channel, este define los puntos de entrada (InputChannel 🔼) y salida (OutputChannel 🔽) que posee nuestro bot para interactuar con servicios del mundo exterior, donde el input se ejecuta de forma síncrona haciendo uso del enrutador de Sanic Framework y el output de forma asíncrona usando ejecución de rutinas en background con asyncio a las que también se les conoce en ciencias computacionales como corrutinas.

Fig. 1 – Flujo RASA – WhatsApp Business

Conclusión

Si bien es cierto que a lo largo de esta breve introducción al desarrollo de chatbots con RASA, no hemos podido abordar temas que impliquen una implementación detallada de este framework, integración a detalle con el API de WhatsApp o todas las infinitas posibilidades que este tiene dado que son temas muy extensos y que un tutorial o un pequeño articulo por sí solo no resolvería en su totalidad.

Si deseas implementar WhatsApp como el nuevo canal de comunicación de tu empresa o producto y además quieres que un amiguete virtual te ayude con ello, no lo dudes, contacta con nosotros, estamos ansiosos de escuchar cómo quieres pasar de 1.0 a 2.0 en tu empresa.