Overview

Skill Level: Intermediate

Previous

A través de unos sencillos pasos se entrena un chatbot y se muestra cómo crear conexiones con una base de datos y una API. Se incluye una web app en Node.Js para darle un front-end al bot, así como el botkiit para embeberlo en Facebook o Slack.

Ingredients

Step-by-step

  1. Crear Workspace

     Crear un nuevo workspace y nombrarlo ropademoda.mx Asegurarse de seleccionar el idioma Español.

    step1

  2. Utilizar intenciones pre-entrenadas

    Las intenciones consisten en acciones que el usuario desea llevar a cabo. Crear una nueva intención dando clic en Browse content catalog. Watson Assistant cuenta con intenciones previamente entrenadas para temas genéricos. En este caso vamos a aprovechar el paquete de intenciones General, para contar con las intenciones de saludar y conocer las capacidades del bot.

    step2-1

  3. Eliminar las intenciones no utilizadas

    El paquete de intenciones que acabamos de incorporar a nuestro workspace cuenta con varias que no vamos a utilizar en el ejercicio. Si seleccionamos las casillas de las intenciones se habilitará el botón Eliminar. Únicamente utilizaremos las intenciones #General_Agent_Capabilities, #General_Greetings y #General_Human_or_Bot

    step3

     

  4. Crear una intención nueva

    En este paso se entrena a Watson con una intención desde 0. Para ello hay que dar un nombre descriptivo a la intención, describir brevemente en qué consiste y dar ejemplos de usuario. Mientras más ejemplos de usuario mucho mejor será la confianza con la que Watson clasificará las preguntas del usuario.

     step4

  5. Entidades de sistema

    Para facilitarnos más aún el entrenamiento, Watson Assistant también cuenta con entidades preentrenadas (llamadas System Entities), sin embargo están desactivadas por default. Vamos a activar el uso de las entidades sys-date y sys-number que permitirán al bot entender fechas y números respectivamente.

     

    step5

  6. Entrenar a Watson con Entidades

    Siempre es posible crear entidades de manera individual a través de la interfaz visual, sin embargo, resulta muy cómodo hacerlo de forma masiva a través de un archivo CSV, el archivo tiene que estar codificado bajo UTF-8. Importar las entidades que permitirán al bot entender las categorías de ropa que vende nuestra empresa, utilizar el archivo de ejemplo previamente preparado. Nótese que al momento de importar entidades, se describe la estructura que debe tener un CSV para poder ser utilizado.

    step6-1

  7. Agregar un Nodo al Diálogo

    Un nodo consiste en un conjunto formado por una condición, una respuesta (ya sea en texto o en variables de contexto que se describen más adelante) y una acción (esperar a que el usuario escriba de nuevo, saltar a otro nodo y evaluar la condición, ó, saltar a otro nodo y enviar la respuesta que tenga configurada dicho nodo).

    Agregar un nodo debajo del nodo Bienvenida, y utilizar como condición la intención #General_Greetings. Agregar las respuestas apropiadas para cuando el usuario salude a nuestro asistente

    step7

    Vamos a agregar también nodos para enseñarle a Watson cómo comportarse cuando el usuario pregunte si es un robot #General_Human_or_Bot y para cuando el usuario pregunte qué puede hacer nuestro asistente #General_Agent_Capabilities

    step7-a

  8. Responder con Variables de Contexto

    Vamos a crear un nuevo nodo con la intención #precio_producto (esta te toca entrenarla por tu cuenta) para que cuando el usuario pregunte por precios, nuestro bot se conecte a una base de datos y le muestre promociones específicas para la categoría de productos que está buscando. 

    step8

    Nótese que estamos creando dos nodos: Cotizar e Identifica Categoría que es un nodo hijo de Cotizar. En el segundo estamos haciendo uso de dos funcionalidades nuevas:

    • Múltiples condiciones: (@bottom or @exteriores or @joyería or @top) lo que significa que este nodo se activa si el asistente detecta que el usuario está hablando de cualquiera de nuestras categorías de productos
    • Múltiples respuestas: lo que vamos a hacer es configurar variables de contexto para decirle a nuestra aplicación qué está buscando el usuario. Vamos a configurar 2 variables de contexto para cada categoría: bandera_cotizar activada en true para decirle a nuestra app que estamos buscando precios y categoria_producto para que nuestra app pueda ir a la base de datos a buscar las promociones para esa categoría. Para configurar el contexto de cada una de las 4 líneas de respuesta, dar clic en el ícono de configuración representado por un Engrane

    step9

    En la imagen anterior pueden encontrar que hay dos formas de configurar las variables de context, utilizando el editor en JSON o manipulando directamente la respuesta de Watson, ó a traves del editor de contexto que nos proporciona una forma visual de hacerlo

  9. Recibir información a través de una variable de contexto

    Una vez que Watson indicó a nuestra aplicación que necesita ir a buscar una promoción para una categoría determinada, nuestra app deberá llamar a Watson y enviarle la respuesta a través de una variable de contexto. Más adelante se mostrará el código para conseguirlo. Nuestra aplicación contará entonces con un nodo adicional llamado Mostrar Promociones, que será un nodo hijo de Identifica Categoría, en el cual, Watson tomará el valor que nuestra aplicación le mande como promoción, y la enviará al usuario.

    step10

    Nótese que en el texto de respuesta, se incluyen las variables de contexto $categoria_producto (cuyo valor se configuró en el nodo Identifica Categoria) y $promociones cuyo valor será configurado por la aplicación al llamar a Watson

  10. Agregar contenido a la conversación de nuestro Asistente

    Con el fin de mostrar cómo agregar contenidos a través de la conversación entre nuestro asistente y el usuario, vamos a agregar un nodo adicional que a través de una variable de contexto le indique a nuestra aplicación que debe mostrar un mapa, cuando el usuario pregunte por la intención #ubicacion_tiendas

    step11

  11. Configurar web app

    Los servicios de Watson se encuentran protegidos para evitar el uso por alguien no autorizado, por lo cual, en nuestra app vamos a configurar las credenciales (usuario, contrasea e identificador del workspace) para que podamos invocar desde nuestra web app a nuestro asistente entrenado. 

     step12

    Estas credenciales las colocaremos en el archivo app.js en la línea 13

     

    step13

     

  12. Publicar o ejecutar localmente

    Para ejecutar localmente, abrir la terminal de comandos, entrar a la carpeta donde se encuentra la aplicación a través de un comando cd <direccion de la carpeta>, instalar las dependencias utilizando npm install y posteriormente ejecutar npm start

    step13-1

    Para publicar la app en IBM Cloud, se puede editar el archivo manifest.yml para cambiar el nombre que tendrá la app en IBM Cloud. Posterormente, en la terminal de comandos, iniciar sesión en la CLI de Cloud Foundry con el comando ibmcloud login -a api.ng.bluemix.net, posteriormente ibmcloud target –cf. Entrar a la carpeta donde se encuentra la aplicació a través de un comando cd <direccion de la carpeta>, y posteriormente ejecutar ibmcloud cf push. 

    step15

    Al preguntarle a Watson por la dirección o ubicación de oficinas mostrará un mapa en el chat y cuando le preguntemos por cotización para pantalones, nos mostrará el texto que configuramos en la API que simulamos en el código de nuestra aplicación.

    step14

  13. Código del mapa y API

    A continuación se muestra el código con el cual se embebe el mapa, así como la simulación de una llamada a una API con un parámetro de búsqueda (en este caso es externa, pero la funcionalidad es similar a si la API fuera externa)

    stepFinal

  14. Desplegar en FB Messenger, Twilio y Slack

    En el midleware botkit encontrarán un kit ya armado para desplegar su asistente virtual en messegner, twilio (sms) y slack.

    Para FB messenger, les recomiendo echar un vistazo a la carpeta samples/multibot y en particular revisar el archivo bot-facebook.js, donde podrán gestionar la respuesta que manda Watson a los usuarios de Messenger, de tal manera que puedan agregar contenidos como botones, imágenes y más.

    En esta liga encuentran la documentación de la API de FB Messenger donde se explica todos los contenidos que se pueden incluir https://developers.facebook.com/docs/messenger-platform/send-messages/buttons 

2 comments on"Asistente Virtual con Watson Assistant"

  1. Tengo duda con la parte de precios, al momento de probar la parte de preguntarle sobre precios, el asistente regresa respuesta de que no sabe que le preguntas.

  2. SérgioGama July 11, 2018

    Congratulations!!

Join The Discussion