ALEXA

Desarrollo de aplicaciones IoT

para Arduino y ESP8266

Tomás Domínguez Mínguez

ALEXA

Desarrollo de aplicaciones IoT

para Arduino y ESP8266

Tomás Domínguez Mínguez

Alexa. Desarrollo de aplicaciones IoT para Arduino y ESP8266

Primera edición, 2021

© 2021 Tomás Domínguez Mínguez

© 2021 MARCOMBO, S. L.

www.marcombo.com

Cubierta: ENEDENÚ DISEÑO GRÁFICO

Maquetación: cuantofalta.es

Correctores: Nuria Barroso y Beatriz García

Directora de producción: Mª Rosa Castillo

«Cualquier forma de reproducción, distribución, comunicación pública o transformación de esta obra sólo puede ser realizada con la autorización de sus titulares, salvo excepción prevista por la ley. Diríjase a CEDRO (Centro Español de Derechos Reprográficos, www.cedro.org) si necesita fotocopiar o escanear algún fragmento de esta obra».

ISBN: 978-84-267-3291-0

Producción del ePub: booqlab

A todos ustedes.

Sin lectores no habría libros.

TABLA DE CONTENIDO

1. INTRODUCCIÓN

1.1 Interfaces de voz

1.2 Sistemas conversacionales

1.3 IoT

2. ALEXA

3. HABILIDADES

3.1 Tipos de habilidades

3.2 Modelo de interacción

3.3 Invocación de habilidades personalizadas

4. PORTAL DE SERVICIOS PARA DESARROLLADORES DE AMAZON

4.1 Consola del desarrollador de Alexa

4.2 Práctica de creación de una habilidad

4.3 Opciones de configuración de habilidades

5. MODELO DE INTERACCIÓN

5.1 Intenciones

5.1.1 Intenciones personalizadas

5.1.1.1Expresiones de muestra

5.1.1.2Slots

5.1.2 Intenciones estándar

5.2 Slots

5.2.1 Tipos de slot personalizados

5.2.2 Tipos de slot estándar

5.3 Modelo de diálogo

5.3.1 Validación de los valores de un slot

5.3.2 Delegación del diálogo

5.4 Práctica de creación de un modelo de interacción

5.4.1 Establecimiento del nombre de invocación

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

5.4.3 Creación de los tipos de slot

5.4.4 Modelo de diálogo

5.4.5 Construcción del modelo de interacción

5.4.6 Prueba del modelo de interacción

5.5 Formato de datos JSON del modelo de interacción

5.5.1 Formato de datos JSON

5.5.2 Objetos JSON del modelo de interacción

5.5.2.1Objeto languageModel

5.5.2.2Objeto dialog

5.5.2.3Objeto prompt

6. FUNCIONES LAMBDA

6.1 Flujo de comunicación entre un dispositivo Alexa y la función lambda de una habilidad

6.1.1 Protocolo HTTP

6.1.1.1Peticiones HTTP

6.1.1.2Respuestas HTTP

6.1.2 Formato de datos JSON en las comunicaciones HTTP

6.1.2.1Formato de datos JSON de las peticiones HTTP

6.1.2.2Formato de datos JSON de las respuestas HTTP

6.2 Alojamiento de la función lambda de una habilidad en el servicio Alexa

6.3 Módulos de desarrollo Node.js

6.4 Proceso de ejecución de la función lambda de una habilidad

6.4.1 Recepción de solicitudes

6.4.2 Procesamiento de solicitudes

6.4.3 Devolución de respuestas

6.5 Editor de código

6.6 Prácticas de desarrollo de la función lambda de una habilidad

6.6.1 Inicio de la habilidad

6.6.1.1Desarrollo de la función lambda

6.6.1.2Prueba de la habilidad

6.6.2 Invocación de una intención

6.6.2.1Desarrollo de la función lambda

6.6.2.2Prueba de la habilidad

6.7 Gestión de atributos

6.7.1 Tipos de atributos

6.7.2 Adaptadores de persistencia

6.8 Práctica de gestión de atributos de sesión

6.8.1 Creación de las intenciones estándar de confirmación y negación

6.8.2 Desarrollo de la función lambda

6.8.3 Prueba de la habilidad

6.9 Práctica de gestión de atributos persistentes

6.9.1 Creación de la intención de obtención del nombre del usuario

6.9.2 Desarrollo de la función lambda

6.9.3 Prueba de la habilidad

7. USO DE ALEXA DESDE UN TELÉFONO MÓVIL

7.1 Instalación de Alexa en el móvil

8. AMAZON CLOUDWATCH

8.1 Acceso a Amazon CloudWatch

8.2 Práctica de depuración de errores

9. PRÁCTICA DE DESARROLLO DE UNA HABILIDAD. EL JUEGO DE QUIÉN ES QUIÉN

9.1 Creación del modelo de interacción

9.2 Desarrollo de la función lambda

10. EL MÓDULO ESP-01

10.1 Características del ESP-01

10.2 Programación del ESP-01 desde el IDE Arduino

10.3 Prácticas

10.3.1 Integración de Arduino con ESP-01

10.3.2 Cliente web

10.3.3 Cliente NTP

11. ADAFRUIT IO

11.1 Acceso al servicio

11.2 Componentes básicos del servicio

11.2.1 Feeds

11.2.2 Paneles de control

11.3 Integración con Adafruit IO

11.3.1 Librería Adafruit IO Arduino

11.3.2 API HTTP

11.4 Práctica de integración de ESP-01 con Adafruit IO

12. PRÁCTICAS DE CONTROL DE DISPOSITIVOS DOMÓTICOS

12.1 Escenario de integración de servicios

12.2 La placa WEMOS D1 R1

12.3 Actividades previas

12.3.1 Creación de la habilidad

12.3.2 Desarrollo de la estructura básica de la función lambda

12.4 Encendido y apagado de luces por habitación

12.4.1 Creación de los feeds en Adafruit IO

12.4.2 Desarrollo del programa ESP8266

12.4.3 Creación del modelo de interacción

12.4.4 Desarrollo de la función lambda

12.4.5 Pruebas de la habilidad

12.5 Consulta de la temperatura

12.5.1 Creación del feed en Adafruit IO

12.5.2 Desarrollo del programa ESP8266

12.5.3 Creación del modelo de interacción

