Tutorial: Desarrolla un chatbot para consultar letras de tus canciones favoritas — Parte 3
Conexión del API de MusixMatch con dialogflow. utilizando intents y fulfillments
Esta es la última parte de nuestro tutorial, recuerda leer las dos primeras partes, te las dejo en los siguientes enlaces.
Uno de las mejores cosas que tienen dialogflow es su simplicidad, en la segunda parte de este tutorial, probamos los intents, pero no ahondamos en su uso, y en lo que significa cada uno de los apartados que tienen, en esta parte vamos a tratar de especificar su uso, aunque no leeremos todo, ya que se volverá un tutorial demasiado largo y el objetivo es ser lo más breves posible, pero que ustedes también puedan hacer su propio chatbot.
Utilización de Entities
Las entidades o entities son el mecanismo que utiliza dialogflow para identificar y extraer datos útiles de las entradas que genere el usuario en lenguaje natural.
Mientras que los intents permiten que tu agente entienda la motivación detrás de una entrada del usuario. Las entidades son usadas para seleccionar entradas específicas de información que el usuario menciona — desde el nombre de una calle o dirección hasta nombres de productos, colores o diferentes tipos de unidades.
Cualquier parte importante de tus datos que quieras que el usuario mencione corresponde a una entidad.
Eso quiere decir que en nuestras entidades tendremos que especificar los datos que nuestro usuario mencione, en nuestro caso los nombres de las canciones y el artista que las interprete (de acuerdo a nuestra API, que desarrollamos con Cloud Functions en la primera parte de este tutorial).
Por ejemplo, voy a poner una lista de los éxitos para México en Shazam (la lista se actualiza constantemente por lo que pondremos la del día de hoy y solamente los primeros 20 lugares).
- Calma (Remix) de Pedro Capó & Farruko
- Everything I Need (Film Version) de Skylar Grey
- In My Mind de Dynoro & Gigi D’Agostino
- Lost On You de LP
- New Light de John Mayer
- Thunderclouds de LSD Feat. Sia & Diplo & Labrinth
- Baby de Clean Bandit Feat. Marina and the Diamonds & Luis Fonsi
- Promises de Calvin Harris & Sam Smith
- Shallow de Lady Gaga & Bradley Cooper
- High Hopes de Panic! At The Disco
- Happier de Marshmello & Bastille
- Calma de Pedro Capó
- Nunca Es Suficiente de Los Ángeles Azules Feat. Natalia Lafourcade
- Natural de Imagine Dragons
- Later Bitches de The Prince Karma
- Adan Y Eva de Paulo Londra
- No Te Contaron Mal de Christian Nodal
- Desconocidos de Mau Y Ricky & Manuel Turizo & Camilo
- Sunflower (Spider-Man: Into the Spider-Verse) de Post Malone & Swae Lee
- A Través Del Vaso de Grupo Arranke
Ya que tenemos los datos para nuestros intents, vamos a crearl las entidades correspondientes, pensando en lo siguiente, cada entidad debe estar categorizado por canción o por artista, esto quiere decir (permítanme utilizar esto en inglés, para que coincida con nuestra API) que los nombraremos song
y artist
.
Vamos a incluir las variaciones que creamos que el usuario va a meter en nuestra entrada (esto con el propósito de entrenar adecuadamente a nuestro agente), incluyendo aquellas que tienen faltas de ortografía y las que están escritas en buena ortografía.
Ahora crearemos la entidad artist
.
Al terminar de crear nuestras entidades nos vamos a la pantalla principal y veremos lo siguiente.
Este “@” permitirá mapear nuestras entidades como parámetros, que después nos servirán para mandar esos datos a nuestra API.
Utilización de Intents
Llegó la hora de utilizar los intents, estos como se mencionó anteriormente es lo que permitirá a nuestro chatbot interpretar la entrada y poder realizar acciones y muchas otras cosas más.
Antes de crear un intent vamos a utilizar follow-up intent, esto nos permitirá definir un contexto de manera sencilla y a su vez utilizar el Default Welcome Intent.
Le damos click a Add follow-up intent y seleccionamos yes, esto permitirá crear un Intent que al responder a la bienvenida con de forma afirmativa creará una ligadura, que permitirá guardar el dato de la respuesta al siguiente Intent.
Agregaremos este Intent con el propósito de mostrar su funcionalidad, quizá alguno crea que está de más y es precisamente por eso. Ahora veamos cómo va a funcionar con unas cuantas capturas de pantalla.
Y ahora accedemos al intent que se creó y veremos los siguiente, para probar vamos a agregar a nuestras Training phrases: afirmativo. Y vamos a guardarlo, también vamos a modificar nuestro Default Welcome Intent, en este caso solo las Responses, agregando lo que se muestra en la imagen.
Ahora vamos a probarlo.
Agregamos las respuestas al segundo intent.
Al probarlo veremos lo siguiente (recuerden que al ser follow-up intents tienen una ligadura, esto quiere decir que al responder a la bienvenidad tendremos la respuesta del segundo intent).
El intent get-lyric
Creamos otro follow-up intent que se llamará get-lyric, vamos a elegir en el menú de opciones custom
.
Agregamos las frases que creamos que van a utilizar los usuarios, con las canciones y artistas que creamos como entities.
En este caso solo lo hice con una canción, como te darás cuenta se marcan las entities y en la parte de abajo de nuestras frases aparecen como Action and parameters, es súper importante que recordemos eso.
Y en la parte de nuestras respuestas podremos mapear de forma adecuada tanto el parámetro $song como el parámetro $artist, de esa forma le decimos a dialogflow que se trata de parámetros. En la siguiente imagen se pone el ejemplo. Y también voy a agregar la prueba.
Utilizando Fulfillments
Ahora toca la parte más importante, conectar nuestra API mediante fulfillment (quizá lo mejor que puedes aprender sobre chatbots).
Dejo la documentación para que puedan checar a detalle los fulfillments.
Recuerda revisar la primera parte del tutorial para así utilizar el endpoint que se creó.
Activamos el editor en línea.
Como vamos a usar axios para generar una petición post, tenemos que agregarlo a nuestro package.json
Y en el archivo principal tenemos que agregar lo siguiente.
Explicación de código fuente
Tanto la función callApi como la función fetchLyric permiten generar la petición post e insertar los parametros song y artist.
Al definir la variable intentMap, estamos definiendo un map, al cual le decimos que al tener el intent ‘get-lyric’ utilice la función fetchLyric.
// aquí le decimos a dialog flow que añada nuestros intents al fulfillmente
agent.handleRequest(intentMap);
Al terminar de agregar el código le damos click al botón DEPLOY
.
Probando y agregando Fulfillment a Intent
Abrimos el Intent get-lyric
y nos vamos a la parte final para activarlo, y probamos nuestro chatbot.
Ya tenemos nuestro chatbot completo, ahora podemos consultar la canción que queramos.
Si el artículo te gustó sígueme en todas mis redes sociales.
Si tienes alguna duda o comentario no dudes en contactarme.