Inicio ::: Blog ::: Febrero 2021

Programar una Skill de Alexa. Parte II

#softwaredevelopment #digitalizacion #alexa #asistentevirtual

Publicado el 10/02/2021 por Javier Mora Alcázar

Después de la introducción realizada en la primera parte del artículo, ¡vamos a a ponernos a "picar!

Partimos de un problema real al que trataremos de dar solución con nuestra Skill:

“Carmen es una joven emprendedora que dirige una pequeña tienda de decoración y coleccionismo en Toledo (España). El Baúl del Abuelo vende desde artículos originales para dotar a tu casa de una personalidad única a artículos para coleccionistas tales como vajillas o documentos antiguos. En un afán por ofrecer un mejor servicio a sus clientes, Carmen ha pensado en desarrollar una Skill de Alexa con la que sus clientes puedan comprobar el horario de apertura de su establecimiento”. .

Una vez planteado el problema, explicaremos detenidamente los pasos que Carmen tendría que llevar a cabo para desarrollar su propia Skill con esta funcionalidad.


Paso 1. Creación de la Skill de Alexa en la consola de desarrollo de Amazon

En este primer paso deberemos crear nuestra nueva Skill en la consola de desarrollo de Amazon y configurar el modelo de interacción para la interfaz de voz.

Para esto en primer lugar lo que tenemos que hacer es iniciar sesión en Amazon Developer (si aún no tienes cuenta puedes crearte una gratuita que te dará acceso a multitud de herramientas para desarrollar tus propias aplicaciones) y hacer uso de Alexa Developer Console, una interfaz gráfica de desarrollo que forma parte de la consola de desarrollo de Amazon.

Imagen 1: Dashboard general de Amazon Developer Console

Una vez dentro de la Alexa Developer Console, podemos ver la lista de Skills desarrolladas (en caso de no haber desarrollado ninguna la lista estará vacía). Para crear una nueva Skill hacemos clic en “Create Skill”:

Imagen 2: Con la consola de desarrollo de Alexa puedes controlar tus Skills y su estado

Pon nombre a tu Skill, selecciona el idioma deseado y elige uno de los cuatro tipos de modelo interacción disponibles:

  1. Custom (modelo de interacción definido por el usuario)
  2. Flash Briefing (modelo de interacción predefinido para feeds de noticias)
  3. Smart Home (modelo de interacción predefinido para aplicaciones Smart Home)
  4. Vídeo (modelo de interacción predefinido para aplicaciones de vídeo)

En este caso usaremos el de modelo de interacción personalizado (Custom Skill Model).

Imagen 3: Seleccionamos los parámetros que deseamos y hacemos click en “Create skill”


Paso 2. Definiendo el modelo de interacción de la Skill

El siguiente paso es configurar el modelo de interacción de nuestra Skill. Para ello, la Alexa Developer Console nos muestra cinco secciones:

  • Test
  • Distribution (Publicación)
  • Certification (Certificación)
  • Analytics (Análisis)

Utilizaremos cada una de estas pestañas de la barra de navegación para desplazarnos de un área a otra.

Imagen 4: El menú de navegación de la consola de desarrollo de Alexa.

Empezaremos en la sección “Build” para diseñar un custom skill model para la Skill. La página de resumen del área de desarrollo se divide en tres secciones o columnas claramente diferenciadas. La Skill se crea utilizando la lista de comprobación del skill builder en la columna de la derecha y consta de cuatro pasos de configuración:

  • Seleccionar el nombre de la Invocación
  • Definir intenciones y ejemplos de sentencias
  • Crear un modelo
  • Seleccionar el endpoint del servicio web

Inicia uno de los pasos de la configuración haciendo clic en el botón correspondiente de la lista de comprobación de Skill Builder. De manera alternativa, puedes seleccionar áreas de configuración determinadas mediante la barra del menú situada en la columna de la izquierda.

En la columna central de la página encontrarás material informativo sobre Alexa Skill Development, así como un vídeo sobre el área seleccionada de la consola de Alexa Developer.

Imagen 5: La creación de Skills se lleva a cabo en el área “Build” utilizando la lista de verificación de Skill Builder.

1. Seleccionamos el Invocation Name

Primero definiremos el nombre de invocación de la Skill de Alexa. El nombre de invocación es la expresión que utilizarán los usuarios para activar/comunicarse con tu Skill. El nombre de invocación puede ser el mismo que el nombre de la Skill, pero puede diferir si es necesario.