12.5.4 Desarrollo de la función lambda

12.5.5 Pruebas de la habilidad

12.6 Programación de la temperatura de la calefacción

12.6.1 Creación de los feeds en Adafruit IO

12.6.2 Desarrollo del programa ESP8266

12.6.3 Creación del modelo de interacción

12.6.4 Desarrollo de la función lambda

12.6.5 Pruebas de la habilidad

12.7 Programación de la hora de encendido de la calefacción

12.7.1 Creación del feed en Adafruit IO

12.7.2 Desarrollo del programa ESP8266

12.7.3 Creación del modelo de interacción

12.7.4 Desarrollo de la función lambda

12.7.5 Pruebas de la habilidad

ANEXO. FUNDAMENTOS DE JAVASCRIPT

Unidad 1
INTRODUCCIÓN

Alexa es un asistente virtual que utiliza una interfaz de voz tanto para recibir peticiones del usuario, como para responderle. Dichas respuestas se darán dentro del contexto de una conversación en la que se simula estar hablando con otra persona. Por eso, antes de empezar a desarrollar aplicaciones para este asistente debe conocer qué son las interfaces de usuario basadas en la voz, y los conceptos básicos que gobiernan los sistemas capaces de mantener conversaciones de forma natural. Puesto que nos centraremos en la utilidad práctica de estas aplicaciones en el ámbito IoT (Internet of Things: Internet de las cosas), también se darán algunas nociones básicas de qué hay detrás de esta tecnología y los motivos que hacen que esté cada vez más presente en nuestras vidas.

1.1 INTERFACES DE VOZ

Hasta no hace muchos años, la interacción hombre-máquina se realizaba con un teclado y una pantalla. De la mano de los móviles llegaron las interfaces táctiles, que aumentaron drásticamente su facilidad de uso. El último paso han sido las interfaces de voz, mediante las que ya no es necesario usar las manos, puesto que la comunicación se realiza hablando con la aplicación.

A este tipo de interfaces capaces de permitir la interacción por medio de la voz, se las conoce por su acrónimo inglés VUI (Voice User Interface: interfaz de usuario de voz). A los dispositivos que las incorporan se les denomina VCD (Voice Command Device: dispositivo de comandos de voz). A nivel empresarial, las primeras aplicaciones que utilizaron esta tecnología fueron los sistemas IVR (Interactive Voice Response: respuesta de voz interactiva), desarrollados en la década de 1980. Son los que hoy en día le atienden cuando llama a los centros de atención de clientes de muchas compañías para solicitar información o realizar determinadas gestiones, antes de pasarle con un agente humano (si fuera necesario). A nivel de usuario, las aplicaciones que disponían de este tipo de interfaces aparecieron más tarde, siendo las primeras las de marcación de teléfonos activada por voz.

La gran aceptación y consecuente expansión de las interfaces de voz se debe a su independencia del hablante, es decir, a que son capaces de entender lo que dice cualquier persona, sea cual sea su idioma, su acento o las particularidades de su voz. Además, con este tipo de interfaces se puede hacer prácticamente lo mismo que con cualquier navegador: buscar información, solicitar que suene su música favorita, administrar calendarios y citas, hacer pedidos, jugar, etc. Pero donde hay un sector en el que cobra especial relevancia es en el de IoT y, en concreto, en el ámbito domótico, que es precisamente en el que se centra este libro.

Las ventajas de uso de las interfaces de voz son la velocidad de entrada (es más rápido hablar que escribir), así como su capacidad para ser incorporadas a dispositivos que no requieran pantalla, pudiendo utilizarse en relojes o pulseras de tamaño reducido. Además, permiten su uso a personas con capacidades visuales o motoras disminuidas. Incluso, puede resultar imprescindible en el desarrollo actividades profesionales que requieran trabajar con ciertas aplicaciones mientras se tiene las manos ocupadas.

A nivel empresarial, el empleo de interfaces de voz también tiene ventajas, ya que representan una oportunidad de negocio. Para 2021, se estima que las marcas que adopten este tipo de interfaces y rediseñen sus sitios web, disfrutarán de un crecimiento del 30 % en los ingresos.

1.2 SISTEMAS CONVERSACIONALES

Los sistemas conversacionales son aquellos capaces de comprender el lenguaje natural y entablar una conversación con una persona. Su objetivo principal es el de mejorar la experiencia del usuario, sustituyendo las formas tradicionales de interacción con las aplicaciones por otra basada en la voz. Se suelen utilizar para dar información sobre cuestiones que se le puedan plantear o ejecutar las órdenes que se le pida realizar.

Los sistemas conversacionales (también se les llama chatbots) nacieron mucho antes que las interfaces de voz, pero ha sido gracias a estas cuando han empezado a vivir una segunda juventud. Uno de los primeros (Eliza) se creó en el MIT (Massachusetts Institute of Technology) entre 1964 y 1966 por Joseph Weizenbaum. Realizaba un procesamiento de lenguaje natural para tratar de mantener una conversación de texto coherente entre un psicólogo (al que simulaba) y su cliente (el usuario).

Desde entonces, y hasta hace poco tiempo, los sistemas conversacionales eran únicamente materia de estudio por parte de expertos en el área de la inteligencia artificial. Sin embargo, los avances en procesamiento del lenguaje natural y el reconocimiento automático del habla han democratizado su uso, haciendo que esté cada vez más presente en un número mayor de dispositivos. Este tipo de técnicas hacen que los sistemas conversacionales no solo tengan la facultad que oír lo que se les diga, sino de llegar a entenderlo, aunque use palabras o frases diferentes. Además, son capaces de mantener una conversación coherente, utilizando información de contexto para que la interacción con ellos sea similar a la que tendría con cualquier otra persona.

Su uso es cada vez más frecuente en nuestra vida diaria. Por eso, Gartner ya identificó en 2017 los sistemas conversacionales como una de las diez principales tendencias tecnológicas estratégicas.

El ámbito de uso de los sistemas conversacionales es cada vez más amplio, incluyendo, desde los más sencillos, en los que se solicita información concreta, como la previsión meteorológica, hasta los más complejos, empleados por centros de atención al cliente de grandes compañías, pasando por aquellos que permitan el control de dispositivos de uso doméstico. Será precisamente en el ámbito IoT, especialmente el centrado en sistemas domóticos, al que se orientan las prácticas de este libro.

