Alexa. Desarrollo de aplicaciones IoT para Arduino y ESP8266

Tekst
Loe katkendit
Märgi loetuks
Kuidas lugeda raamatut pärast ostmist
Šrift:Väiksem АаSuurem Aa

5.2.2 Tipos de slot estándar

Además de los tipos de slot personalizados, creados por usted mismo, también puede utilizar cualquiera de los que Alexa tiene incorporados para reconocer y manejar datos en los siguientes ámbitos:

• Números, fechas y horas. Detecta cuándo el usuario ha dicho un número, una fecha o una hora.

• Frases. Se utiliza para capturar cualquier tipo de información en formato libre.

• Listas de artículos. Incluye grupos de valores de uso común, como, por ejemplo, nombres de países, de personas, de los días de la semana, de los meses del año, etc.

Los tipos de slots relacionados con los números, fechas y horas son de uso frecuente, en especial los siguientes:

• AMAZON.DATE. Convierte las palabras que indican una fecha a formato fecha. Por ejemplo, en la expresión “Quiero una reserva para hoy”, si la fecha de hoy fuera el 19-05-2020, el valor del slot en el que encaja la palabra “hoy” sería “2020-05-19”. Dicho formato sigue el estándar ISO-8601 para fechas. Para más detalles consulte https://developer.amazon.com/en-US/docs/alexa/custom-skills/slot-type-reference.html#date.

• AMAZON.DURATION. Convierte palabras que declaran duraciones a un valor numérico. Por ejemplo, en el enunciado: “Pon la lavadora dentro de una hora”, el slot asociado a la expresión “una hora” tendría el valor “PT1H”. Si hubiera dicho cinco minutos, su valor sería “PT5M”. Dicho formato sigue la norma ISO-8601. Aplicando esta norma de codificación, cualquier valor que represente un intervalo de tiempo debe empezar por la letra “P”. En los ejemplos anteriores, la “T” siguiente establece que el número que viene a continuación hace referencia a una hora, no a una fecha. El carácter final, señala el periodo de tiempo al que hace alusión el número anterior (p. ej., la “M” serían minutos y la “H” horas). Para más información, consulte https://developer.amazon.com/en-US/docs/alexa/custom-skills/slottype-reference.html#duration.

• AMAZON.NUMBER. Convierte palabras numéricas en números. Por ejemplo, “diez” en “10”.

• AMAZON.ORDINAL. Convierte palabras que expresan números ordinales en dígitos. Por ejemplo, “primero” en “1”, “segundo” en “2”, etc.

El único slot relacionado con frases es AMAZON.SearchQuery. Tiene que ver con consultas de carácter general (sin una estructura concreta), en la que el usuario pregunta algo tal como lo haría en Google. Se usa también para tratar expresiones de usuario que se salgan del patrón esperado.

Por último, los tipos de slot con listas de artículos son similares a los personalizados, en los que la lista de valores ya viene dada. Hay muchos tipos diferentes, como, por ejemplo, de nombres de animales (AMAZON.Animal), de colores (AMAZON.Color), de deportes (AMAZON.Sports), etc. No todos estás disponibles en español, por lo que tendrá que consultar la lista completa en https://developer.amazon.com/en-US/docs/alexa/custom-skills/slot-type-reference.html#list-types y seleccionar este idioma para comprobar si se encuentra el que necesita.


Todos los tipos de slot estándar, así como la descripción detallada de cada uno de ellos, se encuentra en https://developer.amazon.com/en-US/docs/alexa/custom-skills/slot-type-reference.html.

5.3 MODELO DE DIÁLOGO

Para obtener los valores de los slots requeridos por una intención que el usuario no hubiera proporcionado, es necesario establecer una conversación que permita recopilarlos. Dicha conversación sigue un modelo de diálogo, que se compone de una serie de elementos:

• Slots obligatorios. Son aquellos que es imprescindible que tengan un valor válido para invocar la intención. Por ejemplo, si para preparar un café es necesario saber el tipo de café que se tiene que utilizar, la cantidad de leche que se debe poner y el edulcorante que hay que añadir, estos tres slots deberán ser obligatorios en la intención que atienda la solicitud de un café.

