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