1.3 IoT

Internet de las cosas (IoT) es un concepto propuesto por Kevin Ashton en 1999 para referirse a la conexión de objetos cotidianos a través de Internet. Su implantación es cada vez mayor y abarca, entre otros, los sectores de la medicina, la industria, el transporte, la energía, la agricultura, las ciudades inteligentes o los hogares, que es en el que nos centraremos. Hoy en día es cada vez más frecuente encontrar dispositivos en casa capaces de ser utilizados de forma remota a través de Internet, bien sea para su control o para obtener información de los sensores que lleven incorporados.

El éxito de la tecnología IoT se debe, en gran parte, a su capacidad para introducir objetos de uso diario en el mundo digital, abriendo un amplio abanico de nuevas posibilidades que incrementan enormemente su utilidad, ya que permiten el control de los objetos a distancia (p. ej., encender o apagar una luz) o que estos informen de datos recogidos por sus sensores (p. ej., humedad o temperatura). Todo ello desde cualquier dispositivo en cualquier parte del mundo.

Para controlar o recoger datos de los dispositivos IoT se utilizan generalmente interfaces clásicas que se ejecutan en un ordenador y, cada vez con más frecuencia, en teléfonos móviles. Si en vez de estas se emplearan interfaces de voz, la interacción se volvería más natural, haciendo más sencillo el uso de las aplicaciones. Por este motivo, la unión de las tecnologías IoT y las relacionadas con el desarrollo de interfaces de voz están llamadas a formar un tándem que hará que este tipo de dispositivos tengan cada vez un uso más cotidiano.

Unidad 2
ALEXA

Alexa es el asistente virtual de Amazon. Nació en 2014 junto con el altavoz inteligente Amazon Echo, pero hasta 2018 no ha estado disponible en español. Su nombre fue elegido por varias razones, la primera de la cuales hace referencia a la Biblioteca de Alejandría (Alexandria), uno de los mayores centros de difusión del conocimiento de la Antigüedad. El otro motivo que favoreció su elección fue más práctico, ya que la letra “x” es una consonante poco común y fácil de reconocer. Puesto que el asistente se activa por voz, se quería minimizar el riesgo de confundirlo con otras palabras que pudieran despertarlo accidentalmente.

Aunque en un principio Alexa solo estaba vinculado a la gama de altavoces inteligentes Amazon Echo, posteriormente se permitió que otros fabricantes pudieran integrarlo en sus productos. Así, podemos encontrarlo hoy en día en teléfonos móviles (Android o iOS), pasando por televisores (LG, Sony, Hisense, Toshiba, etc.), interruptores, enchuches, bombillas o sensores (Osram, Philips, Belkin, Nest, etc.), hasta coches (Ford, Volkswagen, etc.).

Si abrir el asistente a dispositivos que no fueran productos de Amazon favoreció el uso de Alexa, lo que empujó definitivamente su expansión fue permitir que cualquier desarrollador pudiera ampliar sus capacidades. De esta forma, lo que se puede llegar a hacer con Alexa ya no depende únicamente de los comandos de voz que tiene integrados, sino de las habilidades (skills) que se instalen para ampliar su funcionalidad. Hay miles entre las que elegir, tanto gratuitas como de pago.

Esta estrategia de permitir integrar el asistente en dispositivos de otros fabricantes, así como el desarrollo de habilidades por parte de terceros, ha provocado que hoy en día Alexa sea uno de los asistentes virtuales de referencia en el mercado.

Unidad 3
HABILIDADES

Desde el momento en el que pueda hablar con Alexa, disfrutará de un compañero virtual al que podrá pedirle, por ejemplo, que suene una canción, ver su serie favorita o resumirle las últimas noticas del día. Para dar respuesta a estas solicitudes, el asistente debe disponer de las capacidades adecuadas, que serán las que ya tiene integradas o haya adquirido de habilidades (skills) desarrolladas por terceros.

A lo largo de los siguientes capítulos, aprenderá a desarrollar sus propias habilidades que, al ejecutarse en la nube, podrán usarse desde cualquier dispositivo Alexa al que esté conectado con su usuario de Amazon.

3.1 TIPOS DE HABILIDADES

El desarrollo de las habilidades se realizará con un conjunto de herramientas llamado ASK (Alexa Skills Kit), pudiendo ser de los siguientes tipos:

• Personalizada (custom). Permite atender cualquier tipo de solicitud. Para ello, deberá desarrollar, desde cero, el modelo de interacción (la conversación) que quiera que se establezca entre el usuario y Alexa. En dicho modelo, se determinará lo que se pueda llegar a pedir (intenciones), junto con las expresiones utilizadas para ello.

• Casa inteligente (smart home). Como su nombre indica, este tipo de habilidad controla dispositivos domésticos inteligentes, como luces, termostatos, televisiones, cerraduras, etc. Se basa en modelos de iteración preconstruidos, que incorporan las acciones que atienden las habilidades (a las que se llama directivas del dispositivo, como, por ejemplo, encender, apagar o cambiar el nivel del brillo de una luz), así como las expresiones empleadas para solicitarlas (p. ej., “enciende la luz” o “sube la intensidad de la luz un 30 %”). Sin embargo, dan menos control sobre la conversación mantenida con el usuario, que deberá ajustarse necesariamente a dicho modelo de interacción.

• Flash briefing. Proporciona al usuario contenido breve, como los titulares de las noticias o el pronóstico del tiempo. Al igual que en las habilidades de casa inteligente, utilizará un modelo preconstruido con las expresiones que utilizaría el usuario para pedir el briefing flash o solicitar las noticias (p. ej., “dame las noticias de hoy”), además del formato del contenido en el que Alexa le dará la información solicitada. El desarrollador de este tipo de habilidades se encargaría básicamente de definir las fuentes de las que se tendría que obtener dicho contenido.

• Vídeo. Ofrece contenido de vídeo, como programas de televisión o películas. También está basado en un modelo de interacción preconstruido, con las solicitudes que maneja la habilidad (directivas del dispositivo) y las expresiones con las que el usuario puede invocarlas. En este caso, el desarrollador de la habilidad programaría el comportamiento de cada una de estas directivas (p. ej., la de buscar o reproducir contenido de vídeo), o cómo se tendrían que mostrar los resultados.

