Dialog Management en Alexa: Introducción y referencias
Tags: alexa, interactionmodel, dialogmanagement, alexaskills
Published: 2019-05-29 08:30:25

---
title: Dialog Management en Alexa: Introducción y referencias
published: true
tags: alexa,interaction model,dialog management,alexaskills
canonical_url: https://www.kinisoftware.com/dialog-management-introduccion/
---

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](https://www.amazon.es/Kinisoftware-Estrenos-de-cine/dp/B07MKCLZ62/ref=sr_1_1?s=alexa-skills&ie=UTF8&qid=1545905661&sr=1-1). Esta skill se basaba en una interacción muy simple con el usuario, en base a una petición 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 las peticiones 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 con una interacción por parte del usuario muy simple:

![](https://www.kinisoftware.com/content/images/2019/04/Screenshot-2019-04-02-at-20.01.35.png)

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 una petición de acción, 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:

![](https://www.kinisoftware.com/content/images/2019/04/Screenshot-2019-04-02-at-19.53.51.png)

Por pasos:

- Alexa accedía al skill con el invocation name _Estrenos de Cine_
- Al ser la petición sin acción asociada,  simplemente se despierta al skill y se envía una launch request al back
- Alexa responde el mensaje de bienvenida y se queda esperando a la siguiente interacción del usuario
- El usuario realiza la acción concreta 
- 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 peticiones por parte del usuario 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:

![](https://www.kinisoftware.com/content/images/2019/04/Screenshot-2019-04-02-at-19.54.35.png)

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:

- [Landing sobre Dialog Managent](https://developer.amazon.com/alexa-skills-kit/dialog-management) en el site de Alexa
- Curso oficial de Amazon: [Designing for Conversation](https://developer.amazon.com/ask-resources/guided/conversational-design-workshop/#/)
- [Guía oficial](https://build.amazonalexadev.com/alexa-skill-dialog-management-guide-ww.html) sobre Dialog Management
- En el [blog de Alexa](https://developer.amazon.com/blogs/alexa/tag/Dialog+Management) podéis ver todos los artículos relacionados filtrando por el tag "Dialog Management"

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](https://developer.amazon.com/docs/custom-skills/delegate-dialog-to-alexa.html#automatically-delegate-simple-dialogs-to-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 :)