Arquitectura de un chatbot
Hace días expliqué el alcance de un chatbot para una marca y la conexión que tiene con los usuarios finales. Ahora es tiempo de definir una estructura para empezar a hacer nuestros chatbots.
Primero lo que debemos de entender es que se pueden desarrollar en diferentes lenguajes de programación o en plataformas ya construidas. Aunque se pueden hacer chatbots en plataformas como Chatfuel o Botsifly, lo importante es que entendamos como se tiene que desarrollar y ver la flexibilidad de hacer soluciones mas precisas.
En lenguajes de programación se puede usar desde Java, Python, NodeJS, PHP, etc. La idea es tener un endpoint web para que reciba la información que proviene de la plataformas como Facebook, Slack, Telegram.
Con mi experiencia en Messenger Facebook se puede definir la arquitectura siguiente:
Claramente se definen capas para la presentación o comunicación con la API de Facebook, la capa de lógica de negocio y una capa final para el acceso a los datos de cualquier repositorio.
Presenters
Esta capa solo esta encargada en hacer las llamadas a Messenger para que pinte un texto, botón, imagen o video.
Flow
Este bloque solo ejecuta las operaciones y la lógica de negocio del bot, utiliza los repositorios para guardar información e interactúa con servicios web.
Quick Replies
Controla los quick replies que llegan desde Messenger y puede hacer uso de funciones declaradas en Flow.
Postbacks
Obtiene las respuestas de los postbacks para utilizar el módulo de Flow o los repositorios.
Repositories
Esta capa contiene las operaciones mas comunes para acceder a los datos desde nuestra base de datos o servicios web usando los modelos declarados.
Models
Son las entidades declaradas de nuestro chatbot, normalmente están definidas con los atributos que contiene y validaciones correspondientes a cada uno.
Diagrama Lógico
El siguiente diagrama muestra la interacción de las capas de la arquitectura.
La lógica inicia al recibir una petición POST a nuestro webhook es la siguiente:
- Inicia el flujo en Start en la capa de Presenter
- Valida el contexto del usuario en una base de datos o en cache
- Carga copies de servicios web o archivos JSON
- Procesa la petición definida en la lógica de negocio
- Regresa al Presenter y llama al API de Facebook para mostrar una respuesta
Ya descrita la arquitectura y como interactúan con las capas no importa en que lenguaje de programación se implemente, la idea es tener las nociones para poder manejar las respuestas que nos proporciona la API de Facebook.
Para nuestro próximo capitulo vamos a hacer un chatbot sencillo usando NodeJS para mostrar las ventajas de usar la versión estable 8.9.1.