• Preguntas de solicitud de valores. Asociadas a un slot obligatorio, son las que habría que hacer al usuario para obtener su valor. Por ejemplo, si este ha pedido un descafeinado solo, al no indicar el edulcorante, habría que preguntárselo con frases, como: “¿Quiere azúcar, sacarina o sin edulcorante?”.

• Confirmaciones de slots obligatorios. Pregunta usada para verificar el valor de un slot proporcionado por el usuario. En el caso anterior, si este hubiera dicho que quiere azúcar, se le podría responder diciendo: “¿Quiere que le ponga azúcar al café?”.

• Confirmación de la intención. Pregunta que permite corroborar la información con la que se va a invocar la intención. Por ejemplo, una vez obtenidos los valores de todos los slots requeridos para solicitar un café, se le podría decir al usuario: “Ha solicitado un café descafeinado con azúcar. ¿Es correcto?”.

• Reglas de validación de valores de slots. Son las que deberá cumplir el valor de un slot para que pueda ser considerado como válido.

Una vez que conoce los componentes del modelo, veamos con más detalle las posibilidades que ofrecen las reglas de validación.

5.3.1 Validación de los valores de un slot

Cada slot puede tener asociado un conjunto de reglas de validación, junto con las indicaciones que habría que dar al usuario para que introduzca un valor que las cumpla (en caso de no haberlo hecho). Por ejemplo, si este pidiera un capuchino, se le podría contestar que solo es posible servir café normal o descafeinado. En este caso, la regla de validación sería que el valor del slot fuera uno de los del tipo al que pertenece, asociándola a una indicación (prompt) que orientara al usuario sobre cuáles podrían ser, como, por ejemplo: “Solo hay café normal y descafeinado. ¿Cuál prefiere?”.

Las reglas que se pueden asociar a un slot pertenecen a uno de estos grandes grupos:

• Comparación con los valores y sinónimos del tipo de slot. Este grupo solo lo compone la regla que valida si el valor del slot coincide con uno de los del tipo al que pertenece, o sus sinónimos. El ejemplo del párrafo anterior caería dentro de este tipo de regla.

• Comparación con un conjunto fijo de valores. En la propia regla se especifica la lista de valores con los que se comparará el del slot. Se puede optar por una regla, que se cumpliría si el valor del slot coincidiera con alguno de ellos, u otra que se comportara al contrario.

• Comparación con un valor específico. Son cuatro reglas que comparan si el valor del slot es mayor, mayor o igual, menor, y menor o igual, que otro determinado.

• Comparación de fechas u horas con un periodo de tiempo especificado. Este grupo solo funciona con los tipos de slot AMAZON.DATE y AMAZON.TIME. Lo componen dos reglas: una que verifica si una fecha u hora se encuentra dentro de un periodo de tiempo especificado, y otra que hace justo lo contrario.


Para saber el tipo de regla que puede usar con cada tipo de slot, consulte https://developer.amazon.com/es-MX/docs/alexa/custom-skills/validateslot-values.html.

La primera regla es la más habitual y la más general. El otro tipo de reglas se utilizan para dar mensajes más concretos, basados en listas de valores que tendrá que crear junto con la regla. Por ejemplo, se podría hacer una lista de tipos de café que requiriesen leche condensada, como el café bombón y, en caso de que el usuario pidiera alguno de ellos, se le respondería diciendo que no se pueden preparar cafés con este ingrediente, lo que evitaría que solicitara otro café similar.

Un mismo slot puede tener múltiples reglas de validación. Estas se verificarían en el orden en que se muestran en la consola del desarrollador. Cuando no se cumpliera una de las reglas, Alexa dejaría de verificar el resto, respondiendo con el correspondiente mensaje de prompt (indicación) asociado.

5.3.2 Delegación del diálogo

