article

Tsuneki@Amazon avatar image
Tsuneki@Amazon posted

サンプルコード紹介:Proactive events APIの日本語スキルでの実行方法

ProactiveEvents APIを使用すると、スキルのユーザーに対してAlexa通知を送信できます。

スキル内で設定するReminderと異なり、Proactive eventはセッション外から設定することができます。


今回はGithubのサンプルコードを参考に日本語環境でのProactiveEvent APIの実行方法を解説します。

今回参考にするのは skill-demo-proactive-eventsskill.jsonorder.js です。


1. Hello Worldスキルの作成


GithubのサンプルではCloudFormation を使用してLambda 環境を構築していますが、

今回は Proactive event APIを日本語環境で実行するのが目的のため、Hello World スキルを日本語環境で作成します。

aws のデフォルトリージョンが東京になっていることを確認してください。

(設定されていない場合は、 "aws configure" コマンドで default region に ap-northeast-1を設定します。)

Terminal から "ask new" コマンドを実行します。

バージョンは Node.js V8

テンプレートは Hello World を選択してください。


作成したスキルの skill.json の locales に ja-JP を追加後、Terminalから "ask deploy" コマンドを実行してください。

 "locales": {
        "ja-JP": {
          "summary": "Sample Short Description",
          "examplePhrases": [
            "アレクサ、通知デモを開いて",
            "通知デモ",
            "ヘルプ"
          ],
          "name": "通知デモ",
          "description": "Sample Full Description"
        }
      },


2. スキルのセットアップ


サンプルを参考にして、作成したスキルの skill.jsonpermissionsevents を追加します。

  • プロアクティブイベントのスキーマは日本語環境でサポートされているものを指定します。今回は "AMAZON.TrashCollectionAlert.Activated" を指定してください。
  • 2箇所の uri にステップ1で作成したLambdaのARNを設定します。


  "permissions": [
      {
        "name": "alexa::devices:all:notifications:write"
      }
    ],
    "events": {
      "publications": [
        {

      // AMAZON.TrashCollectionAlert.Activatedに変更します
          "eventName": "AMAZON.TrashCollectionAlert.Activated"
        }
      ],
      "endpoint": {

     // ステップ1 で作成したLambda のエンドポイントを設定します
        "uri": "** TODO: REPLACE WITH YOUR Lambda ARN after created **"
      },
      "subscriptions": [
        {
          "eventName": "SKILL_PROACTIVE_SUBSCRIPTION_CHANGED"
        }
      ],
      "regions": {
        "FE": {
          "endpoint": {

       // ステップ1 で作成したLambda のエンドポイントを設定します
            "uri": "** TODO: REPLACE WITH YOUR Lambda ARN after created **"
          }
        }
      }
    },


3. Proactive events の送信


サンプルを参考に order.js ファイルを新規作成し、AlexaスキルメッセージングのクライアントIDとクライアントシークレット、userIdを下記の a), b) を参考にして設定します。

const clientID = `amzn1.application-oa2-client.274a50e4....`;

const clientSecret = `97a166....`;

let userId1 = `amzn1.ask.account.AHVVDYK7EA.....`;


a) userId は、開発者コンソールのテストタブでステップ1で作成したスキルを起動して JSON 入力に表示されるuserIdをコピーして設定します。



b) AlexaスキルメッセージングのクライアントIDとクライアントシークレットは、開発者コンソールのビルド画面左下のアクセス権限を選択すると表示されます。


order.js 27行目の ProactiveEvent APIの呼びす際の開発エンドポイントをFE用(日本リージョン)のものに変更します。

function getProactiveOptions(token, postLength) {
  return {

   // FE用のエンドポイントに変更
    hostname: "api.fe.amazonalexa.com", 
    port: 443,
    path:
      "/v1/proactiveEvents/" +
      (mode && mode === "prod" ? "" : "stages/development"), 
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "Content-Length": postLength,
      Authorization: "Bearer " + token
    }
  };
}


order.js 67行目のイベントスキーマをAMAZON.TrashCollectionAlert.Activated 用に修正します。

localizedAttributes にja-JPを設定します。

const eventJson = {
    timestamp: timestamp.toISOString(),
    referenceId: referenceId,
    expiryTime: expiryTime.toISOString(),
    
  //TrashCollectionAlert用に修正
    event: {
      name: "AMAZON.TrashCollectionAlert.Activated",
      payload: {
        alert: {
          garbageTypes: ["COMPOSTABLE", "RECYCLABLE_PLASTICS"],
          collectionDayOfWeek: "TUESDAY"
        }
      }
    },
    localizedAttributes: [
      {

        //ja-JPを追加
        locale: "ja-JP",
        sellerName: "Delivery Owl"
      }
    ],
    relevantAudience: {
      type: "Unicast",
      payload: {
        user: userId
      }
    }
  };

以上でProactiveEvent APIを日本語スキルに送信する準備が整いました。


アレクサアプリでスキルを有効にし、スキルの設定からAlexa通知設定を有効にします。

Terminal から "node order.js" コマンドを実行してスキルに通知を送信します。

echo 端末が通知を受け、黄色のリングが点滅すれば成功です。


ご指摘、ご要望がございましたら、お気軽にコメント願います。


Alexa Skills Kit (ASK) (日本語) スペースでは、スキル開発に関する質問や、他のメンバーの質問に対する回答を投稿することができます。お気軽に投稿ください。

alexa skills kitalexaskillawards2019
10 |5000 characters needed characters left characters exceeded

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Article

Contributors

tsuneki contributed to this article ritsum contributed to this article