A la hora de definir el nombre de invocación debemos tener en cuenta los siguientes aspectos:

  • Utiliza un nombre de invocación con dos o más palabras.
  • Separa las palabras con espacios.
  • Utiliza sólo letras minúsculas.
  • Pon el nombre de invocación entre comillas si estás usando un apóstrofe o una abreviatura con un punto.
  • El nombre de invocación de la Skill no debe contener ninguna de las frases de inicio o palabras reservadas de Alexa, tales como launch(empezar), ask (preguntar), open(abrir), etc.

Para la Skill que estamos desarrollando, usaremos el siguiente Invocation Name: el Baul del Abuelo. Guardamos el nombre de la invocación haciendo clic en “Save Model” y hacemos click en “Customs” para volver a la vista general.

2. Definición de propósitos o intents

Con los intents definimos lo que un usuario de tu Skill puede decir, cuál es el propósito de su manifestación y cómo reacciona tu Skill ante ella. Cada Skill personalizada contiene cinco propósitos (intents) preestablecidos que deben implementarse más tarde, a los que, además, podemos añadir más según sea necesario. A continuación, explicamos cómo crear un custom intent:

● Pon un nombre a la nueva acción y haz clic en “Create custom intent”:

Imagen 6: En el caso de ejemplo que estamos siguiendo, definimos el nuevo intent GetOpeningTimetable

Seguidamente debemos definir las posibles formas con las que los usuarios pueden pedirle a la Skill que ejecute la acción vinculada a la intent. Introduce la frase en el campo de texto y haz clic en el signo más (+).

Imagen 7: En el ejemplo que estamos desarrollando, definimos las expresiones que los usuarios pueden decirle a la Skill para pedir la información sobre el horario de apertura y cierre de la tienda

De esta manera, la Amazon Developer Console aumentará a través de su IA los patrones de reconocimiento de habla que has definido. Sin embargo, esto solo es así si el sistema dispone de una base de datos suficientemente amplia, por lo que debes introducir al menos 8 ejemplos de expresiones con cada intent que elijas.

A continuación, pulsamos “Save Model” para crear el modelo y entrenarlo por aprendizaje automático.

3. Creación del modelo

Para crear el modelo debemos hacer click en “Build Model” y esperar a que la consola de desarrollo nos notifique que el modelo de interacción se ha creado con éxito.

Si después de crear el modelo queremos volver a hacer cambios en el nombre de invocación o los intents, solo tendríamos que reiniciar el proceso de compilación pulsando de nuevo “Build Model”.

4. Seleccionando el endpoint del servicio web

El paso 4 de la lista de comprobación de Skill Builder incluye la selección del endpoint del servicio web. Aquí hay dos opciones:

  • La lógica del programa de tu Skill de Alexa puede ser ejecutada como una función Lambda en la plataforma de computación en la nube de AWS
  • A través de tu propio servidor web.

Para simplificar el tutorial, dejaremos de lado la opción de alojar la lógica en nuestro propio servidor web, y explicaremos cómo hacerlo haciendo uso de las funciones Lambda de AWS.

Para ello activaremos la casilla de verificación de AWS Lambda ARN. ARN significa “Amazon Resource Name” (nombre del recurso de Amazon). Es un nombre único para un recurso AWS, como una función Lambda, por ejemplo.

Antes de poder enlazar con ARN a una función Lambda que contiene la lógica del programa de tu Skill, primero debes crearla en la consola AWS. En el siguiente punto del tutorial veremos cómo hacerlo.


Paso 3. Creación de la función Lambda de AWS

Basándonos en el modelo de interacción definido en el paso anterior, procedemos a crear una función Lambda AWS, que se ejecuta en la plataforma de Cloud Computing de Amazon y la cual incluirá la lógica de negocio de tu Skill.

Accede a tu cuenta AWS (Si no estás registrado, regístrate primero para obtener una cuenta de AWS gratuita) y selecciona “AWS Management Console” en “Mi cuenta”.

La consola de administración de AWS permite acceder y administrar los servicios web y recursos de computación de Amazon. Primero, asegúrate de que tu consola está configurada en la región donde quieres ofrecer tu Skill. (“EU (Ireland)” si deseas que tu funcionalidad esté disponible para los usuarios europeos). Para encontrar el producto AWS deseado, utiliza la función de búsqueda “Find services” y busca y selecciona el servicio lambda.

Una vez en la página principal del servicio, podemos ver un resumen de todas las funciones Lambda creadas. (Si todavía no has creado ninguna la lista estará vacía). Hacemos click en “Create function” para iniciar el proceso de configuración de una nueva función Lambda.

