En este post vamos a ver cómo podríamos usar el potencial de las funciones Lambda de la consola AWS para crear de forma sencilla una Skill para nuestra amiga Alexa.

En los tiempos que corren no es de extrañar que amigos, familiares, conocidos o nosotros mismos tengamos involucrada en nuestra vida cotidiana alguna Inteligencia Artificial como Siri, Cortana o Alexa. Ésta última es la más común en cualquier hogar por todas las funciones y servicios que ofrece gracias a su conexión continua a la red.

Su flujo de trabajo no se aleja mucho de cualquier dispositivo IoT (Internet of Things), es decir, una maquina que interpreta lo que le decimos, lo envía a un servicio en la red, donde una función lo procesa y genera una respuesta acorde y finalmente envía de vuelta dicha respuesta. El papel del desarrollador en éste caso sería gestionar dichas funciones en la red o lo que comúnmente se llaman «Skills».

Esquema proporcionado por towardsdatascience.com

Para ello, necesitamos disponer de :

1. CREACIÓN DE FUNCIÓN LAMBDA EN AWS CONSOLE

En primer debemos de tener una función Lambda en AWS. Para ello, accedemos a la consola de Amazon y en Servicios buscamos «Lambda». Debemos de tener en cuenta la Región en la que crearemos la función Lambda, ya que en algunas zonas no está disponible el servicio Alexa. En este ejemplo la crearemos en la región eu-west-2 (London)

Una vez estamos en el panel de Lambda, le damos a crear una función. Para agilizar el ejemplo sin meternos de lleno en código, vamos a usar el repositorio de aplicaciones Serverless. Buscaremos «alexa-skills-kit-nodejs-factskill» para crear una plantilla en JavaScript de una función que devolverá frases aleatorias.

Le damos a Deploy y de esta forma AWS desplegará la función en un Stack (aplicación y función) de Cloud Formation. Una vez se ha creado la función tendremos en el panel de Lambda la aplicación y la función . Nos dirigimos al apartado de aplicación y nos vamos a nuestra skill.

Entrando en la aplicación podemos observar que nos ha creado como desencadenante «Alexa Skills Kit»:

Buceando un poco en el código de index.js podemos observar que nos crea constantes y Handlers entre las cuales se encuentra por ejemplo colecciones de frases en varios idiomas:

Por último, debemos guardar el ARN de la función que podemos copiar desde «Informe general de la función», ya que lo necesitaremos para asociar nuestra función a la skill.

2. CONFIGURACIÓN DE LA SKILL EN AMAZON ALEXA CONSOLE

Ahora lo que haremos será asociar la función a una Skill de Alexa. Para ello, accedemos a «Alexa Developer Console» y creamos una skill.

Ponemos un nombre a nuestra skill y seleccionamos modelo personalizado y como método de backend provisionado por nosotros.

Le damos a crear y nos saldrá una ventana donde seleccionaremos «start from scratch» (sin template), ya que ya tenemos la función montada en AWS.

Le damos a continuar y esperamos a que se cree. Una vez creado, ya estaremos dentro de la consola de la Skill, donde nos tendremos que fijar directamente en dos cosas:

  • El «Skill builder checklist», que nos indicará si tenemos todo lo necesario para desplegar la skill
  • El apartado de «Endpoint» donde apuntaremos a la función lambda que se ejecutará al arrancar nuestra skil

Como podremos ver en la builder checklist, tendremos todo en verde, es decir, las consola nos ha creado automáticamente los intents y frases que debemos decir para ejecutar la Skill.

Ahora sí, como último paso, vamos a dirigirnos a Endpoint y en AWS Lambda ARN – Default Region pegamos el ARN de la función lambda que creamos y guardamos anteriormente en AWS. Le damos a Guardar y ya estaría listo.

Si queremos probar la Skill antes de desplegarla, no es necesario que tengamos un dispositivo Alexa en nuestras manos. Podemos usar en la consola de Alexa el servicio test seleccionándolo en la barra de navegación de arriba. Habilitamos test en la skill como «Development» y listo, podemos usar el micrófono o escribir en el chat que nos aparecerá «alexa, abre prueba facts» y podremos ver como selecciona una de las frases del código de la función Lambda, siendo así una skill completamente funcional.

3. CONFIGURACIÓN ADICIONAL

Adicionalmente, podemos verificar el ID de la skill en la función lambda de AWS para asegurarnos de que tanto la Skill como la función se han conectado correctamente. Para ello debemos eliminar en la aplicación Lambda el desencadenador «Alexa skills kit» y añadirlo de nuevo manualmente en la función Lambda.

Para ello vamos de nuevo a la consola AWS, a Lambda/Aplicaciones y entramos a nuestra función. Seleccionamos el desencadenador de alexa skill kit y le damos a Eliminar.

Una vez eliminado le damos a agregar desencadenador y seleccionamos Alexa skill kit

Nos aparecerá un formulario donde debemos introducir la ID de habilidad. La copiaremos de la consola de desarrollo de Alexa, en el apartado «Your Skills» debajo de la skill o en el apartado anterior «Endpoint / Your Skill ID».

Le damos a agregar y tendríamos la Skill lista. Podemos volver a la consola de alexa y probar de nuevo la skill, ahora si, funcionando perfectamente.

CONCLUSIÓN

Las funciones Lambda de AWS son muy útiles para este tipo de servicios de IoT. Con ellas no es necesario montar un servidor costoso que gestione las peticiones de los dispositivos Alexa si lo que queremos es que nuestra skill realice acciones básicas como es, en este caso, decir 4 frases. Es por esto que para funciones IoT sencillas la mejor elección en cuanto a servicios es usar Lambda, por el hecho de ser «Serverless».

Como se puede comprobar, si queremos tener separado en AWS el backend del servicio (API) y en Alexa Developer Console el front-end (la interacción con el dispositivo) en muy pocos pasos es muy sencillo y se puede tener ambas partes conectadas y, de esta forma, es más fácil, por ejemplo, depurar errores en la API (Usando Cloud Watch o AWS X-Ray en la función Lambda).

Autor/a: Raúl Castro de la Torre

Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma.

Centro: Tajamar

Año académico: 2020-2021

This Post Has 2 Comments

  1. Jose Ismael Castro Ruiz Reply

    Por favor me puedes enseñar como hacer una skill y una función lambda para conectar dispositivos esp8266 con alexa, o si tienes un curso para este propósito.

    Gracias de antemano y saludos cordiales.

    • Raúl Castro de la Torre Reply

      Buenas tardes Jose Ismael:

      Para probar en un dispositivo (creo que da igual el modelo) tras seguir los pasos de este post (donde viene explicado también como se hace la función lambda para alexa) al menos para probar hay un apartado en la consola de desarrollo de alexa donde puedes lanzar digamos como BETA tu skill e invitar a usuarios de amazon especificos a descargarla (invitas a tu usuario vinculado a alexa y desde la app de alexa instalas la skill a traves de un enlace que se te envía por correo). Creo que dura un par de meses, luego ya como se lanza la skill digamos como producto final nunca lo he probado, ya que a mi al menos me dio problemas.

      P.D Mis disculpas por contestar tan tarde

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.