Crear un simple chatbot con dialogflow v2

2018-05-14 15:36:59

Realizaremos un pequeño chat para comprender el funcionamiento de dialogflow. En este ejemplo utilizaremos los contextos de entrada y salida para mantener el flujo de la conversación.
Antes de comenzar deberías haber realizado la tutorial anterior donde se crea un chatbot muy básico para entender lo que es dialogflow y poder crear un agente, un intent, frases de aprendizaje, etc. post/primeros-pasos-crear-chatbot-dialogflow-v2

1) Crear el Agente del chatbot

dialogflow crear un nuevo agente

Como muestra la imagen anterior. Crearemos un nuevo agente al que llamaremos "simple_chatbot".  Selecciona el idioma español e indicar tu zona horaria. En nuestro caso Europa / Madrid.

2) Editar intento Default Welcome intent

Cuando creas un nuevo agente, por defecto, se visualizarán los Intents (se crean dos de forma automática). Éstos son:

  • Default Fallback intent: Intento / intención que se lanza cuando no comprende lo que el usuario intenta decirnos
  • Default Welcome intent: Intento / intención que se lanza cuando el usuario inicia la conversación con un saludo. Por ejemplo cuando el usuario introduce hola o buenos días. Este intente se lanza y responde al usuario.
Aprovecharemos el segundo intent "Default Welcome intent" y lo modificaremos para comenzar con el chatbot. Para ello haz click sobre éste.

editar intent default welcome en dialogflow


Lo primero es cambiar el nombre del intent (no es necesario pero es mejor darle un nombre más acorde a lo que realizará el intent). Le pondremos el nombre de "Saludo_inicial". 

En la imagen siguientes puedes observar:
1- Nombre del intent
2- Contexts: Son parámetros que se usan para pasar a otros intents.
3- Events: Forma opcional de activar el intento sin la necesidad de texto coincidente o entrada oral. Utilice eventos predefinidos específicos de la plataforma o defina los personalizados.
4- Responses: Lista de posibles respuestas que realizará el chatbot al usuario.

vista previa de un intent en dialogflow

Vamos a crear un parámetro para Context. Para ello desplegamos la pestaña de Context. Puedes ver que hay dos campos (imagen siguiente).

añadir un context a un intent en dialogflow

2.1- Introduciremos en el segundo campo (add output context) el valor de "esperar_nombre_usuario". 

context en dialogflow

Al salir del campo o presionar enter se creará algo como muestra la imagen anterior. La fecha pequeña apunta a un círculo con un número en su interior, este número indica el tiempo de vida de este parámetro. 

2.2- En trainning phrases las posibles frases que el usuario podrá introducir para comenzar la conversación. Nosotros pondremos las siguientes o agregar las que creas oportuno. Frases:

  • hola
  • buenos días
  • que tal

2.3- Ahora nos desplazamos hacia el punto 4. Text response. Eliminamos todas las respuestas que existen y insertaremos una nueva que diga "Hola. Introduce tu nombre por favor". Finalmente presionamos el botón SAVE para guardar los cambios.

3) Crear nuevo intent para obtener el nombre introducido por el usuario

3.1 -Creamos un nuevo intent presionando el botón "+" en el menú izquierdo. y le damos el nombre de "intent_leer_nombre".

3.2 -Desplegamos Context y escribimos en el primer campo "esperar_nombre_usuario" y en el segundo campo puedes observar que se crea un nuevo valor con el mismo texto "esperar_nombre_usuario". El primer campo sirve para recibir el parámetro del intent saludo_inicial creado anteriormente y el segundo servirá por si el usuario no introduce su nombre de forma correcta y se le volverá a formular la pregunta nuevamente.

3.3 En Training phrases vamos a introducir todas o al menos algunas de las posibles respuesta que puede dar el usuario. Por ejemplo: me llamo hugo. Indicaremos estas posibles respuestas:

  • me llamo Hugo
  • mi nombre es Hugo
  • soy Hugo
  • Hugo

Dialogflow tiene una serie de funciones para detectar tipos de datos. En nuestro caso necesitamos que pueda detectar que Hugo es una variable y que cambiará en función del nombre que introduzca el usuario. Para ello dialogflow tiene un tipo de dato para los nombres y con ésto evitamos que el usuario pueda introducir por ejemplo: me llamo casa. Si el usuario introduce ésto en el chatbot, el sistema detectaría que no es un nombre y automaticamente el intent de error se lanza y mostraría una frase como "no te entiendo". Puedes ver la siguiente imagen para ver como se seleccionan estos tipo de datos:

frases de aprendizaje en dialogflow

Para asignar una variable a una palabra de la frase solo debes seleccionar la palabra y se desplegará un panel con distintas opciones. Para nuestro ejemplo busca el tipo de dato @sys.given-name. Y en todas las frases en la palabra hugo indicas que es un tipo de dato @sys.given-name.

3.4 - Finalmente en Text response escribiremos la respuesta/s que el chabot realizará al usuario. Nosotros pondremos Encantado $given-name.
El valor $given-name conserva el valor introducido por el usuario. Como muestra la siguiente imagen:

respuestas para un intent dialogflow

Imaginemos que el usuario ha respondido soy casa. El sistema no da como válido casa por un nombre de persona. Con lo cual necesitaremos volver a preguntarle nueva mente su nombre. Y para hacerlo debemos introducir esta posible pregunta dentro de Text response. Con lo cual introduciremos No te he entendido. Puedes repetirme tu nombre?.

Dialogflow reconoce automaticamente que frase deberá formular en función de los parámetros correctos. En este ejemplo $given-name almacena el nombre del usuario, siempre y cuando el usuario haya respondido correctamente. Con lo cual si el usuario introduce soy casa, el sistema utilizará la respuesta sin el parámetro $given-name. 

Puedes crear varias respuestas diferentes con o sin los parámetros. Dialogflow utilizará aleatoreamente las respuestas que encajen con los parámetros correctos.

3.5 - Ya tienes un primer paso para construir un chatbot. Pero tenemos un pequeño problema, consiste en que si el usuario después de indicar su nombre al chatbot y a continuación vuelve a saludar con un Hola, la conversación vuelve a comenzar desde el inicio lazandoce otra vez el intent Saludo_inicial. Para evitar este problema tenemos que poner un nueva frase de respuesta dentro de Text response. Mira la siguiente imagen:

respuesta de un intent en dialogflow

Puedes observar en la nueva frase (resaltada en color azul) tiene un parámetro. #esperar_nombre_usuario.given-name

#esperar_nombre_usuario es el nombre del contexto y given-name es el nombre del parámetro dentro del apartado Action and parameters. Este conservará el nombre introducido por el usuario. Y cuando vuelva a intentar saludar mostrará la nueva frase.

Demo del ejemplo anterior

Para comenzar la conversación introduce un saludo como: hola, buenas, etc. El te solicitará el nombre y puedes probar introducir soy mesa y verás que el sistema te volverá a solicitar tu nombre, pero si introduces un nombre como soy Belen, el sistema te comprenderá.


Comentar

Para poder realizar comentarios. Primero debes inicar sesión o crear una cuenta.