• Música. Habilita la reproducción de canciones, listas de reproducción o emisoras de radio, a través de un dispositivo habilitado para Alexa. En este caso, quien programa la habilidad debe definir el modelo de interacción, convirtiendo las expresiones del usuario (como, por ejemplo: “Alexa, pon música”) en solicitudes que la habilidad gestionaría para enviar el contenido de audio solicitado al dispositivo.

• Listas. Como indica su nombre, este tipo de habilidad le permitirá la gestión de listas, como, por ejemplo, la de la compra. Con ellas podrá agregar, borrar o modificar elementos a una lista de cualquier tipo.

El modelo de interacción establece la interacción con la habilidad a través de un diálogo. Sería análogo a la interfaz de una aplicación tradicional. La diferencia es que ahora las aplicaciones son habilidades y las interfaces gráficas son de voz. Por ese motivo, en vez de ventanas, botones o menús, lo que manejará a partir de ahora serán expresiones (frases).

De todos los tipos de habilidad descritos, trabajará únicamente con las personalizadas, ya que, al no tener que ceñirse a modelos de iteración preconstruidos, son los que dan mayor libertad a la hora de definir la forma en la que deberá transcurrir la conversación con el asistente. En realidad, este tipo de habilidades engloba a todas las demás.

3.2 MODELO DE INTERACCIÓN

Un modelo de interacción establece la estructura de la conversación que Alexa mantendrá con el usuario en el contexto de una habilidad. Se compone de los siguientes elementos principales:

• Intenciones (intents). Son las acciones que el usuario puede llegar a solicitar, cada una de las cuales corresponde (como indica el nombre de este componente) a una intención específica. Por ejemplo, una habilidad que controlara la luz de una habitación podría tener tres intenciones: las que atienden las órdenes para encenderla o apagarla, y una tercera que permita preguntar por el estado en el que se encuentra (encendida o apagada).

• Expresiones de muestra (Sample Utterances). Son las palabras o frases utilizadas por los usuarios para invocar una intención. Estas expresiones deben abarcar todas las formas posibles de solicitar la ejecución de una determinada acción. Cuantas más haya y más variadas sean, mayor facilidad tendrá Alexa para saber a qué intención corresponden. Por ejemplo, para encender la televisión, se podría decir: “pon la televisión” o “enciende la tele”. Ambas expresiones deberían invocar la misma intención, es decir, realizar la misma acción: encender la televisión.

Es muy difícil introducir todas las variaciones posibles de expresiones empleadas para solicitar las acciones. Por eso, Alexa dispone de algoritmos de inteligencia artificial que le permiten generalizar dichas frases. Aplicando estos algoritmos, podrá saber si lo que ha dicho el usuario “encaja” con alguna de las expresiones de ejemplo, aunque no coincida exactamente con ella. En cualquier caso, cuantas más declaraciones de ejemplo tenga una intención, más probabilidades habrá de que se invoque la más adecuada.

• Tipos de slots. Las expresiones de los usuarios representan texto libre difícil de procesar por un programa informático, que es el que realmente tiene que realizar las acciones. Por ese motivo, es necesario extraer la información relevante de dichas expresiones (lo que vulgarmente se conoce separar la paja del grano), función que realizan los slots. Estos componentes pueden verse como variables, que recogen la información proporcionada como entrada al programa encargado de realizar la acción solicitada.

Al igual que cada variable es de un determinado tipo, los slots también pertenecen a un tipo de slot (slot type). Por ejemplo, si un usuario dijera: “Alexa, enciende la luz de la sala”, la palabra “sala” podría ser el valor de un tipo de slot que sirviera para identificar la habitación en la que está situada la luz. Ese valor sería el utilizado por el programa encargado de atender la petición para saber a qué dispositivo (en este caso, el situado en la sala) tiene que dirigir la orden.

• Modelo de diálogo. Este último componente, que es opcional, identifica la conversación que sería necesario mantener con el usuario para recopilar toda la información requerida para invocar una intención. Si este dijera, por ejemplo: “Enciende la luz” y hubiera varias luces en la casa, para poder llevar a cabo esta orden habría que preguntarle en qué habitación se encuentra. Este diálogo puede ser delegado en Alexa, que se encargaría de hacer las preguntas y recoger la información necesaria de las respuestas dadas por el usuario, simplificando el código de la habilidad. Siguiendo con el ejemplo de la luz, Alexa preguntaría: “¿En qué habitación está la luz que desea encender?”. Si la respuesta fuera: “La de la cocina”, recogería el valor del slot que contiene la habitación (en este caso “cocina”) de la misma forma que si el usuario hubiera dicho en un primer momento: “Enciende la luz de la cocina”.

En un próximo capítulo estudiará con más detalle todos estos conceptos mientras practica con ellos desarrollando una habilidad que le permitirá “hablar” con una máquina de café para que se lo prepare a su gusto.

3.3 INVOCACIÓN DE HABILIDADES PERSONALIZADAS

Para invocar una habilidad personalizada, deberá llamarla por su nombre (invocation name). Por ejemplo, si este fuera “previsión meteorológica”, cuando dijera: “Alexa, previsión meteorológica” ya podría empezar a plantear cuestiones sobre el tiempo.

Aunque para iniciar una habilidad solo se requiere decir su nombre de invocación, se pueden añadir otras palabras que hagan la expresión más natural. Dependiendo del tipo de habilidad invocada, se podría utilizar: “pide”, “abre, “empieza”, “empiece”, “lanza”, “juegue”, “juega el juego”, “pon” o “inicia”. Por lo tanto, la habilidad del ejemplo anterior también podría invocarse diciendo: “Alexa, abre previsión meteorológica”. Dicha expresión se muestra gráficamente en la siguiente imagen.

Para empezar a hablar con el asistente, primero se ha usado la palabra “Alexa”, a la que se conoce como palabra de activación porque es la que despierta el asistente, poniéndole a la escucha de lo que se diga a continuación. Luego viene la palabra de lanzamiento (opcional), que indica a Alexa que lo que va a decir a continuación es el nombre de la habilidad que deberá invocar. Por último, aparece el nombre de invocación de la habilidad, en este caso “previsión meteorológica”.

