Cliente Java para enviar Proactive Events

Cliente Java para enviar Proactive Events

Este proyecto tiene como objetivo simplificar el envío de proactive events (notificaciones) a una skill desde un proceso externo desarrollado en Java.

Cliente Java de proactive events (notificaciones)

Basándome en el video De Cero a Héroe, Parte 13: Proactive Events Notifications de German Viscuso y el proyecto de Github de Luca Rosellini he creado este cliente Java para que sea fácil de enviar notificaciones desde cualquier backend basado en Java/Kotlin o por ejemplo, desde cualquier dispositivo Android.

Esta libreria realiza las siguientes operaciones:

  1. Obtiene un token de autenticación de Alexa mediante el uso del client_id y client_secret de la skill.
  2. Utiliza el token obtenido en el paso anterior para las notificaciones broadcast a aquellos usuarios de la skill que tienen permisos a notificaciones en la aplicación Alexa. Envía eventos siguiendo el esquema AMAZON.MessageAlert.Activated.

Agregar proactive events (notificaciones) a tu skill

Recuerda que si quieres enviar proactive events (notificaciones) a tu skill, debes modificar el manifest de la skilll (skill.json) para agregar permisos de notificación y declarar el schema(s) de los proactive events (notificaciones) que su skill puede enviar. Usando SMAPI, debes:

  1. Agregar el objeto permissions al manifiest de la skill (skill.json):
    "permissions": [
        {
            "name": "alexa::devices:all:notifications:write"
        }
    ]
  1. Agregar el objeto events al manifiest de la skill:
    "events": {
      "publications": [
        {
          "eventName": "AMAZON.MessageAlert.Activated"
        }
      ],
      "endpoint": {
        "uri": "** TODO: REPLACE WITH YOUR Lambda ARN after created **"
      },
      "subscriptions": [
        {
          "eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
        }
      ]
    }
  1. volver a desplegar la skill:
   ask deploy -t skill

Si quieres que la skill acpete más de un schema, simplemente agrégalos a events.publications y recuerda cambiar el tipo de evento en la clase Event del package com.xavidop.alexa.model.event.

El proceso se describe más a fondo en la documentación oficial de la API de proactive events de Alexa.

Puede encontrar un ejemplo de cómo configurar una skill para proactive events en el repositorio oficial de Gihub de Alexa: https://github.com/alexa/alexa-cookbook/tree/master/feature-demos/skill-demo-proactive- eventos

Prerrequisitos

Necesitas al menos Java> = 1.8 para ejecutar el código y Maven para descargar las dependencias.

Instalar

Para descargar las dependencias del proyecto, simplemente añade esta dependencia de maven en el pom.xml del proyecto:

    <dependency>
      <groupId>com.xavidop.alexa</groupId>
      <artifactId>alexa-proactive-event-sender</artifactId>
      <version>LATEST</version>
    </dependency>

Cómo usarlo

Después de agregar la dependencia, puede usar el cliente de la siguiente manera:

    String clientId = "YOUR-CLIENT";
    String secretId = "YOUR-SECRET";

    AlexaProactiveEventSenderClient client = new AlexaProactiveEventSenderClient(clientId, secretId);

    ProactiveEvent event = new ProactiveEvent();
    event.getEvent().getPayload().getMessageGroup().getCreator().setName("Test");

    URLRegion urlRegion = new URLRegion();
    urlRegion.setRegion(Region.NA);
    urlRegion.setEnvironment(Environment.DEV);

    client.sendProactiveEvent(event, urlRegion);

    

  • Environment: los proactive events se puede enviar a los endpoints de las skills en estado live o development. Los valores permitidos son DEV y PRO.
  • Región: identifica la región del endpoint de Alexa que se utilizará para enviar proactive events. Los valores permitidos son EU (Europa), NA (Norteamérica) y FE (Oriente). ** Recuerda **: si sus usuarios estan en NA y está enviando proactive events a través del endpoint de la UE, los usuarios ubicados en NA no recibirán ninguna notificación.

Estos son los valores por defecto de un proactive events cuando lo creas:

    {
        "timestamp": "",
        "referenceId": "UUID-AUTOGENERATED",
        "expiryTime": "",
        "event": {
          "name": "AMAZON.MessageAlert.Activated",
          "payload": {
            "state": {
              "status": "UNREAD",
              "freshness": "NEW"
            },
            "messageGroup": {
              "urgency": "URGENT",
              "creator": {
                "name": ""
              },
              "count": 1
            }
          }
        },
        "relevantAudience": {
            "type": "Multicast",
            "payload": {}
        }
    }

El código y la librería la teneis disponible en mi Github

¡Eso es todo!

Happy coding!


Made with ❤ by Xavier Portilla Edo © 2020. All rights reserved.