概要
プロアクティブイベントAPI を利用して、ユーザーにイベント(通知)を送ってみました。
こちらの内容を実際にやってみます。
プロアクティブイベントとは
スキルで発行されたClientID + ClientSecretを利用して
任意のユーザーもしくは全ユーザーに
通知を送ることができます。
通知が送られると、Echo Dotの場合は、「ポン」と音を出しLEDが黄色にひかり、「アレクサ、通知は何?」と話しかけるとその詳細を確認できます。
やってみた
作成するもの
- alexa skill(通知する側のスキル)
- イベント通知を受け取るlambda(subscribeする側のlambda)
- 実際にこのlambdaが利用される場面はよくわからないけれども、用意しないと設定できない模様。
1. alexaスキルの作成
メインとなるalexaスキル、すなわち通知する側のスキルを作成します。
今回もこれで、サクッとサンプルアプリを作ります。
(別になんでもよいです。)
2. subscribeするlambdaの作成
serverless frameworkを利用してlambdaを作ります。
$ serverless create --template aws-nodejs --path subscribe-event-lambda
イベント通知を受け取るために、lambdaの入力トリガーとして、skillIdを指定してalexaと連携させます。
serverless frameworkでは、 eventsの部分を追加すればOKです。
functions:
hello:
handler: handler.hello
events:
- alexaSkill: amzn1.ask.skill.xxx
3. skill.jsonの設定
alexa skill側の設定に戻ります。
イベント通知用のpermissionを追加します。
$ cat skill.json | jq .manifest.events
{
"publications": [
{
"eventName": "AMAZON.OrderStatus.Updated"
},
{
"eventName": "AMAZON.MessageAlert.Activated"
}
],
"subscriptions": [
{
"eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
}
],
"endpoint": {
"uri": "arn:aws:lambda:us-east-1:XXX:function:subscribe-event-lambda-dev-hello"
}
}
publications
では、ここを参考に通知するイベントを設定します。
subscriptions
はなくても動きますが、サンプルからコピペしておきます。
この記述があると、スキルを有効化したタイミングで、hello lambdaが起動するようです。
endpoint
は必須のようです。使われるタイミングは不明です。
以上で、skill側の設定は完了なので、変更点をdeployします。
$ ask deploy
4. 通知を飛ばす
通知を飛ばすためには、2つのAPIを叩く必要があります。
- アクセストークンを取得する
- 通知API(ProactiveEvents API)を呼び出す
1.アクセストークンの取得
で利用するclientIdとclientSecretは、
alexa developer consoleの「スキル」 -> 「アクセス権限」 -> 「Alexaスキルメッセージング」 の物を利用します。
2. 通知APIを呼び出す
では、指定のユーザーもしくは全員のいずれかを選択できますが、今回は指定のユーザーに対して通知します。
なお、userIdの特定は、alexa skillにログを仕込んで、そこから確認するという方法を用いました。
console.log(JSON.stringify(handlerInput.requestEnvelope, null , "\t"));
ドキュメントには、curlを使って叩く例が記載されていますが、簡単のためこちらのコードを利用します。
https://github.com/tekutoo/alexa-cookbook/blob/feature/mod-proactive-events/feature-demos/skill-demo-proactive-events/order.js
オリジナルのコードを一部しました。(一部の変数を環境変数に設定しています)
変更点
通知してみます。
(なお、例のごとく実機でないとおそらく動かないかもしれません。iPhoneのalexaアプリだとだめかもしれないです。)
# 環境変数をセットします。
$ export CLIENT_ID=hogehoge
$ export CLIENT_SECRET=fugafuga
$ export USER_ID=amzn1.ask.account.xxx
$ node order.js #通知します。
その他
- GitHubにとても参考になるサンプル集がおいてありました
https://github.com/alexa/alexa-cookbook/tree/master/feature-demos