Usando Alexa para controlar un coche de carreras

Introducción

Antes de leer este artículo puede que quieras revisar este otro artículo previo donde te explicamos acerca del coche con el que nos vamos a integrar, qué son las interfaces conversacionales, qué tipos hay, los componentes básicos (intent, utterance, prompt, slot y fulfillment), y el alto nivel de las integraciones con Amazon Lex y Alexa para conectarnos con el coche.

En este artículo te explicaremos todo el detalle de la integración de Alexa y este coche.

Antes de empezar a explicar qué es una skill de Alexa y enseñaros la demo, os enseñamos el diagrama de arquitectura de toda la solución implementada, para que podáis ver las distintas piezas que vamos a tener que construir para utilizar nuestra skill:

Alexa

Alexa es el servicio de voz basado en la nube de Amazon, y te permite crear experiencias de voz naturales que ofrecen a los clientes una forma más intuitiva de interactuar con la tecnología que utilizan a diario.

Para desarrollar aplicaciones para Alexa, llamadas skills, se utiliza un framework de desarrollo de software llamado Alexa Skills Kit (ASK).

Una skill de Alexa tiene tanto un modelo de interacción -o interfaz de usuario de voz- como una lógica de aplicación. Cuando un cliente habla, Alexa procesa el discurso en el contexto de su modelo de interacción para determinar la solicitud del cliente. A continuación, Alexa envía la solicitud a la lógica de la aplicación de la skill. La lógica de la aplicación se puede proporcionar como un servicio backend alojado por Alexa, AWS u otro servidor.

Cómo funciona Alexa

Este es el proceso de cómo funciona:

1- Alexa está siempre escuchando, y cuando el usuario invoca la palabra de despertar (por defecto “Alexa” aunque se puede cambiar) el dispositivo se activa y graba la frase que el usuario le dice.

  • Para abrir una skill específica, tenemos que invocar a Alexa diciéndole la palabra de “despertar” asociada. En nuestro caso "Alexa, abrir gestión del coche"

2- Cuando el usuario termina de hablar, el audio se envía al servicio cloud de Alexa, donde se determina lo que quiere el usuario y luego se envía una solicitud para invocar la skill que puede cumplir con la solicitud.

  • El servicio de Alexa se encarga del reconocimiento de voz, del procesamiento del lenguaje natural y de la conversión de audio a texto

3- Alexa se comunica con la skill mediante un mecanismo de solicitud-respuesta a través de la interfaz HTTPS

4- Opcionalmente: actualiza la interfaz visual si nuestro dispositivo dispone de ella (Echo Show)

Cómo crear una skill de Alexa

Lo primero que me gustaría comentar es que para desarrollar una skill de Alexa hay que utilizar la Consola de desarrollador de Alexa, es decir, que el servicio de Alexa NO está integrado en AWS.

Esta es la consola del desarrollador de Alexa 

El proceso para crear una skill de Alexa es el siguiente:

1. Diseñar la skill

En primer lugar hay que diseñar la skill. En esta web se da información acerca de la fase de diseño. Es importante entender el objetivo de tus clientes y como ellos pueden conseguirlo con la skill, iterar el flujo, diálogos y experiencia y testearlo con los usuarios antes de desarrollar y publicar.

Importante también revisar este enlace para conocer los principios de diseño y saber cómo enfocar la creación de una skill de Alexa:

https://developer.amazon.com/en-US/alexa/alexa-haus/design-principles y https://developer.amazon.com/en-US/alexa/alexa-haus/design-with-ai.

En nuestro caso, este diagrama refleja las interacciones que hemos implementado para la skill de Alexa:

2. Construir la skill

El primer paso será crear la nueva skill:

Elegiremos el nombre de la skill (lo podemos cambiar más adelante), el idioma principal, el modelo a añadir a nuestra skill (custom, “flash briefing”, “Smart home”, o “video”) y el método para alojar nuestros recursos de backend (“Alexa-hosted”, es decir, una Función Lambda alojada por Alexa en otra cuenta de AWS que nosotros no controlaremos, o podemos provisionar nosotros el recurso de backend necesario).

Una vez elegidas esas opciones nos pedirá elegir un template en el que nos queremos basar.

Y al confirmar, se creará la skill:

Accederemos a nuestra skill desde el menú principal (o si estamos creando una, automáticamente nos entrará dentro de ella para editar la edición):

Lo primero que debemos hacer es modificar la frase de invocación a nuestra skill. Para ello, dentro de la pestaña superior “Build”, accederemos a “Invocations” y después a “Skill Invocation Name”, y ponemos el nombre que queramos.

Nosotros hemos puesto “gestión del coche”, por lo que para que Alexa abra nuestra skill deberemos decir “Alexa abrir gestión del coche”.

Después accederíamos a ver nuestros “Intents” definidos, para lo que accedemos a “Interaction”Model" y después a “Intents”:

En nuestro caso teníamos 11 intents. Vemos dos bloques, el primero son los creados automáticamente para todas las skills (Cancel, Help, Stop y NavigateHome), y después tendríamos los que sí podemos modificar gestionados por nosotros.

Vamos a revisar el de las Luces (por seguir con el mismo ejemplo que el mostrado cuando os explicábamos nuestra integración con Amazon Lex).

