Como ocurre con las apps móviles, las skills para Alexa también tienen la posibilidad de enviar notificaciones a los usuarios. Estas notificaciones aparecen en forma de aro luminoso amarillo en los dispositivos Alexa que no tienen pantalla y con un mensaje emergente en dispositivos Alexa con pantalla.

Para recibir notificaciones de una skill en los dispositivos Alexa, el usuario debe entrar primero en la app móvil Alexa, ir al apartado Configuración > Notificaciones, y activar las notificaciones de la skill. Así se ve para mi skill «Nevera Estado» por ejemplo:

Los programadores que quieran añadir soporte para notificaciones en sus skills, no pueden hacerlo actualmente desde la consola de desarrolladores Alexa pero sí editando el fichero «skill.json» y actualizando su skill mediante cli. Concretamente, en el fichero «skill.json» hay que añadir el permiso » alexa::devices:all:notifications:write» y el item «events» (ver ejemplo más abajo).

En «events» indicamos la plantilla que vamos a utilizar para las notificaciones (no se puede enviar una notificación de texto libre; sino que tiene que encajar con alguno de las plantillas existentes . En el ejemplo, estamos usando «AMAZON.MessageAlert.Activated», que tiene la estructura de mensaje «Has recibido un mensaje de X», donde «X» puedes personalizarlo en el momento de enviar la notificación.

En el «endpoint» especificaremos nuestra función lambda, que será la que recibirá un evento cada vez que un usuario active/desactive las notificaciones.

Tras editar el fichero «skill.json», actualizamos nuestra skill desde línea de comandos con el comando: ask deploy

A continuación, si entramos en la consola Alexa, dentro de la sección «Permisos» de nuestra skill veremos algo nuevo:

El «Alexa Client Id» y el «Alexa Client Secret» que aparecen en la pantalla anterior los necesitaremos copiar en nuestro backend para ser capaces de enviar notificaciones a los usuarios de nuestra skill.

A continuación, pasaremos a modificar el código de la función lambda de nuestra skill. Para poder enviar notificaciones correctamente, es importante que guardemos en nuestra base de datos la zona a la que pertenece el usuario, porque la API para enviar notificaciones es diferente para los usuarios americanos, europeos o asiáticos:


https://api.amazonalexa.com/v1/proactiveEvents/   (North America)
https://api.eu.amazonalexa.com/v1/proactiveEvents/ (Europe)
https://api.fe.amazonalexa.com/v1/proactiveEvents/ (Far East)

Un truco que me ha funcionado para saber qué API utilizar con cada usuario ha sido guardar en base de datos la siguiente información cuando un usuario empieza a utilizar la skill, y utilizarlo después como url base al enviar notificaciones.

 handlerInput.requestEnvelope.context.System.apiEndpoint; 

Valores posibles, según el usuario: https://api.amazonalexa.com, https://api.eu.amazonalexa.com, https://api.fe.amazonalexa.com 🙂

Por último, veremos un ejemplo de cómo enviar una notificación a un usuario concreto (notificación unicast). Si quieres más información sobre el envío de notificaciones, te recomiendo esta documentación oficial.

Este tipo de notificaciones unicast en Alexa las utilizo en mi skill «Nevera estado» para notificar al usuario de los alimentos que le caducan hoy.

A continuación el código de ejemplo para el envío de notificación unicast de tipo «AMAZON.MessageAlert.Activated» a un usuario concreto. El usuario, si ha activado las notificaciones, recibirá una notificación sonora y luminosa en su Alexa. Si el usuario dice «Alexa, dime las notificaciones», Alexa le responderá «Notificación de la skill X. Tienes un mensaje de cake».