Las funciones AWS Lambda pueden crearse desde cero, utilizando un proyecto o partiendo de una aplicación proporcionada por AWS o por socios colaboradores en el repositorio AWS de aplicaciones serverless. Puesto que tenemos que recurrir a varias librerías de Alexa para la lógica del programa de nuestra Skill, es mejor partir de una plantilla que obtenemos de al seleccionar la opción “Examinar el repositorio de aplicaciones sin servidor”. Para el tutorial elegimos la plantilla “alexa-skill-kit-nodejs-factskill”.

Imagen 8: Seleccionamos la opción correspondiente para generar una función lambda usando la plantilla indicada.

Indicamos el nombre para nuestra aplicación y hacemos clic en “Deploy” para desplegar la aplicación serverless generada automáticamente en Cloud Formation.

En la nueva página a la que nos redirige, debajo de la sección de recursos, hacemos click al enlace para acceder a la función lambda vinculada a la aplicación automáticamente generada:

Imagen 9: En recursos de la aplicación se nos muestra la función automáticamente generada, al que podemos acceder haciendo click para amoldar el código a las necesidades de nuestra aplicación.

La máscara de configuración para la función se abre en una nueva pestaña, ya con valores establecidos por defecto (Permisos, roles, recursos, etc.)

Importante: En la ventana del código de la función lambda (que nos viene desarrollada por defecto al haber utilizado la plantilla), contiene la lógica de negocio específica para la acción que estamos desarrollando. Para personalizarla con el ejemplo que estamos siguiendo, eliminamos el código presente y lo sustituimos por el de nuestra aplicación pegando en su lugar el siguiente fragmento de código: https://jsfiddle.net/8tkz6dc5/

Conocer en detalle los conceptos de programación de Skills y el porqué de cada línea de código requeriría de un tutorial mucho más tiempo y lo dejamos para en otro tutorial, ya que no es el objetivo de este que estamos abordando. En caso de que queráis generar el código scaffolding para alguna Skill de Alexa de vuestro interés podéis hacer uso del Alexa Skills Code Generator para generar el nuevo código de nuestra Skill

Imagen 10: El Alexa Skill Code Generator es una herramienta que nos genera un código básico para nuestra Skill partiendo del Language Model JSON de nuestra Skill que podemos copiar/obtener en la Alexa Developer Console.


Paso 4. Conectar la función Lambda de AWS a la Skill

Para que los usuarios puedan dirigirse a nuestra Skill utilizando un altavoz inteligente, se requiere un enlace en los dos sentidos:

1. Definir el modelo de interacción de la Skill como disparador de la función Lambda

Para ello accedemos a la configuración de nuestra función Lambda en la consola de gestión AWS y selecciona la opción “Alexa Skills Kit” como desencadenador (Es probable que aparezca seleccionada si has seguido las indicaciones del tutorial y has utilizado la plantilla alexa-skill-kit-nodejs-factskill para el desarrollo de la función). Una vez seleccionado, el kit de funcionalidades de Alexa aparece ahora como un disparador en la representación gráfica de la función Lambda, pero requiere una configuración adicional.

Para ello necesitamos el ID de la Skill del modelo de interacción disponible en la sección de Endpoints de la Alexa Developer Console:

Copia la cadena de caracteres que aparece en “Your Skill ID” en el portapapeles y, a continuación, introdúcelo como el ID de cualificación de tu función Lambda:

Confirma la configuración haciendo clic en “Add” (Agregar) y guarda los cambios (“Save”).

2. Registrar la función Lambda como endpoint de la Skill

Para enlazar la función Lambda creada y desplegada, copiamos el ARN de la función (en la parte superior del panel de administración de nuestra función lambda):

Imagen 11: Seleccionamos y copiamos el ARN de la función Lambda

y lo pegamos en la configuración de endpoints de nuestra Skill Alexa, concretamente en el campo “Default Region”. Debes definir, al menos, un endpoint predeterminado para tu Skill. También puedes especificar endpoints alternativos para Norteamérica, Europa e India, así como para Oriente Próximo y Lejano. Guarda los ajustes con un clic en “Save Endpoints”

De esta manera, si un usuario interactúa con la Skill de Alexa que hemos desarrollado, se envía una petición POST al endpoint del servicio web predeterminado, en este caso, a la función Lambda vía ARN.


Paso 5. Probar la Skill