Lo primero que tenemos que definir, son las frases que puede decir el usuario (Utterances) relacionadas con este Intent. En este caso tenemos 11. Podemos pulsar en “Bulk Edit” si queremos verlas en formato listado. Podemos ver que la primera es {lucesAccion}, esto es una referencia a un “Slot” llamado así, que veremos más tarde.

Digital Lover

Un poco más abajo vemos la definición del “Slot” para este “Intent”:

Si pulsamos sobre “lucesAccion” podemos ver la información del Slot. Primero si el slot es obligatorio, y si indicamos que sí, la frase que Alexa nos dirá para solicitarnos esta información. Un poco más abajo tenemos los valores de respuesta que podría decir el usuario, y abajo del todo si se requiere confirmación, es decir, que Alexa nos pregunte “¿Está seguro de que desea encender la luz azul?” (por ejemplo), que claramente no nos interesa marcar.

A continuación accedemos a revisar los tipos de “slots” que tenemos configurados (5):

Y accedemos al slot llamado “lucesAccion”. Vemos como tiene 4 valores configurados y si accedemos a la opción de “Bulk edit” podemos ver los valores que tenemos configurados y todos sus sinónimos.

Una vez revisados los Intents y los slots, vamos a revisar el código en el que tendremos nuestra lógica, accediendo a la pestaña de “Code”:

En este caso podemos ver, que no nos aparece aquí porque el editor solo nos muestra el código cuando estemos usando una skill de tipo Alexa-hosted (es decir, que nos gestione la propia skill nuestro código, desplegándolo en una cuenta de AWS que nosotros NO controlaremos).

Nosotros hemos generado la skill de Alexa mediante el servicio de AWS de CodeStar, y tenemos en nuestra cuenta AWS el código de la Lambda. En este artículo no mostraremos cómo lo hicimos paso a paso porque escribiremos otro artículo futuro con esta información, simplemente mostraros que si accedéis al servicio de CodeStar, y elegís crear una aplicación según un template de Alexa, podremos crear una skill de ejemplo y podremos asociar la skill de Alexa con nuestra cuenta de desarrollador como se muestra en las siguientes pantallas:

El servicio de CodeStar nos generará un nuevo repositorio, un pipeline en CodePipeline, un proyecto para realizar el empaquetado de nuestro código en CodeBuild y nos desplegará el código de la Lambda con CloudFormation.

El repositorio de código tiene esta estructura, después de ser modificado (para añadir por ejemplo la parte de “assets”

Dentro de “interactionModels/custom” se encuentra el JSON que contiene todos los Intents, Slots y Utterances, y que se puede encontrar en la consola de desarrollador de Alexa en la siguiente pantalla:

En el fichero de “skill.json” tenemos la definición de la skill, y también los valores referentes a la publicación:

En “lambda/custom” nos encontramos con el código de la función Lambda. La parte concreta de gestión del Intent de “luces” es la siguiente:

Y la petición al otro Lambda que realiza la petición con el coche:

Una vez que tenemos todos los cambios listos tendríamos que guardar el modelo y construirlo.

3. Testear la skill

Podemos testear la propia Skill de Alexa desde la consola del desarrollador de Alexa. Accederemos a la pestaña de “Test” en el menú superior y luego tendremos que activar el modo Desarrollo como se muestra en la imagen:

Para testear, debemos escribir en el chat o bien pulsar en el micrófono para hablar, y diremos los comandos como si habláramos con Alexa:

Con un dispositivo Alexa solo podrás interactuar mediante voz, pero para testearlo, también puedes hacerlo mediante texto.

Personalmente, prefiero testearlo en mi dispositivo Alexa, y para ello necesitaremos habilitar la opción de “Beta Test” y añadir nuestro email asociado con nuestro dispositivo Alexa.

Accederemos a la pestaña de “Distribución”, cumplimentaremos los campos relacionados con el idioma:

Completaremos también la parte de Privacidad y compliance, y elegiremos la opción de Beta Test, añadiremos nuestro email asociado con un dispositivo Alexa y nos llegará una invitación al correo electrónico:

Pulsando en el botón de habilitar, se abrirá la aplicación de Alexa y podremos instalar esta nueva skill y testear los cambios directamente en nuestro dispositivo ejecutando “Alexa, abrir gestión del coche”. Mucho más práctico y agradable.

4. Certificar y publicar la skill

Cuando estemos listos para publicarla, accederemos a la pestaña superior de certificación, y si hemos cumplido todos los pasos de la validación (también necesarios para poder realizar Beta Test), podremos certificarla y publicarla en el market:

5. Monitorizar la skill

Por último, podremos monitorizar nuestra skill. IMPORTANTE, no tenemos por qué haberla publicado para poder monitorizarla.

Podemos hacerlo desde la propia cuenta del desarrollador accediendo a la opción del menú superior de Analítica:

Podemos ver que lo más usado fue el Intent de Luces (con 232), seguido de volante (con 177) y de acelerar (con 173).
También podemos revisar las veces que se ejecutó la función Lambda en CloudWatch, por ejemplo la siguiente métrica:

Para terminar, podéis ver el vídeo de la demo que os dejamos a continuación:

webinar AWS

Tags

AWS
Guía de posibilidades profesionales sobre AWS
He leído y acepto la política de privacidad
Acepto recibir emails sobre actividades de recruiting NTT DATA