Awesome
Alexa.NET.ProactiveEvents
Small library to help with the Alexa ProactiveEvents API
Setup your skill to allow proactive events
You have to onboard your skill with the proactive events API
This is a specific process and so the best documentation is the Amazon docs on the subject
Getting a token for Proactive Events
With the client ID and secret from your Amazon developer console
var messaging = new AccessTokenClient(AccessTokenClient.ApiDomainBaseAddress);
var details = await messaging.Send("clientId","clientSecret");
var token = details.Token;
Creating a new Event
There are several event types, each in their own namespace, the simplest example is one of a Weather Alert
using Alexa.NET.ProactiveEvents.WeatherAlerts;
...
var eventToSend = new WeatherAlert(WeatherAlertType.Snowstorm);
Localised Attributes
Some alerts have required fields which must be created with a string per locale for each you support. These are created as LocaleAttributes.
var localeAttribute = new LocaleAttributes();
localeAttribute.Add("en-GB","GBLocale");
localeAttribute.Add("en-US","USLocale");
or if you're only in one locale
var localeAttribute = new LocaleAttributes("en-GB","GBLocale");
var eventToSend = new WeatherAlert(WeatherAlertType.Tornado,localeAttribute);
Creating a request to a single User ID
var request = new Alexa.NET.ProactiveEvents.UserEventRequest("userId",eventToSend)
{
ExpiryTime = DateTimeOffset.Now.AddMinutes(10),
ReferenceId = Guid.NewGuid().ToString("N"),
TimeStamp = DateTimeOffset.Now,
};
Creating a request to all subscribed users
var request = new BroadcastEventRequest(eventToSend)
{
ExpiryTime = DateTimeOffset.Now.AddMinutes(10),
ReferenceId = Guid.NewGuid().ToString("N"),
TimeStamp = DateTimeOffset.Now,
};
Sending a request
var client = new ProactiveEventsClient(
ProactiveEventsClient.EuropeEndpoint, token ,true);
// Change true to false for a live environment
await client.Send(request);
Receiving events when a user changes their subscriptions
In the constructor of the function/API setup place the following code
new ProactiveSubscriptionChangedRequestHandler().AddToRequestHandler();
and then you can check your request type
if (input.Request is ProactiveSubscriptionChangedRequest request)
{
var remainingEventTypes = request.Subscriptions;
}