0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Alexaスキルに通知機能を実装してみた

Last updated at Posted at 2021-05-09

#概要
Alexaスキルでは、スキルを利用しているユーザーに、プロアクティブAPIを利用して通知を送ることができます。
今回は、コードよりもスキルのマニフェストを少し細かく載せておきます。

#プロアクティブイベントAPI
プロアクティブイベントAPI(公式)
プロアクティブイベントAPIを使用すると、スキルの ClientId と ClientSecret を利用してトークンを発行することでスキルを使用している全ユーザーまたは、userId を利用して特定のユーザーに通知を送ることができます。
通知には定型文があり、イベントカタログの中から選択する必要があります。(定型文の追加をリクエストすることも出来るようです)

#実装してみた
##事前に準備するもの

  • Alexaスキル
    • Alexa Developer Console で適当なスキルを作成しておきます。
  • AlexaスキルのEndpoint (Lambda)
  • Alexaスキルの通知設定の変更を受け取るEndpoint (Lambda:alexa-skill-proactive-events)

##1. スキルのマニフェストを変更する
###追記 2021/06/13
以下ではSMAPIを使用して通知のパーミッションを追加していますが、Alexa Developer Console で変更できるようになっていました!現段階で確認できているのはマルチ機能スキル(MCS)のみですが、今後カスタムスキル、スマートホームスキルでも Alexa Developer Console から変更できるかもしれません。
###SMAPIによる変更
スキルで通知機能を実装するためにマニフェストを変更する必要があります。
Alexa Developer Console では変更できないため、SMAPIを使用してプロアクティブイベントを定義します。
まず、スキル情報の取得APIで事前に作成しておいたスキルのマニフェストを取得します。
次に、取得したスキルのマニフェスト(skill.json)に以下のように events, permission を追加します。

skill.json
    "events": {
      "publications": [
        {
          "eventName": "AMAZON.MessageAlert.Activated"
        }
      ],
      "subscriptions": [
        {
          "eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
        },
        {
          "eventName": "SKILL_PERMISSION_ACCEPTED"
        }
      ],
      "endpoint": {
        "uri": "arn:aws:lambda:us-east-1:xxx:function:alexa-skill-proactive-events"
      }
    },
    "permissions": [
      {
        "name": "alexa::devices:all:notifications:write"
      }
    ]
  • events.publicationsでは、イベントカタログの中から通知する形式を設定します。
    今回は、「山田太郎からのメッセージが5件あります」という形式の通知を送るため、AMAZON.MessageAlert.Activatedを設定しています。
  • events.subscriptionsでは、Endpoint にイベントが送られてくるタイミングを設定します。
    スキルの通知設定を有効にしたとき(SKILL_PROACTIVE_SUBSCRIPTION_CHANGED)とスキルの権限を変更したとき(SKILL_PERMISSION_ACCEPTED)にイベントが送られてくるように設定しています。通知を特定のユーザーに送るときに必要な userId を accessToken と紐づけるために設定しています。どちらもユーザー全員に通知を送るだけだと不要です。
  • events.endpointでは、事前に準備した Endpoint を設定します。
    events.subscriptionsで設定したタイミングでイベントが送られてくるため、必要な情報を DynamoDB 等に保存しておきます。
  • permissionsでは、スキルの権限を設定します。
    通知を送るためにalexa::devices:all:notifications:writeを設定しています。

マニフェストを変更したら、既存スキルの更新APIでスキルのマニフェストを更新します。
##2. 通知をおくる
まず、通知をおくるためにはスキルの clientId, clientSecret が必要になるため、Alexa Developer Console で確認します。ビルドタブのアクセス権限から確認できます。
次に、アクセストークン取得APIを使用してアクセストークンを取得します。
最後に、プロアクティブイベントAPIを呼び出すことで通知を送ることができます。
コードについては省略します。
通知を送ると Amazon echo が点滅するので「通知教えて」と喋りかけると通知の内容を教えてくれます。

#参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?