El diálogo que tendrá que entablar con el usuario, para obtener los valores de los slots requeridos por una intención, podrá delegarlo en Alexa. Eso le permitirá simplificar el código de su habilidad, de forma que sea el propio asistente quien determine cada paso de la conversación en función de los datos que deban obtenerse, las indicaciones que haya que darle al usuario en cada momento y la forma de interpretar sus respuestas.

Hay diferentes formas de delegar un diálogo, pero usted usará la automática, ya que, aunque se pierde algo de flexibilidad, se gana en simplicidad al no tener que gestionarla a nivel de código.

La delegación del diálogo se puede hacer a nivel de habilidad o a nivel de intención. Por defecto, las habilidades tienen habilitada la delegación automática. Y a nivel de intención, la estrategia de delegación es la establecida para la habilidad, es decir, que de forma predeterminada el diálogo también está delegado a este nivel automáticamente. Sin embargo, si usted quiere otra estrategia de delegación, puede elegir entre las siguientes:

 

• Habilitar la delegación automática. La intención delega el diálogo a Alexa, independientemente de la estrategia elegida para la habilidad.

• Desactivar la delegación automática. La intención no delega el diálogo a Alexa, independientemente de la estrategia elegida para la habilidad.

• Respaldo a la estrategia de habilidad. La intención usa la estrategia de delegación establecida en la habilidad. Es la opción preestablecida.


La configuración de la estrategia de delegación de diálogo de una intención siempre tiene prioridad sobre la establecida a nivel de habilidad.

5.4 PRÁCTICA DE CREACIÓN DE UN MODELO DE INTERACCIÓN

Una vez creada la habilidad “Máquina de café”, ha llegado el momento de establecer el modelo de interacción asociado, que será el que defina la conversación que se tenga que mantener para solicitar un café. Para ello, deberá dar un nombre de invocación a esta habilidad, crear la intención que atienda las solicitudes de café, sus expresiones de muestra y los slots que contengan, los tipos a los que pertenezcan y la estrategia de delegación del diálogo.

5.4.1 Establecimiento del nombre de invocación

Lo primero que hará es establecer el nombre de invocación de la habilidad, que será el mismo que el de la habilidad: “máquina de café” (si lo desea, puede elegir cualquier otro). De esta forma, para iniciarla tendrá que decir: “Abre máquina de café” o, en caso de que quiera pedir directamente un café: “Pide a la máquina de café un descafeinado con leche y sacarina”.

Para ello, acceda a la consola de Alexa y seleccione la habilidad “Máquina de café”. Luego, pulse la opción “Invocation” del menú lateral izquierdo y escriba “máquina de café” en el campo correspondiente. Para finalizar, guarde los cambios con el botón “Save Model”.



El nombre de invocación solo es necesario para habilidades personalizadas, como la suya. Si estuviera utilizando otro tipo de habilidades, como las de casa inteligente, podría invocar cualquiera de las intenciones del modelo de interacción (directivas) sin necesidad de iniciar previamente ninguna habilidad.


El nombre de la habilidad podrá cambiarse en cualquier momento. Para que tenga efecto el cambio no será suficiente únicamente con guardarlo, sino que también deberá volver a crear el modelo de interacción de la habilidad pulsando el botón “Build Model”.

Un nombre de invocación debe cumplir una serie de requisitos, entre los que destacamos los siguientes:

• Tendrá que estar formado de más de una palabra, compuestas por caracteres alfabéticos en minúsculas.

• Si estuviera constituido solo por dos palabras, no podría contener artículos determinados (“el”, “la”, “los, “las”), indeterminados (“un”, “una”, “unos”, “unas”) o preposiciones (“a”, “ante”, “bajo”, “cabe”, “con”, “contra”, “para”, etc.).

• No debe contener ninguna de las palabras de lanzamiento de habilidades de Alexa (“correr”, “comenzar”, “iniciar”, “poner”, “jugar”, “reproducir”, “reanudar”, “usar”, “utilizar”, “lanzar”, “pedir”, “preguntar”, “abrir”, “decir”, “cargar”, “empezar”, “habilitar”, etc.) y sus conjugaciones.

• Tampoco debe contener palabras de activación (“Alexa”, “Amazon”, “Echo”).


