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

Edgar Talledos
Edgar Talledos
7 min readDec 24, 2018

--

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).

  1. Calma (Remix) de Pedro Capó & Farruko
  2. Everything I Need (Film Version) de Skylar Grey
  3. In My Mind de Dynoro & Gigi D’Agostino
  4. Lost On You de LP
  5. New Light de John Mayer
  6. Thunderclouds de LSD Feat. Sia & Diplo & Labrinth
  7. Baby de Clean Bandit Feat. Marina and the Diamonds & Luis Fonsi
  8. Promises de Calvin Harris & Sam Smith
  9. Shallow de Lady Gaga & Bradley Cooper
  10. High Hopes de Panic! At The Disco
  11. Happier de Marshmello & Bastille
  12. Calma de Pedro Capó
  13. Nunca Es Suficiente de Los Ángeles Azules Feat. Natalia Lafourcade
  14. Natural de Imagine Dragons
  15. Later Bitches de The Prince Karma
  16. Adan Y Eva de Paulo Londra
  17. No Te Contaron Mal de Christian Nodal
  18. Desconocidos de Mau Y Ricky & Manuel Turizo & Camilo
  19. Sunflower (Spider-Man: Into the Spider-Verse) de Post Malone & Swae Lee
  20. 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.

Solamente incluyo canciones en español para facilitar su búsqueda en voz vía Google Asistant

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.

Aquí ya se creó el Intent y como ven aparece ligado al Default Welcome Intent

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.

Aquí agregamos afirmativo a nuestras Training phrases.
Aquí modificamos nuestro Default Welcome Intent para que pregunte.

Ahora vamos a probarlo.

Aquí se ejecuta el primer intent
Aquí se ejecuta el segundo intent pero no hay respuesta

Agregamos las respuestas al segundo intent.

Aquí agregamos las respuesta al segundo intent (Default Welcome Intent — yes)

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.

Como podemos ver dialogflow entendió correctamente los datos que le dimos

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

Dependencias para el fulfillment

Y en el archivo principal tenemos que agregar lo siguiente.

Función para fulfillment

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.

Como se darán cuenta la letra no es para uso comercial dado que estamos usando la versión gratuita, es posible también que se tengan algunos errores, si eso pasa traten de probar varias veces.

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.

--

--

Edgar Talledos
Edgar Talledos

La única manera de lidiar con este mundo sin libertad, es volverte tan absolutamente libre que tu mera existencia sea un acto de rebelión