Cargando...

Creando un Chatbot en Google Cloud

Dialogflow es un servicio que forma parte del ambiente de Google Cloud, que permite crear chatbots de una forma rápida y sencilla.

En este post, sin entrar en mayor detalle del funcionamiento, voy a crear una pequeña guía de inicio con los conceptos basicos para poder levantar un servicio que pregunte a una instalación de Magento, por los productos que el cliente está buscando ya sea con color o no.

Para ello, voy a levantar un servicio en NodeJs que reciba el producto y color que se busca. Así que voy a levantar una nueva Virtual Machine en Goolge Cloud, utilizando su capa gratuita con una instancia f1-micro.


Con la nueva instancia basada en Ubuntu y después de instalar NodeJs, pude iniciar un nuevo proyecto con npm e incluir los modulos necesarios para la ejecución:

  • body-parser se encargará de poder intrerpretar la petición que Dialogflow va a consumir con la pregunta del usuario
  • axios hará el consumo de la API Rest que Magento suele incluir con su plataforma
  • express me ayudará a crear los endpoints que estarán disponibles para el chatbot
  • ngrok va a permitir que se exponga el puerto interno en que express se ejecuta por una ssl, que es requerido para cualquier integración con una API externa

Ahora, desde Dialogflow, preparo lo necesario para que el cliente pueda buscar los productos. El objetivo es identificar frases como:

  • tienen vestidos negros?
  • hay bolsas?

Es decir, que dentro de sus preguntas, el usuario incluya tanto el producto como el posible color a buscar.

Dialogflow consume cualquier API REST mediante un método POST, que envía los parametros de la busqueda. Esta parametrización de datos, se consigue con algo llamado Entities, que permite identificar que cuando ciertas palabras se incluyen en el enunciado, se pueda marcar como un parámetro.

Existen dos tipos de Entities: customizadas y de sistema. En el caso de colores, sys.color contiene una lista previa que el propio Dialogflow ha aprendido a identificar.

En el caso de los productos, es necesario crear una lista de los posibles valores, para este ejemplo, al servicio le resultará igual si se escribe vestido o vestidos, por lo que aprovecho las ventajas que da el usar Synonyms y el Fuzzy Match para una aproximación al valor, por ejemplo al escribir bosas por error en vez de bolsas.

Chatbot Entities

 Teniendo la forma de identificar los parametros que necesito en el servicio, hay que decirle a Dialogflow como conseguirlos dentro de las frases que el cliente escribirá, esto se traduce a Intents, donde con frases de entrenamiento, le decimos al chat donde encontrar esos valores.


Ahora que el chatbot enviará los parámetros de busqueda en las variables productos y color, puedo construir el script que lo atienda, primero creando un punto de anclaje que responda mediante POST.

Chatbot Axios

 Pudiendo armar la URL para consumir la API REST de magento para encontrar si existen resultados según la combinación de producto/color que se ha preguntado desde el chat.Para poder responder, en formato JSON, la respuesta que el usuario verá en el chat, pasando el valor de fulfillmentText.

Chatbot Response

 Como el script debe seguir en ejecución aún después de cerrar mi terminal, debo ejecutarlo en segundo plano, pasando la salida del script a un archivo de log para poder obtener la URL que ngrok asignará para el redirect de SSL.


Ahora que el servicio está listo para recibir las peticiones desde el chatbot, utilizo la sección de Fulfillment del Entity, para que sepa que la respuesta depende de una petición externa, y desde la sección Fulfillment del chatbot, habilito el webhook y capturo la dirección del endpoint que dará las respuestas.


Así,cuando el cliente pregunta 'tienen vestidos verdes?', el chatbot identificará que se cumple con el Intent de Productos.

Chatbot Test1

 Y confirmo, que se ejecutó el Webhook, pasando los parametros al servicio.

Chatbot Test2

 Así, ocupando una arquitectura completamente integrada en Google Cloud, ahora cuento con un chatbot que puede ir creciendo para servir como un agente de venta ya sea desde un elemento que sea parte de un sitio web, o mediante el Google Asistant para aplicar la capa de voz desde el smarphone o el Google Home.