Dentro de la Alexa Developer Console tenemos la sección “Test”, que ofrece un entorno de pruebas completo para Skills, incluyendo un simulador de Alexa con salida de voz. De forma predeterminada, el entorno de pruebas está desactivado para las Skills de Alexa recién creadas. Actívalo cambiando el menú desplegable de “Off” (desactivado) a “Development” (desarrollo).

Para probar la Skill, llama a tu nueva Skill Alexa usando la invocación y prueba un comando de voz/texto que corresponda un intent contemplado previamente.

La Skill que estamos desarrollando como ejemplo puede iniciarse con la invocación “Alexa, abre el Baúl del Abuelo”. Alexa responde con el welcomeOutput definido en la lógica del programa:

“Bienvenido a el Baul del Abuelo, ¿en qué le puedo ayudar?”

Si hacemos una pregunta que corresponda a la intención definida en el modelo de interacción, siguiendo nuestro ejemplo, obtendremos la siguiente respuesta:

"¿A qué hora abre la tienda? -> El horario de apertura de la tienda es de 10 de la mañana a 8 de la tarde”

Como puede observarse, el acceso a la lógica del programa ha funcionado y Alexa entiende nuestra pregunta y nos da la información que necesitamos. La entrada y salida que ha procesado el servicio de habla de Amazon en la consulta se muestra en la ventana Skill I/O en formato JSON:

Alternativamente, es recomendable probar la Skills en los dispositivos conectados a tu cuenta antes de publicarlas y lanzarlas al market.


Paso 6. Validación y publicación de la Skill

Una vez probada la Skill, puedes ponerla a disposición de otros usuarios si la encuentras satisfactoria y útil. Para ello debes ir a la sección “Distribution” y proporcionar toda la información necesaria para su publicación. Rellena todos los campos obligatorios bajo “Skill Preview” (vista previa de habilidades), “Privacy & Compliance” (Privacidad y cumplimiento) y “Availability” (disponibilidad).

En “Privacidad y cumplimiento”, especificaremos si los usuarios pueden utilizar funciones de pago dentro de tu Skill, si recopilas datos personales de los usuarios, si tu Skill está dirigida a usuarios menores de 13 años o si incluye publicidad.

En “Disponibilidad”, define las restricciones para la disponibilidad de tu Skill. ¿Debería estar disponible para todos los usuarios o solo para determinadas organizaciones? ¿Deben realizar las pruebas beta determinadas personas?, y ¿En qué países y regiones te gustaría publicarla?

En último lugar, guarda tus datos haciendo clic en “Save and continue” (guardar y continuar).

Después de haber guardado tus datos de publicación”, serás redirigido automáticamente al área “Certification” (certificación). La consola Alexa Developer comprueba tus datos y te pide, si es necesario, que revises la información incorrecta o que proporciones los datos que faltan.

Si la información introducida es correcta, puedes continuar con una prueba de funcionamiento haciendo clic en “Run” (ejecutar). Dependiendo del alcance de tu proyecto, el texto de la función puede tardar unos minutos en completarse. Si el informe de prueba muestra errores, tienes la opción de volver al área determinada, corregir el error y realizar una nueva prueba de funcionamiento.

Una vez completado con éxito la prueba funcional, estará lista para que Amazon valide y revise la Skill. Haz clic en “Submit for Review” (enviar para revisión) para certificar tu Skill. Una vez completada la revisión, recibirás un correo electrónico en la cuenta asociada a tu cuenta de desarrollador de Amazon. Existen básicamente dos escenarios posibles:

  • Tu Skill se ha certificado con éxito: En este caso, se te comunicará por correo electrónico cuándo se espera que tu Skill se publique en la Alexa Skills Store.
  • Tu Skill no ha sido certificada: En este caso, tu Skill no ha sido certificada: en este caso, Amazon ha identificado problemas durante el proceso de certificación, adjuntando un informe detallado de los cambios que se requieren. Una vez hechos los ajustes, puedes volver a presentar tu Skill.

En la vista general de Skills de la Alexa Developer Console puedes ver el estado de todas tus Skills:

  • In development (Skill en desarrollo)
  • Certification (Skill en proceso de certificación)
  • Live (Skill disponible para los usuarios a través de la Alexa Skills Store). Cuando tu Skill está en el estado “Live”, no podrás ajustar su configuración posteriormente. Además de la versión en producción, en la consola de desarrolladores está disponible una versión para desarrolladores de la Skill publicada, que puede ser revisada, actualizada y mejorada independientemente de la original. Una vez que Amazon valide y certifique la nueva versión de tu Skill, esta reemplazará a la versión anterior en producción y creará automáticamente una nueva versión de desarrollo