Todos los requisitos que deben cumplir los nombres de invocación los puede encontrar en https://developer.amazon.com/es-ES/docs/alexa/custom-skills/choose-the-invocation-name-for-a-custom-skill.html.

5.4.2 Creación de una intención y sus expresiones de muestra

A continuación, creará la intención que se invocará cuando el usuario solicite un café. Para ello, pulse la opción “Interaction Model” del menú lateral izquierdo, luego en “Intents” que aparece debajo y, finalmente, el botón “+Add Intent” del panel principal.


Verá un campo en el que deberá introducir el nombre de la intención, que será el que la identifique dentro de la habilidad. Llámela “SolicitudCafe” y pulse el botón “Create custom intent”.


El nombre de las intenciones solo puede estar formado por caracteres alfabéticos y el guion bajo “_”. No está permitido el uso de espacios, números o caracteres especiales (por eso “cafe” no lleva acento). Además, no se distingue entre mayúsculas y minúsculas (p. ej., SolicitudCafe es el mismo nombre que solicitudcafe, que se ha escrito así por facilitar su lectura).

Una vez creada la intención, en el panel principal se le invita a añadir las expresiones de muestra que permitan invocarla (“Sample Utterances”).


Saber elegir dichas expresiones determinará la facilidad de uso de la habilidad. Piense en todas las formas posibles en las que un usuario pueda llegar a pedir un café. Cuantas más frases añada, más representativas y variadas sean, más probabilidades habrá de que Alexa entienda cuál es el café que se le solicita. Proporcionar formas diferentes de decir lo mismo ayudará a que Alexa (utilizando técnicas de inteligencia artificial) las generalice para que encajen con frases parecidas. Naturalmente, será imprescindible verificar el comportamiento de Alexa en todo tipo de situaciones ya que puede que no concluya lo que para usted sea obvio y viceversa.

Volviendo a la habilidad de la máquina de café y, en concreto, a su intención “SolicitudCafe”, cuando, al iniciar la habilidad le pregunte qué desea, el usuario podría contestar: “Quiero un café con leche y sacarina”, “Dame un café solo sin edulcorante”, “Café cortado”, “Café descafeinado” o, simplemente, “Un café”. Usted puede seguir añadiendo todas las que quiera. Cuantas más, mejor.

Para añadir cada una de estas frases de muestra, escríbalas en el campo correspondiente y pulse retorno de carro o el icono “+” que hay a su derecha.


Una vez introducidas todas las expresiones, deberá tener el siguiente resultado.



Si pulsara en el icono con forma de papelera que hay a la derecha de cada expresión de muestra, la borraría.


Las expresiones de muestra se pueden descargar a un fichero en formato CSV pulsando en el icono “Export”.


También podrían crearse utilizando un sencillo editor de texto que aparece cuando se pulsa el icono “Bulk Edit”.


Si las frases de muestra estuvieran contenidas en un archivo CSV, para importarlas solo tendría que arrástralo a la zona indicada de la parte superior. Esto es muy útil, por ejemplo, para reutilizar las procedentes de otra habilidad.

En todas las expresiones de muestra se solicita un café. Las más completas de todas son las dos primeras: “Quiero un café con leche y sacarina” y “Dame un café solo sin edulcorante”, ya que en ambas se indica el tipo de café (cuando se pide un café sin decir que es normal o descafeinado, se supondrá que es normal), la cantidad de leche y el edulcorante con el que tiene que elaborarse. En la siguiente frase, solo se especifica el tipo de café y la cantidad de leche (“Café cortado”), y en las dos últimas, únicamente se hace referencia al tipo de café (“Café descafeinado” y “Un café”). En una cafería es frecuente que un cliente pida el café de cualquiera de estas formas. Antes de servirlo, el camarero tendrá que preguntar la información que le falta para prepararlo. Eso mismo es lo que tendrá que hacer Alexa.