Como pronto descubrirá, cuando utilice el simulador o la aplicación de Alexa en un teléfono móvil, no será necesario que diga la palabra de activación (“Alexa”).

Las habilidades de casa inteligente no requieren que se invoque el nombre de una habilidad. El modelo de interacción preconstruido que viene incorporado en Alexa le permite atender frases del estilo: “Alexa, enciende la luz de la cocina”, asociadas a una determinada intención.

Los usuarios también pueden incluir otras palabras en sus expresiones de invocación de habilidades como:

• Los artículos determinados “el”, “la”, “los”, “las” antes del nombre de la invocación. Por ejemplo, “Alexa, abre la previsión meteorológica”.

• Ciertas expresiones como: “Puedes...”, “Me gustaría...”, “Yo quiero...” o, simplemente, “Quiero...”. Por ejemplo, “Alexa, quiero abrir la previsión meteorológica”.

• Para realizar peticiones de forma más cortés, puede añadir “por favor” al final de la declaración. Por ejemplo: “Alexa, abre la previsión meteorológica, por favor”.

Una vez dentro de la habilidad, el usuario podrá solicitar cualquiera de las acciones que la componen (invocar una de sus intenciones), como, por ejemplo, preguntar si va a llover hoy.

Para que la solicitud sea atendida, la expresión utilizada deberá encajar con alguna de las expresiones de muestra de sus intenciones, que en este caso concreto sería la que permite saber si va a llover. Dicha expresión contiene un slot, cuyo valor es el día para el que se desea conocer la previsión de lluvia (“hoy”).

Hasta ahora, la forma de interactuar con Alexa ha sido invocando una habilidad (la de previsión meteorológica) y posteriormente realizar una solicitud asociada a una intención específica (preguntar si va a llover). Pero también es posible pedir a Alexa que haga algo en el mismo momento en el que se invoca la habilidad. En ese caso, se debe combinar el nombre de la habilidad con alguna de las expresiones de muestra de la intención asociada a la solicitud realizada. Para ello, se debe llamar a la habilidad seguida de la intención en una frase compatible con “pregúntale a”, “dile a”. Las frases admitidas para invocar una habilidad con su intención son:

• Pregúntale a <nombre de invocación> si/sobre/que/qué/cómo’/… <solicitud de información o pregunta>

• Pídale a <nombre de invocación> <alguna acción>

• Dile a <nombre de invocación> que/sobre <alguna acción>

• Abre <nombre de invocación> para <alguna acción>

Si, por ejemplo, quisiera realizar una pregunta dentro de una habilidad, solo podría utilizar una expresión que comenzara por “pregúntale a” si fuera seguida del nombre de invocación de dicha habilidad, las palabras “si”, “sobre”, “que”, “qué”, “cómo”, etc., y una expresión que casara con alguna de las de muestra de la intención que atiende la pregunta. Por ejemplo, “Alexa, pregúntale a previsión meteorológica si va a llover hoy”. Gráficamente se mostraría de la siguiente forma:

Tras llamar a Alexa, en este caso se han utilizado las palabras de lanzamiento “pregúntale a” antes del nombre de invocación de la habilidad, ya que la expresión del usuario quedaba más natural al realizar una consulta. Dicha consulta será atendida por la intención de previsión de lluvia, al haber empleado posteriormente la expresión: “va a llover hoy”. Con el ánimo de componer una frase correctamente construida, también se ha utilizado la preposición “si” para separar la habilidad de la intención.

No todas las combinaciones de palabras de lanzamiento y/o auxiliares son permitidas, por lo que tendrá que probar cuáles son las opciones más adecuadas en cada caso.

Unidad 4
PORTAL DE SERVICIOS PARA DESARROLLADORES DE AMAZON

El portal de servicios para desarrolladores de Amazon, como indica su nombre, es el punto de acceso a los servicios ofrecidos por Amazon a los desarrolladores de aplicaciones que hacen uso de sus tecnologías, como, por ejemplo, Alexa.

Para acceder a dicho portal, vaya a https://developer.amazon.com. Allí, pulse sobre el enlace “Consola del desarrollador”, situado en la parte superior derecha.

Le aparecerá una pantalla en la que tendrá que autenticarse. Si ya tiene una cuenta en Amazon, puede entrar con ella. En caso contrario, tendrá que crearla pulsando el botón “Crea tu cuenta de” situado en la parte inferior.

Verá una nueva pantalla en la que tendrá que rellenar su nombre, un correo electrónico válido y una contraseña. Vuelva a pulsar el botón “Crea tu cuenta de”.

A partir de ese momento siga las instrucciones y rellene los últimos datos que se le solicite (en los de empresa puede poner los suyos).

Una vez finalizado este proceso, ya dispondrá de un usuario de acceso a la consola del desarrollador. Para entrar en ella, solo tiene que volver de nuevo a https://developer.amazon.com e introducir su correo electrónico y la contraseña con la que se dio de alta en la consola (no la del correo).

Se encontrará delante de una nueva pantalla desde la que podrá acceder a las consolas de los diversos servicios ofrecidos por Amazon a los desarrolladores. Relacionados con Alexa hay dos: Alexa Skills Kit (ASK) y Alexa Voice Sevice (AVS). El primero es el que permite el desarrollo de las habilidades de Alexa, mientras que el segundo lo utilizaría para añadir un control por voz a dispositivos con micrófono, altavoz y capacidades de procesamiento suficientes. Usted solo usará Alexa Skills Kit, así que pulse sobre él.

El símbolo de admiración que aparece en las iniciales de su nombre (situado en la parte superior derecha) le informa de que, en caso de que desarrolle habilidades de pago deberá cumplimentar la correspondiente información asociada a dichas retribuciones, así como de los impuestos correspondientes. Puesto que el ámbito de este libro se enfoca al desarrollo de habilidades de carácter personal, no tendrá que hacer nada al respecto.

Antes de acceder a la consola del desarrollador de Alexa, cambie el idioma. Esto no tendrá como consecuencia que todos los menús y documentación vayan a estar en español, pero, cuando sea posible, se mostrará en dicho idioma. Para ello, vaya al final de la página. En la esquina inferior izquierda podrá ver el idioma actual (“English”). Pulse en dicha palabra para que se despliegue un menú del que deberá elegir el español (en mi caso, el de España).

4.1 CONSOLA DEL DESARROLLADOR DE ALEXA

