Chatbot para e-commerce con Dialogflow
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.
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):
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.
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”:
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:
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.
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.
Si escribimos algo como “Hola” veremos que detecta el intent ‘Saludo’.
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:
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.
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.
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.
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).
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.
Seremos preguntados por el order ID en case de que no hayamos especificado uno.
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?”.
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:
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:
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.
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.
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.
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.