alexaプロアクティブAPIを叩いてみた

alexaプロアクティブAPIを叩いてみた

プロアクティブAPIを叩く際にハマッたので備忘録

今回もほとんど理解できていないままに、ブログ書いてしまっていますので、話半分で読んで頂けると幸いです。

参考サイト

alexaで通知を飛ばしてみる

Amazon公式

ask cliからAlexa skillをdeployする

そもそもプロアクティブAPIとは

ProactiveEvents APIを使用すると、Alexaスキル開発者はAlexaにイベントを送信できます。イベントとは、ユーザーが興味を持つと考えられる事実に基づくデータのことです。イベントを受信すると、Alexaは、これらのイベントを受け取るようサブスクリプションを行ったユーザーに、プロアクティブに情報を配信します。現在、このAPIは、Alexa通知というプロアクティブチャンネルを1つサポートしています。将来的にプロアクティブチャンネルが追加されると、開発者は新しいAPIを統合しなくても、追加のチャンネルを利用できるようになります。

(Amazon公式ドキュメントより)

要は、通知です。プロアクティブAPI叩いて、ユーザー全員もしくは指定のデバイスIDへ音と黄色い光で何かしらのメッセージ(イベント)があることをalexaがユーザーに伝えてくれます。(何かしらの通知があるとAmazonEchoが反応する時に青くなる部分が黄色くなります。こんな感じ↓わかりづら)

必要な環境

ASK CLI(Alexaスキルキット コマンドライン インターフェイス)ってのが必要になります。(公式ドキュメントこちら

通常のalexaスキルであれば、alexa Developer Consoleから作成すれば問題ないのですが、プロアクティブAPIを使用する場合は、スキルマニフェストを編集する必要があります。 「リマインダーAPI使いますよ」とか、「ユーザーのアドレス帳にアクセスしますよ」ってのはalexa Developer Consoleからでもスキルマニフェストを編集できるのですが、プロアクティブAPIはまだ、alexa Developer Consoleからは編集出来ないようです。

なので、ask cli をインストール!!!こちらのサイトにインストール方法・設定方法は載ってあります。

なぜかデプロイ出来ない

ここからダイブ端折ります。(すみません。)

alexaで通知を飛ばしてみる

上記サイト通りに設定進めていきます。skill.json のpermissionsに通知使うよと追加します。こんな感じ

{
  "manifest": {
    "publishingInformation": {
      "locales": {
        "ja-JP": {
          "summary": "Sample Short Description",
          "examplePhrases": [
            "Alexa open hello world",
            "hello",
            "help"
          ],  
          "name": "notif",
          "description": "Sample Full Description"
        }   
      },  
      "isAvailableWorldwide": true,
      "testingInstructions": "Sample Testing Instructions.",
      "category": "KNOWLEDGE_AND_TRIVIA",
      "distributionCountries": []
    },  
    "permissions": [
      {   
        "name": "alexa::devices:all:notifications:write"
      }   
    ],  
    "events": {
      "publications": [
        {   
          "eventName": "AMAZON.OrderStatus.Updated"
        },  
        {   
          "eventName": "AMAZON.MessageAlert.Activated"
        }   
      ],  
      "endpoint": {
        "uri": " Lambdaのエンドポイント "
      },  
      "subscriptions": [
        {   
          "eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
        }   
      ],  
      "regions": {
        "FE": {
          "endpoint": {
            "uri": " Lambdaのエンドポイント "
          }
        }     
      }     
    },    
     "apis": {
        "custom": {
          "endpoint": {
            "sourceDir": "lambda/custom",
            "uri": "ask-custom-notif-default"
          }
        }
      },
      "manifestVersion": "1.0"
    }
  }

Amazon公式のこちらの通りにマニフェスト編集したのですが、なぜかask deployすると

custom - object has missing required properties ([\"locales\"]) 

というエラーで怒られる。jsonの中にlocalesはイジってないんだけどな。と思いつつ

一旦プレーンな状態でdeployしてみる

いったん、ask newしてプレーンな状態(skill.jsonとか何も編集しない状態)でalexa Developer Consoleにデータを上げてみました。そこで、呼び出し名など適当に入力して、ビルドしました。

そこから、またローカルのask cliに戻って、先程の上記のjsonにskill.jsonを編集!もう一度

ask deploy

当然のことながら、alexa Developer Console とローカルのデータでは食い違いが有るので、警告がでますが、気にせず

ask deploy –force

したら、なぜか上手くdeployされました。

うーーー。原因がわからず、大変気持ち悪い。

このあとは、githubの超ありがたいこちらを使ってプロアクティブAPI叩くと上手く実機で反応してくれました。

試してみたけど

そもそもプロアクティブAPIを叩こうと思ったきっかけですが、「家族で伝言残すスキル」作ろう!というのがきっかけでした。

でも、よく考えるとalexaアプリ使ったら、スマホから家のalexaにメッセージ送れば出来るなと。

ドキュメントとかプロアクティブAPIのこと調べてると、そういった使い方よりも、スキル内課金とかしたあとに、「注文処理完了したよーー!」とか、「スキルバージョンアップしたから更新してー」とかそうった使い方を想定されているのかなと。

音声デバイス自体がまだ黎明期なので、なかなか使い所が難しいというかどう使ったら良いのか難しいですね。精進します。

最後まで読んでいただきありがとうございました。