Al entrar en la consola del desarrollador de Alexa, lo primero que verá es la lista de habilidades que tuviera creadas (de momento, ninguna).

La consola del desarrollador de Alexa cuenta con diferentes medidas de seguridad. Por eso, cuando introduzca el usuario y la contraseña, le pedirá frecuentemente que repita la contraseña e introduzca el código captcha que aparece en pantalla. En otras ocasiones, le enviará un código de verificación a su cuenta de correo electrónico, que deberá introducir para poder acceder a la consola.

La cabecera de esta ventana, que está formada por una serie de enlaces y menús, estará siempre visible en la consola. En su parte izquierda, el nombre “alexa developer console” es un enlace que, al pulsarlo, le llevará a la página inicial (la que muestra la lista de habilidades) independientemente de donde se encuentre. En la parte derecha destacan dos menús: el primero de ellos, que lleva las iniciales de su nombre, le permitirá ver sus datos de configuración o salir de la consola; desde el segundo podrá acceder a la documentación, los foros o utilizar la consola de otros servicios Amazon. Veamos en detalle cada uno de estos menús.

El primero tiene dos opciones: “Configuración” y “Cerrar sesión”. La última opción no requiere explicaciones. La primera, como indica su nombre, permite ver su información de configuración agrupada por pestañas. Selecciónela para verla.

La siguiente imagen muestra dichas pestañas.

Entre ellas destaca la primera, ya que contiene sus datos personales (nombre, correo electrónico, teléfono y contraseña), que podrá modificar cuando quiera pulsando en el botón “Edit”. También puede ver su rol, que de forma predeterminada es el de administrador.

En la pestaña “Company profile” puede ver la información de contacto de empresa, que coincide con la suya al haber introducido los mismos datos en el proceso de registro. Todos los campos son editables (el botón “Edit” se puede ver en la parte inferior derecha), excepto el nombre del desarrollador o el nombre de la empresa.

El resto de pestañas contienen información que no va a tener que editar debido a que desarrollará habilidades sin ánimo de lucro, de carácter personal y privadas.

Así, en la pestaña “Payment information” se mantendría la información bancaria necesaria para que Amazon pudiera realizarle pagos, mientras que los datos relacionados con los impuestos asociados a contenidos digitales o anuncios mostrados, estarían en “Tax identity”.

No tendrá necesidad de usar la pestaña “User permissions” (en el que estaría la lista de usuarios que podría tener acceso a su cuenta) por trabajar de forma individual, no dentro de un equipo de trabajo.

Tampoco será necesario establecer y/o consultar el contenido de las pestañas “Mobile ads” (configura los anuncios que podrían mostrarse), “Identity” (guarda la clave utilizada para validar transacciones fuera de su aplicación) o “Security profiles” (establece los distintos perfiles de seguridad de sus aplicaciones).

El segundo menú de la cabecera de la consola (el de los tres puntos verticales), muestra dos grupos de opciones. En el primero, están las que le llevarían a la documentación (usada de referencia en este libro), a los foros o al formulario para ponerse en contacto con el servicio de atención al cliente de Alexa. El segundo grupo de opciones, le conduciría a las consolas de los diferentes servicios. La única que usará usted es “Alexa Developer Console” (en la que se encuentre ahora).

La consola del desarrollador de Alexa está organizada en una serie de pestañas.

Puesto que la consola del desarrollador de Alexa está en continua evolución, podrían aparecer otras diferentes.

La información contenida en cada una de ellas es la siguiente:

• “Skills.” Es la que aparece seleccionada por defecto cuando entra en la consola. En ella, se muestra la lista de habilidades creadas.

• “Earnings.” Mostraría la información de las ganancias obtenidas en caso de que decidiera cobrar por utilizar sus habilidades o estas incorporasen anuncios. No tendrá que acceder a ella porque solo desarrollará habilidades de uso personal.

• “Payments.” Aquí estarían los pagos recibidos a cuenta de las ganancias anteriores. Tampoco la utilizará.

• “Hosting.” Muestra los recursos utilizados cuando el código de la habilidad resida en el propio servicio Alexa, que será su caso. Verá tanto información de uso mensual (“MONTHLY USAGE”) de los recursos de procesamiento (proporcionados por el servicio AWS Lambda), como de almacenamiento (ofrecidos por el servicio Amazon S3). También podrá ver el límite al que puede llegar de forma gratuita (“MONTHLY LIMIT”).

4.2 PRÁCTICA DE CREACIÓN DE UNA HABILIDAD

Está a punto de crear su primera habilidad. Cuando la inicie, podrá establecer un diálogo con una máquina de café virtual para pedir dos tipos de café: normal y descafeinado. Cada uno de ellos podrá ser a su vez solo, cortado, con leche. Naturalmente, al café se le podrá añadir azúcar, sacarina o ningún tipo de edulcorante.

Si hubiera salido de la consola del desarrollador de Alexa, vaya a la dirección https://developer.amazon.com/alexa y seleccione la opción “Alexa Developer Console” en el menú situado en la parte superior derecha (el de los tres puntos verticales).

También se podría haber entrado desde https://developer.amazon.com pulsando el enlace “Consola del desarrollador”. Una vez autenticado, se mostraría la pantalla en la que tendría que seleccionar el servicio Alexa Skills Kit (sería el mismo camino seguido cuando se registró).

Una vez dentro de la consola del desarrollador, pulse el botón “Create Skill”.

Solo puede crear 75 habilidades. A partir de ese momento, si quisiera crear otra nueva, tendría que borrar alguna de las existentes.

Aparece una pantalla en la que deberá introducir el nombre de la habilidad y el idioma predeterminado (más delante se explicará cómo agregar idiomas adicionales). El nombre sería el que los clientes verían cuando publicara la habilidad. Como esta será de carácter personal, solo la podrá ver (y usar) usted.

Asigne el nombre “Máquina de café” a su nueva habilidad y seleccione el idioma español. Puede usar la variante española (ES), mexicana (MX) o norteamericana (US).

Debajo de estos dos campos, podrá seleccionar el tipo de habilidad que desea crear: personalizada, casa inteligente, Flash briefing o vídeo. Por defecto, está seleccionada la personalizada (“Custom”). Déjelo así.

