Chatbot para e-commerce con Dialogflow

Rodrigo Beceiro
9 min readSep 3, 2018

--

Supongamos que tenemos una tienda de e-commerce y queremos construir un chatbot para ahorrarnos trabajo de atención al cliente. Como en cualquier tienda de e-commerce, nuestros usuarios pueden comprar items pero también pueden querer realizar otras acciones como consultar el estado de la orden ya que compraron una remera la semana pasada pero aún no ha llegado el pedido.

Éstas son tareas que nos gustaría automatizar para ahorrar tiempo de nuestro equipo de soporte por lo que construiremos un chatbot para ello.

Dialogflow

Utilizaremos la plataforma de Google Dialogflow para ello. Se puede realizar con otras plataformas como IBM Watson, Microsoft LUIS o Facebook Wit pero seleccionamos esta ya que tiene algunas ventajas que veremos más adelante. Es una de las opciones que mayor flexibilidad brinda a los desarrolladores.

Como la mayoría de las plataformas, tiene una capa gratuita y luego se paga por uso.

Creando el chatbot

Primero que nada, deberemos darnos de alta en Dialogflow y crear un nuevo Agente (así le llaman a un chatbot):

Crear Agente

En este tutorial, llamaremos a nuestro agente TutorialChatbot. En este punto también seleccionaremos un idioma por defecto para nuestro chatbot (luego veremos que se pueden soportar varios idiomas). El ejemplo estará en inglés ya que en ese idioma tiene algunas funcionalidades más avanzadas pero no tendrás problema para seguir el tutorial en español.

Seleccionar nombre e idioma

Comprendiendo al usuario: Intents

Un usuario puede comenzar la conversación con un chatbot diciendo “Quiero saber el estado de la orden con ID 12345” pero ésto no es lo más frecuente. Probablemente, el usuario simplemente comience la conversación diciendo “Hola” y buscaremos que el chatbot le devuelva el saludo.

¿Cómo funciona un chatbot? Todo lo que el usuario dice es analizado por un servicio de Procesamiento del Lenguaje Natural (NLP por sus siglas en inglés) para extraer la intención o Intent del usuario. Se puede ver de la siguiente forma:

En este caso, Dialogflow (nuestro proveedor de NLP) será quien se encargue de inferir la intención del usuario a partir del mensaje del mismo.

Podemos detectar intenciones casuales como ‘saludo’ y ‘despedida’ u otras intenciones de negocio como ‘consultar el estado de una orden’. Todos deben ser enseñados al chatbot y con Dialogflow podemos hacer eso haciendo clic en el botón “Create Intent”:

Crear Intent

Precisamos indicar un nombre (descriptivo en lo posible) para nuestro intent. No olvidar de presionar ‘Guardar’ o ‘Save’ luego de hacer cualquier cambio en Dialogflow:

Intent Saludo o Greeting

Lo genial de los chatbots es que si les enseñamos unas pocas formas de decir lo mismo, podrá generalizar el conocimiento y así reconocer nuevas formas de decirlo. Para enseñarle a nuestro chatbot simplemente debemos agregar Training phrases. Una training phrase es un ejemplo de lo que el usuario podría decir cuando intente realizar una acción concreta. Son también llamadas Utterances en otras plataformas. Por ejemplo: “hola”, “buen día”, “buenas tardes” son formas distintas en las que un usuario puede saludar al chatbot.

Training phrases

Testing del progreso

Vamos a queres probar de alguna forma lo que le hemos enseñado al chatbot hasta el momento. Dialogflow nos ofrece una pestaña “Try it now” a la derecha donde podemos interactuar con el chatbot. Simplemente escribe lo que desees ahí para probar al chatbot pero ten en cuenta que debes esperar a que termine el entrenamiento antes de probar o de otra forma los últimos cambios podrían no tomarse en cuenta.

Try it now

Si escribimos algo como “Hola” veremos que detecta el intent ‘Saludo’.

Testing intents

Bien, progresamos pero aún debemos enseñarle a nuestro chatbot a consultar el estado de una orden. Haremos esto creando otro intent (‘CheckOrderStatus’) y agregandole las training phrases correspondientes. Podemos agregar frases como:

  • ¿Cuál es el estado de mi orden?
  • ¿Cuándo llegará mi orden?
  • ¿Qué le pasó a mi compra?
  • ¿Cuándo va a llegar el producto que compré?
  • Hice una compra pero no me llegó el pedido todavía

Obteniendo más información: Entities

Ahora que nuestro chatbot comprende cuando el usuario le pregunta por el estado de una orden debemos saber a qué orden se refiere. Para ello usaremos lo que se llama Entity. Esto es una forma de extraer el valor de un parámetro a partir de lo que dice el usuario. En este caso, ese parámetro es el ID de la orden.

Podemos volver al intent ‘CheckOrderStatus’ y agregar training phrases donde el usuario nos indique el ID:

Training phrases con entities

Dialogflow automáticamente detectará cualquier input numérico y lo seleccionará como se ve debajo. Simplemente debemos indicar el nombre del parámetro para que sea tratado como un entity. En nuestro caso pondremos OrderID. Ahora hemos creado un nuevo parámetro usando un entity del sistema. Podríamos agregar otro tipo de entities personalizados pero esto será suficiente por ahora.

Entities del sistema

Todos los entities que se relacionen con un intent se podrán ver en la sección de ‘Action and parameters’ dentro del intent en Dialogflow. La relación se establece cuando se usa un intent en una training phrase.

Action and parameters

