Hasta ahora había contado los pasos necesarios para crear una skill muy básica y poder publicarla. Esos pasos seguí yo para publicar Estrenos de Cine. Esta skill se basaba en una interacción muy simple con el usuario, en base a un utterance se daba una respuesta desde el back. Eso era el inicio y final de la conversación con Alexa, no había un diálogo por turnos entre la skill y el usuario.

Profundizando en features de Alexa descubrí algunas cosas que podían mejorar mi skill, como la configuración de slots obligatorios. En ese caso concreto estamos abriendo las puertas a una posible conversación en la cual Alexa se va a encargar por nosotros de cubrir ciertos aspectos de los intents del usuario. Es lo que se llama Dialog Management y nos permite crear skills conversacionales por turnos.

¿Qué es una skill de conversación por turnos?

En la skill de Estrenos de Cine estamos cubriendo un escenario muy simple:

Con la invocación anterior lo que estaba pasando era:

  • Alexa accedía al skill con el invocation name Estrenos de Cine
  • Al ser la petición del usuario una one-shot invocation, despertar el skill junto con el utterance, Alexa creaba una request para ese intent concreto que llegaba al back
  • El back, en aws lambda, recogía ese request en el handler correspondiente, cogía el valor del slot, de esta semana, filtraba las películas por fecha y devolvía una respuesta en base al resultado

Y fin de la ejecución. No había un intercambio de diálogo entre el usuario y Alexa.

Es cierto que se puede invocar de otra forma, en dos pasos:

Por pasos:

  • Alexa accedía al skill con el invocation name Estrenos de Cine
  • Al ser la petición sin intent asociado (no hay un utterance del usuario aparte del invocation name),  simplemente se despierta al skill y se envía una launch request al back
  • Alexa responde el mensaje de bienvenida y se queda esperando al siguiente utterance
  • El usuario lanza el utterance
  • El back, en aws lambda, recoge la request en el handler correspondiente, el valor del slot, de esta semana, filtra las películas por fecha y retorna una respuesta en base al resultado

En este caso hay dos intent por parte del usuario (invocation name y utterance) y se podría decir que existe cierto diálogo con Alexa, pero esto no sería realmente parte de lo que se ha llamado una conversación por turnos.

Ahora imaginemos el siguiente escenario:

Para no repetir toda la descripción de los pasos (la mayoría son los mismos) nos vamos a centrar en lo que pasa cuando el usuario no le dice a Alexa "para cuándo quiere el usuario saber los estrenos". Se inicia una conversación para recoger esa información y Alexa seguirá preguntando si no entiende la respuesta hasta que considere que tiene toda la información para finalizar la conversación y dejar paso a la respuesta del back.

Con esta skill en cuestión es muy simple, pero imaginemos un skill que planifique viajes que necesita recoger información como origen, destino, horarios, medios de transporte, etc. O un skill para pedir comida a domicilio con tipos de cocina, elección de restaurante, dirección de entrega, etc.

Para ese tipo de skills conversacionales Alexa nos ofrece Dialog Management.

Dialog Management

Dialog Management es un conjunto de funcionalidades que vienen con el Alexa Skills Kit para la gestión de skill con conversación por turnos.

Por poner algunos ejemplos:

  • Gestión de slots obligatorios
  • Confirmación de valores de slots o de intents
  • Validación de valores de slots
  • Manejar el flujo de la conversación entre intents

Se va añadiendo cada vez más funcionalidad alrededor de Dialog Management para ayudar a gestionar de forma más simple casuística relacionada con este tipo de skills simplificando el desarrollo y ofreciendo mejor usabilidad.

Recursos

Mi intención es ir contando lo que nos ofrece Dialog Management en distintos posts con ejemplos concretos de uso, código, etc. Pero, aparte de eso, hay mucha y buena documentación oficial que debe ser el punto principal de referencia.

Os dejo aquí los links más interesantes que yo he visto hasta ahora:

A partir de esas cuatros referencias anteriores vais a ir descubriendo muchos más enlaces sobre ejemplos concretos, información del dialog model (parte del interactor model dedicada al diálogo), ejemplos de código de back para skills de conversación por turnos, etc.

Bola Extra: Si vais viendo los recursos antes de que yo vaya publicando posts sobre el tema veréis que en algunas cosas "no están actualizados". Con esto me refiero a la existencia de la delegación automática del diálogo a Alexa. Es algo relativamente nuevo y facilita algunos temas que se cuentan en los recursos que os puse antes. En mis posts futuros sí que lo tendré en cuenta.


Yo estoy ahora dedicándome a implementar funcionalidad de diálogo al skill Estrenos de Cine y a crear otros skills que me van a permitir profundizar en otras funcionalidades. Lo iré compartiendo todo por el blog :)