Finalmente, tendrá que elegir dónde quiere que se aloje el código de la habilidad. Podrá ser en el propio servicio de Alexa o en cualquier otro que usted conozca. Por simplicidad se utilizará el de Alexa y, en concreto, la opción que le permita el desarrollo de código JavaScript, es decir, que pueda ejecutarse en Node.js: “Alexa-Hosted (Node.js)”.

De forma muy simplificada, Node.js es un entorno de ejecución de código JavaScript de lado de servidor (a diferencia del empleado en los navegadores web, en el lado cliente).

En realidad, cuando usa la opción “Alexa-Hosted (***)”, está usando AWS Lambda para alojar y ejecutar el código de la habilidad. La ventaja que proporciona es que no tendrá que gestionar dicho servicio desde su propia consola (diferente de la de Alexa), por lo que se gana en agilidad de desarrollo (aunque se pierde en flexibilidad).

Solo podrá trabajar con JavaScript o Python, y estará limitado a los recursos proporcionados de forma gratuita (AWS Free Tier). En cualquier caso, se ha elegido esta opción porque para las prácticas desarrolladas a lo largo del libro esto no supondrá ninguna limitación, además de ser gratuito.

Más adelante se explicarán las diferentes formas de alojar el código de una habilidad.

Pulse el botón “Create skill” que hay en la parte superior derecha de la ventana.

Debajo del botón “Create skill” puede ver las opciones con las que se creará la habilidad: de tipo personalizada, alojada en el propio servicio Alexa y, en este caso, en servidores de la región N. Virginia. Una región es una zona geográfica donde se ubican físicamente los servidores administrados por Amazon. Si pulsara el desplegable de esta última opción, podría elegir otra diferente.

Se mostrará una nueva ventana en la que tendrá que elegir la plantilla a partir de la que quiere empezar a desarrollar su propia habilidad. Va a usar la que está seleccionada por defecto (“Hellow World”), por lo que solo tendrá que pulsar el botón “Continue with template”.

Hecho esto, se encontrará finalmente la pantalla desde la que podrá empezar a crear y configurar todos los componentes de su habilidad.

A la derecha vera una serie de mensajes informativos que le indican (de arriba abajo) que esta habilidad ya podría utilizarse, un tutorial en el que le enseñan cómo está construida y un aviso para que cambie el nombre con el que quiera invocarla. Pulse en el icono con el aspa para eliminarlos.

4.3 OPCIONES DE CONFIGURACIÓN DE HABILIDADES

Antes de empezar a desarrollar el modelo de interacción de una habilidad, conviene conocer las posibilidades que le ofrece la consola. En primer lugar, observe que el encabezado tiene ahora una serie de pestañas. En ellas se agrupan las opciones de configuración que hay disponibles en las distintas fases del desarrollo de la habilidad.

El contenido de cada una de ellas es el siguiente:

• “Build.” Aquí es donde creará el modelo de interacción de su habilidad. Las opciones que aparezcan serán diferentes dependiendo del tipo de habilidad elegida, que en su caso ha sido la personalizada. Es la pestaña seleccionada por defecto cuando entre en una habilidad.

• “Code.” Al haber elegido la opción en la que el código se aloja en el propio servicio, desde esta pestaña podrá editar y desplegar el código JavaScript de su habilidad.

• “Test.” Contiene un simulador de Alexa que le permitirá probar el comportamiento de la habilidad.

• “Distribution.” Muestra una vista previa de cómo aparecería su habilidad en la tienda de habilidades. No la va a utilizar porque las que desarrolle serán de carácter privado.

• “Certification.” Permite realizar los chequeos previos necesarios para publicar una aplicación (habilidad). Por el mismo motivo indicado el punto anterior, tampoco la usará.

• “Analytics.” Presenta las métricas de uso de su habilidad, así como el número de sesiones abiertas, el número de clientes únicos (en su caso uno, al ser una habilidad privada), el número de intenciones invocadas, etc.

Además, en la parte izquierda de dichas pestañas podrá ver el nombre de la habilidad y un enlace (“Your Skills”) que le llevará a la página inicial de la consola, aquella en la que muestra la lista de habilidades que tenga creadas. Púlselo.

Como puede apreciar en la imagen inferior, ahora aparece la habilidad que acaba de crear, en la que, además del nombre, se indica el idioma (español de España), la última vez que se ha modificado (en este caso cuando se creó) y su estado (en desarrollo).

A la derecha hay un menú desplegable con las siguientes opciones:

• “Measure.” Le llevará a la pestaña “Analitycs” de la habilidad.

• “Edit.” Irá a la pestaña “Build” de la habilidad.

• “Delete.” Borra la habilidad.

Pulse en el nombre de la habilidad “Máquina de café” para volver a la pantalla en la que se encontraba anteriormente. Ahora observe que, justo debajo del enlace “Your Skills”, se encuentra el idioma de la habilidad (el español, tal como indicó al crearla). Si pulsa sobre él, podrá añadir nuevos idiomas (una misma habilidad podría llegar a usarse en varios idiomas). Para ello, deberá seleccionar la opción “Language Settings” del menú desplegable.

Aparecerá una ventana con todos los idiomas en los que puede ser usada la habilidad (ahora solo el español). Pulsando en el enlace “Add new language” se desplegarán todos aquellos que podrían añadirse. Solo tiene que ir seleccionándolos uno a uno. En caso de error, podrá eliminarlos con el enlace “Remove” que hay a su derecha.

Situados debajo del campo con el idioma se encuentran los grupos de opciones de configuración de la habilidad.

De todos ellos, únicamente trabajará con las opciones del grupo “CUSTOM”, ya que son las que le permitirán establecer el modelo de interacción de una habilidad.

En el siguiente grupo (“MODELS”) podrá añadir o borrar un modelo de interacción a esta habilidad. Al haberla creado inicialmente como personalizada, si pulsa sobre él, en el panel principal podrá observar que pertenece a este tipo. Sin embargo, le da la opción de añadir un modelo de casa inteligente (“Smart Home”). Déjelo tal como está.

Con las opciones del grupo “IN-SKILL PRODUCTS” se determina el tipo de compras que podría hacerse con esta habilidad, así como su precio. Puesto que las habilidades que va a desarrollar son de carácter personal, no tendrá que hacer nada en este sentido.