Podemos utilizar parámetros requeridos o no requeridos. Por ejemplo, el identificador de la orden es un parámetro requerido porque no podremos contestar al usuario el estado si no sabemos de qué orden nos está hablando. Sin embargo, si estuviésemos construyendo un chatbot para buscar en un catálogo, los parámetros de búsqueda podrían ser opcionales (si estoy buscando autos, puedo querer o no filtrar por la marca del mismo). Cuando marcamos un parámetro como requerido, necesitamos definir preguntas para solicitarlo (prompt questions) en caso de que el usuario no nos provea de la información en su primera interacción.

En Dialogflow podemos hacer eso haciendo clic en ‘Define prompts’ a la derecha del parámetro seleccionado.

Recomendación: Es una buena práctica agregar varias formas de preguntar lo mismo ya que en una conversación natural los humanos no siempre usamos las mismas exactas palabras para decir lo mismo y queremos que hablar con el chatbot sea lo más natural posible para nuestros usuarios.

Prompts

Definiendo respuestas

Una vez que detectamos el intent y todos los inputs necesarios usando entities, debemos definir una respuesta. Podemos hacer esto en la sección ‘Responses’ del intent. Podemos incluso utilizar en la respuesta parámetros que el usuario haya completado (puedes escribir $ y aparecerán los parámetros que tengas disponibles).

Respuestas

Testing del progreso

Una vez más, querremos probar el avance. Ahora podemos preguntar por el status de una orden y verificar que el intent se detecta correctamente.

Testing

Seremos preguntados por el order ID en case de que no hayamos especificado uno.

Testing

También funciona sin la necesidad de la re-pregunta del chatbot. Piensa lo molesto que sería si le escribiéramos al chatbot “Quiero saber el estado de la orden ID 12345” y él nos contestara: “Claro, ¿de qué orden quieres saber el estado?”.

Testing

Interactuando con el mundo: Fulfillment

Una vez que ya tenemos la información del número de orden, necesitamos conectar a nuestro chatbot con el resto de nuestro sistema de forma tal que pueda contestar un estado actualizado de la orden. Haremos esto utilizando el Fulfillment de Dialogflow. El fulfillment permite hacer un request a un endpoint antes de formular la respuesta al usuario, pudiendo generar la respuesta en el propio request.

Comenzaremos por habilitar el fulfillment para este intent:

Fulfillment

Debemos también ir a la sección de Fulfillment en el menú a la izquierda. Ahí podremos especificar un Webhook y así conectarlo con la API de nuestro sistema o podemos usar en ‘Inline Editor’, usando Node y Firebase para generar un endpoint. En este tutorial cubriremos el inline editor pero puedes hacerlo como prefieras:

Setup del Fulfillment

Comenzaremos por agregar una función para invocar cuando se detecte el intent. Para este tutorial simplemente contestaremos que estamos revisando el estado de la orden pero aquí es donde tu lo puedes hacer interactuar con tu sistema, es decir, agregar tu propia lógica de negocios.

Función para manejar el intent

También deberemos mapear el intent con la función que acabamos de crear. Lo podemos lograr agregando el nombre del intent en el intentMap definido en el código previsto por el propio Dialogflow.

Mapeo de la función

En este punto, si probamos nuestro chatbot podremos ver que se contesta al usuario la respuesta definida en el Inline Editor. Cuando se habilita el Fulfillment para un intent, se sobreescribe cualquier respuesta definida en el propio intent (salvo que ocurra un error en el request).

Recomendación: Es una buena práctica definir una respuesta de fallback en caso de que nuestra API tenga un error.

Testing del progreso

Ventajas de Dialogflow

Integraciones

Uno de los puntos fuertes de Dialogflow es la cantidad de integraciones que posee con distintas plataformas. No solo tiene diversas integraciones sino que además es sencillo habilitar una nueva. Se pueden explorar las mismas en la sección de ‘Integrations’ e incluye Slack, Telegram, Facebook Messenger, Viber, Skype y más.

Rich messages

Otra ventaja de Dialogflow es la customización que se puede hacer utilizando mensajes ricos o Rich messages para las diferentes plataformas. Cubriremos los mismos en otro post pero te recomiendo investigarlos ya que mejoran la experiencia del usuario.

Small Talk

A su vez, también se cuenta con la posibilidad de agregar diálogos de Small Talk. Estos son los intents casuales que mencionamos previamente. Esto simplifica nuestro trabajo, nos ahorra el entrenamiento y también mejora la experiencia del usuario.

Agentes pre-entrenados

Otra de las ventajas de Dialogflow son los Prebuilt Agents o agentes pre-entrenados. Esto son agentes ya entrenados en determinados dominios y nos proveen un excelente punto de partida para resolver problemas específicos aunque luego debemos personalizarlos para satisfacer las necesidades de nuestro negocio. Existen agentes pre-entrenados para aplicaciones bancarias, atención al cliente, manejo de alarmas y más. Este es uno de los atributos más recientes y aún no todos los agentes están disponibles en todos los idiomas. En inglés es donde hay mayor variedad de agentes disponibles.

Múltiples idiomas

Dialogflow es una de las mejores plataformas para manejar un único chatbot o agente para diferentes idiomas. Incluso nos permite localizar los diálogos (adaptarlos a una región en particular como por ejemplo español de México o de España). En caso de que quieras agregar un nuevo idioma a partir de un agente ya entrenado, simplemente agregas el idioma y se copiarán todos los intents y entities definidos. Solo faltará agregar las nuevas training phrases. En otras plataformas esto no es posible y hay que crear un nuevo agente o chatbot desde cero, haciendo a su vez más difícil el mantenimiento.

Recién comenzando

Hemos creado un chatbot que puede consultar el estado de una orden de compra de un usuario en nuestro sistema. Pudimos hacer eso gracias a la opción de Fulfillment que tiene Dialogflow.

Es solo el primer paso pero esta aplicación tiene un gran potencial. En nuevos posts trateremos de cubrir más casos interesantes para que puedas construir tu propio chatbot.

--

--