Las expresiones anteriores no son todas las que podría llegar a decir un usuario, sino ejemplos representativos de las distintas formas de pedir un café. No será necesario que introduzca las frases que expresen todas las combinaciones posibles de tipos de café, cantidades de leche y edulcorante. Solo tendrá que parametrizar dichas expresiones, indicando a Alexa qué palabras son slots. De esa forma, la expresión seguirá siendo válida para cualquiera de los valores del tipo de slot al que pertenezca.

En las expresiones anteriores, los slots son lo que contienen el tipo de café, la cantidad de leche y el tipo de edulcorante. Los llamará: “café”, “leche” y “edulcorante”, respectivamente.

Empiece creando los de la primera frase de muestra. Para ello, seleccione la palabra “café”. Aparece una ventana en la que, por defecto, le dará la oportunidad de crear un slot cuyo nombre coincida con la palabra seleccionada. Pero como este solo puede contener caracteres alfabéticos y guiones bajos (no caracteres especiales, como acentos), deberá cambiarlo por “cafe” (sin acento). A continuación, pulse el botón “Add” para crearlo.


Como resultado, el lugar en el que antes se encontraba la palabra “café” ahora estará ocupado por el nombre del slot entre llaves (“{cafe}”). Este slot podrá contener cualquiera de los valores del tipo al que se le asocie posteriormente. Evidentemente, uno de los valores de dicho tipo de slot deberá ser “café”.


Ahora seleccione las palabras “con leche” y sustitúyalas por el slot “leche”, que también deberá crear. Haga lo mismo con la palabra “sacarina”, pero esta vez creando el slot “edulcorante”. El resultado lo puede ver a continuación.


Repita esta misma operativa con el resto de las expresiones. A partir de ahora, al seleccionar cualquiera de dichas palabras ya no tendrá que crear un nuevo slot, puesto que usará uno de los existentes. Solo tendrá que seleccionarlo de la lista en la que se muestran todos los que hay.


Cada slot vendrá señalado por un color.

Una vez identificados los slots de todas las expresiones, el resultado será el mostrado en la siguiente imagen. Pulse el botón “Save Model” para guardar los cambios realizados.

 


Observe que las palabras “Café descafeinado” se han sustituido por el slot “cafe” ya que, como verá en breve, los valores de este slot corresponden a todas las formas de pedir los dos tipos de café: “café” o “café normal” en un caso, y “café descafeinado” o “descafeinado” en el otro. Por el mismo motivo, las palabras “sin edulcorante” se han sustituido por el slot “edulcorante”.

Advierta cómo dichos slots aparecen debajo del nombre de la intención en el menú lateral izquierdo.



Para borrar un slot, pulse sobre el icono con forma de papelera en el menú lateral izquierdo. Si no apareciera dicho icono, seleccione la intención a la que pertenece y, en la lista de slots que se muestran en el panel principal, lo verá a la derecha de su nombre.

Como la única intención personalizada que va a utilizar es “SolicitudCafe”, borre la que venía en la plantilla utilizada (“HelloWorldIntent”) pulsando en el icono con forma de papelera que tiene a la derecha de su nombre. Le aparecerá una ventana en la que se le pide que confirme la acción. Pulse el botón “Delete Intent”.



Si no le apareciera el icono de la papelera en el menú lateral izquierdo, seleccione la opción “Intents” de dicho menú y, en la lista de intenciones que se muestran en la sección “Intent Slots” del panel principal, sobre el enlace “Delete” situado a la derecha de su nombre.

Además de en el propio menú lateral, las intenciones de una habilidad se pueden ver en el panel principal pulsando la opción “Intents”, y entre ellas estará la que acaba de crear (“SolicitudCafe”).


Cada intención quedará descrita por su nombre (“NAME”), el número de expresiones de muestra (“UTTERANCES”), el número de slots que contienen (“SLOTS”) y su tipo (“TYPE”, cuyo valor será “Required” para las obligatorias y “Custom” para las personalizadas). Finalmente, en el campo “ACTIONS” aparecen las acciones que puede realizar sobre ellas (editarlas y/o borrarlas).

Antes de seguir completando la configuración de la intención y sus expresiones de muestra, veamos cómo se crean los tipos de slot utilizados en dichas expresiones.