Эта статья направлена на упрощение отправки проактивных событий в Alexa Skill из внешнего процесса Java.
На основе видео « От нуля до героя», часть 13: «Предупреждающие уведомления о событиях» от немецкого Viscuso , и проекта Github Луки Розеллини, написанного на NodeJS. Я создал клиент Java, чтобы было легко отправлять уведомления с любого бэкэнда на основе Java / Kotlin или, например, с любого устройства Android.
Этот код выполняет следующие операции:
- Получите токен аутентификации от Алексы, используя навык
client_id
иclient_secret
. Вы можете получить их в разделе Build Tab — Permissions вашего навыка в консоли разработчика Alexa. - Используйте токен аутентификации, полученный на предыдущем шаге, для широковещательной передачи уведомлений тем пользователям скилла, которые предоставили разрешения на уведомления в приложении Alexa. Он отправляет события по
AMAZON.MessageAlert.Activated
схеме.
Добавление превентивных событий в ваш навык
Помните, что если вы хотите отправлять проактивные события в свой навык, вам нужно изменить манифест навыка ( skill.json ), чтобы добавить разрешения уведомления в навык и объявить схемы (ы) проактивных событий, которые ваш навык может отправлять. Используя SMAPI, вам необходимо:
- Добавьте
permissions
объект вmanifest
свойство навыка ( skill.json ):
JSON
xxxxxxxxxx
1
"permissions": [
2
{
3
"name": "alexa::devices:all:notifications:write"
4
}
5
]
6
- Добавьте
events
объект вmanifest
свойство навыка :
JSON
xxxxxxxxxx
1
"events": {
2
"publications": [
3
{
4
"eventName": "AMAZON.MessageAlert.Activated"
5
}
6
],
7
"endpoint": {
8
"uri": "** TODO: REPLACE WITH YOUR Lambda ARN after created **"
9
},
10
"subscriptions": [
11
{
12
"eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
13
}
14
]
15
}
- Повторно разверните свое умение, запустив
Оболочка
xxxxxxxxxx
1
ask deploy -t skill
Если вы хотите объявить, что навык принимает более одной схемы, просто добавьте их в events.publications
вышеприведенное и не забудьте изменить шаблон в вашем Event
классе из пакета com.xavidop.alexa.model.event
.
Этот процесс более подробно описан в официальной документации Alexa Proactive Events API .
Рабочий пример того, как настроить свой навык для проактивных событий, можно найти в официальном репозитории Alexa Github: https://github.com/alexa/alexa-cookbook/tree/master/feature-demos/skill-demo-proactive- события .
Предпосылки
- Вам нужно Java> = 1.8 для запуска кода и Maven для загрузки необходимых зависимостей.
- Как установить эти два инструмента выходит за рамки этого документа.
устанавливать
Чтобы загрузить зависимости проекта, просто добавьте эту зависимость в свой pom.xml
файл:
XML
xxxxxxxxxx
1
<dependency>
2
<groupId>com.xavidop.alexa</groupId>
3
<artifactId>alexa-proactive-event-sender</artifactId>
4
<version>LATEST</version>
5
</dependency>
Как это использовать
После добавления зависимости вы можете использовать клиент, как показано ниже:
Джава
xxxxxxxxxx
1
String clientId = "YOUR-CLIENT";
2
String secretId = "YOUR-SECRET";
3
AlexaProactiveEventSenderClient client = new AlexaProactiveEventSenderClient(clientId, secretId);
5
ProactiveEvent event = new ProactiveEvent();
7
event.getEvent().getPayload().getMessageGroup().getCreator().setName("Test");
8
URLRegion urlRegion = new URLRegion();
10
urlRegion.setRegion(Region.NA);
11
urlRegion.setEnvironment(Environment.DEV);
12
client.sendProactiveEvent(event, urlRegion);
Environment
: будут ли целевые события отправляться на конечные точкиlive
илиdevelopment
. Допустимые значенияdev
иpro
.Region
: определяет регион конечной точки Alexa, который будет использоваться для отправки проактивных событий. Допустимые значения:EU
(Европа),NA
(Северная Америка) иFE
(Дальний Восток). Помните : если ваши пользователи находятся в NA, и вы отправляете события через конечную точку ЕС, пользователи, расположенные в NA, не будут получать никаких уведомлений.
Это значения по умолчанию для события при его создании:
JSON
xxxxxxxxxx
1
{
2
"timestamp": "",
3
"referenceId": "UUID-AUTOGENERATED",
4
"expiryTime": "",
5
"event": {
6
"name": "AMAZON.MessageAlert.Activated",
7
"payload": {
8
"state": {
9
"status": "UNREAD",
10
"freshness": "NEW"
11
},
12
"messageGroup": {
13
"urgency": "URGENT",
14
"creator": {
15
"name": ""
16
},
17
"count": 1
18
}
19
}
20
},
21
"relevantAudience": {
22
"type": "Multicast",
23
"payload": {}
24
}
25
}
Это все!
Вы можете найти все выпуски и исходный код в моем GitHub .
Удачного кодирования!