En “ACCOUNT LINK” se realizan las configuraciones necesarias para conectar la identidad del usuario de Alexa con la que tenga en otras aplicaciones o servicios a los que se acceda desde la habilidad. Como no tendrá que acceder con su usuario Alexa a otros servicios autenticados, no usará ninguna de las opciones de este grupo.

Tampoco tendrá que entrar en “PERMISSIONS”, ya que es donde se identifica la información de carácter personal sobre la que habría que solicitar permiso al cliente en caso de que la habilidad la necesitara para su funcionamiento. Desde el punto de vista legal, la protección de datos personales es un tema de especial relevancia. En las prácticas que realice no tendrá que manejar este tipo de información.

Por lo tanto, centre su atención en el grupo de opciones que forman parte del grupo “CUSTOM”.

Las principales opciones de configuración de este grupo son:

• “Invocation.” Permite introducir la expresión con la que quiera comenzar la interacción con una habilidad.

• “Interaction Model.” Agrupa todas las opciones relacionadas con la creación del modelo de interacción. Si pulsa sobre él podrá ver cuáles son:

- “Intents.” Al seleccionarla, muestra en el panel principal la lista de intenciones de la habilidad. Pulsando el símbolo “>” que tiene a su derecha también puede verlas debajo, como opciones de un submenú: primero las personalizadas y luego las estándar (built-in intents). El número que hay entre paréntesis indica las que hay. Al haber utilizado la plantilla “Hellow World Skill”, puede ver la intención personalizada “HelloWorldIntent” creada en dicha habilidad, así como las estándar AMAZON.CancelIntent, AMAZON.HelpIntent, AMAZON.StopIntent y AMAZON.NavigateHomeIntent.

- “Annotation sets.” Es un conjunto de expresiones de prueba que se asocian a las intenciones que deberían invocar. Será utilizado por la herramienta NLU (Natural Language Undedestanting: Comprensión del Lenguaje Natural) para determinar si el comportamiento de una habilidad es el esperado.

- “Intent history.” Muestra, de forma agregada y anónima, expresiones frecuentes usadas por los usuarios mientras utilizan la habilidad, así como las intenciones invocadas en cada caso. Se emplea, básicamente, para conocer cómo se interactúa con una habilidad y, así, identificar mejoras que podrían aplicarse al modelo de interacción.

- “Utterance conflicts.” Al pulsar esta opción, en el panel principal verá los conflictos provocados por expresiones de muestra similares, pero que están asociadas a intenciones diferentes. En esos casos, cuando el usuario dijera una de dichas expresiones, Alexa no sabría cuál de las intenciones que colisionan tendría que invocar.

- “JSON Editor.” Aquí podrá hacer lo mismo que utilizando las opciones anteriores, solo que, en vez de usar la interfaz gráfica, escribirá objetos JSON. También podrá importar un fichero con dicho formato que contenga el modelo de interacción de la habilidad.

• “Assets.” Al pulsarla, permite ver como única opción los tipos de slots de la habilidad.

- “Slot types.” Permite crear los tipos de slot personalizados a los que se asociarán los slots contenidos en las expresiones de muestra de las intenciones. El número que hay entre paréntesis a su derecha indica los que tiene.

JSON (JavaScript Object Notation: Notación de objetos JavaScript) es uno de los formatos de intercambio de datos más utilizados en Internet. Tendrá ocasión de estudiarlo más adelante.

El resto de opciones del grupo “CUSTOM” las puede ver en la siguiente imagen.

Aunque no las va a utilizar, se describirá brevemente a título informativo:

• “Multimodal Responses.” Aquí podrá crear las respuestas de audio o visuales que quiera ofrecer al usuario para complementar y mejorar la experiencia de voz. Este tipo de respuestas es especialmente interesante si el dispositivo desde el que se utiliza Alexa tiene pantalla o hay que presentar grandes cantidades de información.

• “Interfaces.” Habilita el uso de interfaces que proporcionan directivas para el manejo de audio, vídeo, botones echo (pulsadores que permiten una interacción física con Alexa), etc. La única opción de configuración que podría llegar a usar es la de delegación automática de la conversación (“Auto Delegation”), que por defecto estará habilitada. Esto permitirá que, si el usuario no ha completado la información requerida en los slots obligatorios de una intención, Alexa establezca un diálogo con él para tratar de recabarla. Este comportamiento lo estudiará más adelante cuando se expliquen los modelos de diálogo.

• “Endpoint.” Permite especificar el punto de acceso al código de la habilidad. Aunque posteriormente se explicarán en detalle las diferentes formas de hospedaje de dicho código, le adelanto que, al desarrollarlo en la propia consola de Alexa se establecerá automáticamente, por lo que no tendrá que hacer nada al respecto.

Por último, habrá observado que en la parte derecha de la consola aparece una checklist que indica el grado de avance en el desarrollo de su habilidad. Está formado por una serie de pasos que obligatoriamente deberá completar para poder empezar a usarla.

Dichos pasos son los siguientes:

• “Invocation Name.” Indica si se ha dado un nombre de invocación a la habilidad. Si lo pulsara, tendría el mismo efecto que el de seleccionar la opción “Invocation” del menú lateral izquierdo, con la que se establece dicho nombre de invocación.

• “Intents, Samples, and Slots.” Este paso quedaría cubierto dando de alta al menos una intención y sus correspondientes expresiones de muestra. Si lo pulsara, tendría el mismo efecto que el botón “+Add Intent” que aparece en el panel principal cuando se selecciona la opción “Intents” del menú lateral izquierdo.

• “Build Model.” Una vez establecido el nombre de invocación, creadas las intenciones y los tipos de slot de una habilidad, deberá crear el modelo de interacción que permita su utilización.

• “Endpoint.” Este paso asegura que se conoce el punto de acceso del código que se tendrá que ejecutar cuando se invoque una habilidad o cualquiera de sus intenciones. Si lo pulsara, le llevaría a la misma pantalla que la opción “Endpoint” del menú lateral izquierdo. Como usted va a desarrollar el código de la habilidad en el propio servicio de Alexa, este se encargará de configurar automáticamente dicho punto de acceso.

Конец ознакомительного фрагмента.

Текст предоставлен ООО «ЛитРес».

Прочитайте эту книгу целиком, купив полную легальную версию на ЛитРес.

Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.