Alexa, di hola! (Y algunos tips de desarrollo para tu primer skill de Amazon Alexa)

Alexa es un servicio basado en la nube de Amazon disponible para decenas de millones de dispositivos de Amazon y terceros que nos permite construir experiencias de voz y ofrecer a los usuarios una forma mas intuitiva de interactuar con la tecnología que usan en su día a día.

Después de AlexaDevDays México (muy buena experiencia por cierto) tuvimos la oportunidad de empezar a trabajar en la creación de Skills para Amazon Alexa (Podríamos pensar en un skill como el equivalente a una app de un dispositivo móvil).

A continuación te presentamos una visión de nuestra experiencia en el desarrollo de estos skills.

De la misma forma si estas listo para crear tu propia skill, te recomendamos seguir estos pasos:

  1. Crear una cuenta en AWS y en developer.amazon.com.
  2. Los skills se pueden desarrollar con la configuración de ciertas regiones en AWS, por ejemplo N.Virginia o Ireland, es importante verificar que nuestra cuenta de AWS este configurado en esas regiones (El skill de ejemplo se desarrolla con una función lambda).
  3. A continuación podemos seguir el tutorial  de Amazon en Github. 

Nuestra experiencia con Alexa

La experiencia general en el desarrollo de skills utilizando funciones lambda para el backend es muy fluida. Los ambientes de desarrollo web son sencillos de utilizar y el proceso en general para la creación de skills es bastante agradable.

A continuación te ofrecemos una breve explicación de los aspectos que se toman en cuenta cuando desarrollas una skill. Básicamente cubriremos:

  • El Front-End
  • El Back-End
  • El resultado
  • Un par de tips de desarrollo

El Front-End (o VoiceEnd 😀 )

Una vez que comienzas un proyecto de skill todo inicia con la definición del enunciado que utilizaras para que Alexa ejecute las acciones que definas. Esto se conoce como Invocation phrase.

En nuestro ejemplo, la skill que desarrollamos la podrías invocar diciéndole a Alexa:

Alexa, inicia vuelos ciudad de México.

Capture

Una vez hecho esto, podemos definir las interacciones que tendremos dentro de nuestro skill (es decir, las instrucciones que Alexa escuchara y el código que se ejecutara en consecuencia). Estas acciones se agrupan en Intents (o intenciones de ejecución).

Capture1

Con esta información, el motor de Alexa genera un modelo de aprendizaje que a través de Deep Learning le permite al servicio responder a distintas combinaciones de lenguaje que un usuario utilizaría comúnmente. Esto significa que aún cuando el usuario no diga las frases exactas que nosotros le estamos dando como ejemplo Alexa es capaz de reconocerlas. Es muy interesante como esta capa de abstracción nos permite hacer un desarrollo que incluya inteligencia artificial con tanta facilidad.

Una vez que tenemos nuestros Intents y nuestra invocación podemos construir nuestro modelo con la acción Build Model.

La unión de nuestro Front-End con nuestro Back-End se lleva a cabo con la definición de un End Point.

En tiempo de ejecución, una vez que Alexa reconoce la intención (o la acción) que el usuario busca ejecutar se envía una petición HTTP hacia el backend para que el proceso definido puede ser ejecutado.

El Back-End

Cuando seleccionamos utilizar funciones lambda como nuestro backend la integración es realmente sencilla. Para ello contamos con un editor de código y la ejecución de pruebas via web.

Captura de pantalla 2018-11-28 a la(s) 21.12.20

También podemos descargar el código (clonar un skill) a través de la linea de comandos, trabajar nuestros cambios de forma local y posteriormente subirlo nuevamente.

Actualmente es posible desarrollar skills con:

  • Node.js
  • Phyton
  • Java

Básicamente la tarea a nivel código es crear handlers que tienen la siguiente estructura:

  • Un método can handle: Que en tiempo de ejecución permitirá determinar si este handler será el encargado de proveer la funcionalidad al Intent (Esto se determina al regresar true como respuesta a canHandle).
  • Un método handle: Que ejecuta las acciones para satisfacer este Intent

Captura de pantalla 2018-11-28 a la(s) 21.00.44

Una vez que la petición se recibe desde el Front-End, el backend recorre los distintos handlers hasta encontrar el handler adecuado. Una vez que lo encuentra ejecuta el método y para generar una respuesta por parte de Alexa se utiliza el responseBuilder.

Ahí podemos especificar la información que será dicha por Alexa (.speak), mostrar información en los dispositivos con pantalla (.withSimpleCard), si esperamos una nueva interacción del usuario utilizaremos reprompt (.repromt).

Si queremos especificar el tono o la forma que deben pronunciarse ciertas palabras podemos “formatear” esta respuesta utilizando SSML.

Una vez terminada la ejecución, el Front-End recibe la respuesta a la ejecución inicial y en su caso el usuario recibirá la respuesta de voz de Alexa.

El Resultado

Una vez generado nuestro modelo y con la lógica del backend completa podemos comenzar a charlar con Alexa 😀

Captura de pantalla 2018-11-28 a la(s) 21.27.05

Algunos tips de desarrollo

En general, la experiencia en el ambiente de desarrollo es bastante solida, no obstante encontramos un par de cosas a tomar en cuenta:

  • Al hacer pruebas en el FrontEnd (Testing tab) de vez en cuando los skills parecen no seguir el flujo de ejecución normal. La forma de solucionarlo puede ser habilitar y deshabilitar las pruebas y refrescar la página.

 

  • Si al hacer un deploy desde la linea de comandos se interrumpe la actualización de una función lambda notamos que se puede generar un problema al hacer un reintento. La forma de solucionarlo es eliminar el archivo temporal que se genera en la carpeta local del skill.

 

Conclusión

Definitivamente la experiencia de crear un skill de voz para Alexa es una experiencia que vale la pena intentar. En lo particular me gusta la simplicidad para entrenar los modelos de lenguaje y la flexibilidad en el backend para utilizar multiples lenguajes de programación y explotarlos al máximo.

Te invitamos a compartir con nosotros un poco acerca de los skills en los que estas trabajando para Alexa e igualmente que te parece la experiencia de desarrollo.

Muchas gracias!

Saludos!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s