手順1: ビデオスキルとLambda関数を作成する


手順1: ビデオスキルとLambda関数を作成する

この手順では、Alexa開発者コンソールを使用してビデオスキルをセットアップし、ビデオスキルからの通信を処理する基本的なLambda関数をAWS上で作成します。

Fire TV対応サンプルアプリに関する注意点

Fire TV対応サンプルアプリを使用する場合でも、このトピックで説明する全タスクを完了させる必要があります。

ビデオスキルとLambdaについて

Fire TV対応アプリでは、Alexaがユーザーの発話をリッスンし、それをディレクティブに変換します。ディレクティブは、JSON形式で記載されたデータと命令のセットのことで、Alexaからクラウド上のLambda関数に送信されます。

たとえば、ユーザーが「『ボッシュ』再生して」と話しかけると、Alexaがこれを特定のJSON構造から成る検索ディレクティブに変換します(ほかにも、再生ディレクティブやチャンネル変更ディレクティブなどがあります)。Alexaは、ユーザーの発話をプログラムで処理可能なディレクティブにマッピングする役割を担っています。

さらに、ディレクティブはビデオスキルAPIを介してAWS上のLambdaコードに渡されます。Lambdaは、コードをホストするサーバーを必要とせずに、クラウド上でコードを実行できるAWSのサービスです。LambdaコードがビデオスキルAPIから届いたディレクティブを処理し、Amazon Device Messaging(ADM)経由でLambdaからアプリにアクションが送られます。

手順1.1: ビデオスキルの作成を始める

まずビデオスキルの作成を開始して、スキルのアプリIDを取得します(このアプリIDは、Lambda関数を作成する際に使用します)。

以下の手順に従って、ビデオスキルの作成を開始します。

  1. https://developer.amazon.comにアクセスします。
  2. 画面右上にある [開発者コンソール] をクリックします。ログインしていない場合は、ログイン画面が表示されます。
  3. メインナビゲーションで [Alexa] をクリックし、[Alexa Skills Kit] を選択します。
  4. [スキルの作成] をクリックします。
  5. [スキル名] フィールドに、スキルの名前(通常はStreamzなどのアプリ名)を入力します。

  6. [スキルに追加するモデルを選択] で、[ビデオ] を選択します。

    Alexa開発者コンソールでのビデオスキル作成
    Alexa開発者コンソールでのビデオスキル作成
  7. 画面右上にある [スキルを作成] をクリックします。

  8. [スキルID] の横にある [クリップボードにコピー] をクリックします。

    ビデオスキルIDをコピーする
    ビデオスキルID

    この情報をシンプルなテキストファイルでコンピューター上に保存してください。このチュートリアルを進めるにあたって得られるほかの情報もここに保存します。このスキルID値は、ビデオスキルのLambda関数を作成する際に必要になります。

    ビデオスキルを構成するには、デフォルトのエンドポイント(Lambda関数のARN)の構成が必須となります。

    ビデオスキルの構成に必要なARN
    ビデオスキルの構成に必要なARN

    ビデオスキルの構成をいったんここで中断して、ARNを取得してください。そのためには以下のセクションに沿って、IAMロールとLambda関数を作成します。ビデオスキル作成中の画面を開いたままにして、新しいタブを開くこともできますが、そのセッションはおそらくタイムアウトします。

手順1.2: Lambda用IAMロールを作成する

これから、ビデオスキルとのやり取りで必要なLambda関数の作成に取りかかります。まず、Lambda関数を呼び出せるアプリを指定するためのアクセス権限を定義する必要があります。ここでは、Lambda関数がCloudWatchなどのAWSサービスを呼び出すことを許可するIAMロールを作成します。以下の手順に従って、IAMロールを作成します。

  1. AWSマネジメントコンソールにログインします。
  2. 以下の表に基づいて、画面右上でAWSリージョンを選択します。

    AWSリージョンの選択
    AWSリージョンの選択

    ユーザーの居住地に近いリージョンを選択すると、発話からLambda呼び出しまでのレイテンシーを最小限に抑えることができます。また、間違ったAWSリージョンを選択すると、ビデオスキルが機能しなくなります。

    スキルの言語 ユーザーのリージョン AWSリージョン
    英語(米国)、英語(カナダ) 北米 米国東部(バージニア北部)
    英語(英国)、フランス語(フランス)、ドイツ語、イタリア語、スペイン語(スペイン) 欧州、インド 欧州(アイルランド)
    英語(インド) 欧州、インド 欧州(アイルランド)
    日本語、英語(オーストラリア) 極東 米国西部(オレゴン)
  3. [サービス] をクリックし、[IAM] に移動します(検索ボックスを使用してください)。
  4. 左側のナビゲーションから [ロール] を選択し、[ロールの作成] をクリックします。
  5. [AWSサービス](デフォルトで選択済み)で、[Lambda] をクリックし、下部の [次のステップ: アクセス権限] をクリックします。
  6. AWSLambdaBasicExecutionRole」を検索し、その横にあるチェックボックスをオンにして、[次のステップ: タグ] をクリックします。
  7. 「タグの追加(オプション)」構成をスキップし、[次のステップ: 確認] をクリックします。
  8. ロールに名前を付け(「video_skill_streamz」など)、必要に応じて説明を入力し、[ロールの作成] をクリックします。

    Lambdaとやり取り可能なIAMロールの作成
    Lambdaとやり取り可能なIAMロールの作成

    IAMロール名を記録して、以下の手順ですぐに使用できるようにしてください(特にAWSで複数のIAMロールを作成済みの場合)。

手順1.3: ビデオスキルのLambda関数を作成する

次に、ビデオスキルで使用するLambda関数を作成します。作成が完了すると、ビデオスキルの構成に必要なAmazonリソースネーム(ARN)を取得することができます。以下の手順に従って、ビデオスキルのLambda関数を作成します。

  1. AWSマネジメントコンソールで[サービス] をクリックし、[Lambda] に移動します([検索] ボックスを使用してください)。
  2. [関数の作成] をクリックします。
  3. [一から作成] を選択したままにして、以下のように設定します。
    • [関数名]: 一意の名前にします(例:firetv_app_lambda)。
    • [ランタイム][Node.js 8.10](この統合ではNode.jsでLambdaのサンプルコードを記述しています。本番ではPythonやRuby、.NET、Javaなどの言語も使用可能です)。
    • [アクセス権限]
      AWSでの基本的なLambda関数の作成
      AWSでの基本的なLambda関数の作成
  4. [関数の作成] をクリックします。

    Lambda関数が作成されます。Lambda関数がAlexaからディレクティブを受信するようにするには、メッセージの取得場所を通知するスマートホーム用トリガーを追加する必要があります。このトリガーとして、クラウド上でデバイスとLambdaコンピューティングをつなげる役目を果たすのが、スマートホームAPIです。ただし、Alexaのスマートホーム用トリガーを構成するには、ビデオスキルのアプリIDが必要となります。

  5. [Designer] セクションで、[+トリガーを追加] をクリックします。
  6. [トリガーの設定][Alexa Smart Home] を選択し、[アプリケーションID] フィールドに(手順1.1で作成した)ビデオスキルIDを入力してから、[追加] をクリックします。

    ビデオスキルIDを使用したLambdaの構成
    ビデオスキルIDを使用したLambdaの構成

    [追加] をクリックすると、「トリガー<123456…>が関数<Lambda関数名>に正常に追加されました。関数は現在、トリガーからのイベントを受信しています」という成功の通知が表示されます。

    この場合、トリガーはビデオスキルです。これで、Lambda関数がビデオスキルからのイベントを受信するようになりました。

  7. 以下のスクリーンショットが示すように、Lambda関数のARNが画面右上に表示されるので、コピーして記録します。これは、次のセクション(手順1.4: ビデオスキルのセットアップを完了させる)でビデオスキルを構成する際に必要となります。

    Lambda関数用ARNの表示場所
    Lambda関数用ARNの表示場所
  8. ページ中央に表示されるLambda関数の名前(Lambdaアイコンがあるボックス)をクリックすると、ウィンドウ下部にコードエディターが表示されます。
  9. 初期のセットアップを容易にするため、基本的なLambdaコードが用意されています。これを使用して、ビデオスキルの実装を始めてください。このコードは、Alexaからのディレクティブに応答し、Fire TV対応アプリと通信します。手順は以下のとおりです。

    1. 下の [コードをコピー] ボタンをクリックして、コードをクリップボードにコピーします。
    2. ファイルのコード全体をそのまま関数コードエディターに貼り付け、エディター内にあるindex.jsファイルの既存コードと置き換えます。
    3. 画面右上の [保存] をクリックします。

クリップボードにコピーされました。

/**
* Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Amazon Software License (the "License"). You may not use this file except in # compliance with the License.
* A copy of the License is located at http://aws.amazon.com/asl/
*
* or in the "license" file accompanying this file. This file is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS
* OF ANY KIND, express or implied. See the License for the specific # language governing permissions and limitations under the License.
**/

// このファイルはFire TVでビデオスキルAPIを統合する際に使用するLambda関数のサンプルコードで、
// Discovery、SearchAndPlay、FastForward、ChangeChannelなどのディレクティブに対するレスポンスが
// 含まれています。このコードを土台として、作成したロジックを追加してください。
// また、本番環境で使用する際は必ず事前にコードをテストし、検証してください。
// Lambda関数が受信したディレクティブは、ADMを介して直接アプリに送信する方法をお勧めします。
// それ以降の処理は、すべてアプリ内で実行可能です。
// 注: Alexaへのレスポンスには変更を加えず、ディレクティブの処理・送信部分のみコーディングしてください。
// 注: ディレクティブはLambda関数からアプリに送信すべきですが、アプリからLambda関数へは
// メッセージを送信しないでください。Lambda関数からの成功レスポンスは、Lambda関数がメッセージを
// 受信したことを示すもので、アプリによる受信を示すものではありません。

var AWS = require('aws-sdk');

exports.handler = (event, context, callback) => {
    console.log("AlexaによるLambda関数の呼び出し");
    console.log("イベント:" + JSON.stringify(event, null, 2));
    console.log("コンテキスト:" + context);
    let directive = event.directive;
    if (directive)
    {
        console.log("Alexaからディレクティブを受信:" + directive);
        if (directive.header.name == "Discover")
        {
            console.log(directive.header.name, "ディレクティブをAlexaから受信");
            let resp = {
               event: {
                   header : {
                       messageId : directive.header.messageId,
                       name : "Discover.Response",
                       namespace: "Alexa.Discovery",
                       payloadVersion: "3"
                   },
                   "payload": {
                       "endpoints": [
                           {
                               "capabilities": [
                                   {
                                       "interface": "Alexa.RemoteVideoPlayer",
                                       "type": "AlexaInterface",
                                       "version": "1.0"
                                   },
                                   {
                                       "interface": "Alexa.PlaybackController",
                                       "type": "AlexaInterface",
                                       "version": "1.0"
                                   },
                                   {
                                       "interface": "Alexa.SeekController",
                                       "type": "AlexaInterface",
                                       "version": "1.0"
                                   },
                                   {
                                       "interface": "Alexa.ChannelController",
                                       "type": "AlexaInterface",
                                       "version": "1.0"
                                   }
                               ],
                               "endpointId": "VSKTV",
                               "description": "VSKTVは、Fire TVに組み込むために開発されたビデオスキル用デフォルトデバイスです",
                               "friendlyName": "VSKTV",
                               "manufacturerName": "Amazon"
                           }
                       ]
                    }
               }
            };
            console.log("Alexaに", directive.header.name, "レスポンスを送信中:", JSON.stringify(resp));
            callback(null, resp);
        }
        else if (  directive.header.name == "SearchAndPlay"
				|| directive.header.name == "SearchAndDisplayResults"
				|| directive.header.name == "Play"
				|| directive.header.name == "Resume"
				|| directive.header.name == "Pause"
				|| directive.header.name == "Next"
				|| directive.header.name == "Previous"
				|| directive.header.name == "Rewind"
				|| directive.header.name == "FastForward")
        {
            console.log(directive.header.name, "ディレクティブをAlexaから受信");

			// ディレクティブを処理する独自のロジックをここに指定
			// ディレクティブをLambda関数からアプリに送信するためのコードをここに指定

            // 以下で成功レスポンスをAlexaに返し、Lambda関数によるディレクティブの受信を通知
            let resp = {
                event: {
                    "header" : {
                        "messageId": "not-required",
                        "correlationToken": "not-required",
                        "name": "Response",
                        "namespace": "Alexa",
                        "payloadVersion": "3"
                    },
                    "endpoint": {
                        "scope": {
                            "type": "DirectedUserId",
                            "directedUserId": "not-required"
                        },
                        "endpointId": "not-required"
                    },
                    "payload": { }
                }
            };
            console.log("Alexaに", directive.header.name, "レスポンスを送信中:", JSON.stringify(resp));
            callback(null, resp);
        }
        else if (directive.header.name == "AdjustSeekPosition")
        {
            console.log(directive.header.name, "ディレクティブをAlexaから受信");

			// AdjustSeekPositionディレクティブを処理する独自のロジックをここに指定
			// このディレクティブをLambda関数からアプリへ送信するためのコードをここに指定

            // 以下で成功レスポンスをAlexaに返し、Lambda関数によるディレクティブの受信を通知
            let resp = {
                event: {
                    "header" : {
                        "messageId": "not-required",
                        "correlationToken": "not-required",
                        "name": "StateReport",
                        "namespace": "Alexa.SeekController",
                        "payloadVersion": "3"
                    },
                    "endpoint": {
                        "scope": {
                            "type": "DirectedUserId",
                            "directedUserId": "not-required"
                        },
                        "endpointId": "not-required"
                    },
                    "payload": {
                      "properties": [{
                        "name": "positionMilliseconds",
                        "value":  0 
                      }]
                    }
                }
            };
            console.log("Alexaに", directive.header.name, "レスポンスを送信中:", JSON.stringify(resp));
            callback(null, resp);
        }
		else if (directive.header.name == "ChangeChannel")
        {
            console.log(directive.header.name, "ディレクティブをAlexaから受信");

			// ChangeChannelディレクティブを処理する独自のロジックをここに指定
			// このディレクティブをLambda関数からアプリへ送信するためのコードをここに指定

            // 以下で成功レスポンスをAlexaに返し、Lambda関数によるディレクティブの受信を通知
            let resp = {
                context: {
                    "properties": [
                    {
                        "namespace": "Alexa.ChannelController",
                        "name": "channel",
                        "value": {
                            "number": "1234",
                            "callSign": "not-required",
                            "affiliateCallSign": "not-required"
                        },
                        "timeOfSample": "2017-02-03T16:20:50.52Z",
                        "uncertaintyInMilliseconds":  0 
                    }
                    ]
                },
                event: {
                    "header" : {
                        "messageId": "not-required",
                        "correlationToken": "not-required",
                        "name": "Response",
                        "namespace": "Alexa",
                        "payloadVersion": "3"
                    },
                    "endpoint": {
                        "endpointId": "not-required"
                    },
                    "payload": { }
                }
            };
            console.log("Alexaに", directive.header.name, "レスポンスを送信中:", JSON.stringify(resp));
            callback(null, resp);
        }
        else if (directive.header.name == "AcceptGrant")
        {
            console.log(directive.header.name, "ディレクティブをAlexaから受信");
            let resp = {
                "event": {
                    "header": {
                        "messageId": "abc-123-def-456",
                        "namespace": "Alexa.Authorization",
                        "name": "AcceptGrant.Response",
                        "payloadVersion": "3"
                        },
                "payload": {}
              }
            };
            console.log("Alexaに", directive.header.name, "レスポンスを送信中:", JSON.stringify(resp));
            callback(null, resp);

        }
        else
        {
			console.log("サポート対象外のディレクティブです。無視します。");
			callback(null, 'サポート対象外のディレクティブです。無視します。');
        }
    }
    else
    {
		console.log( 'ディレクティブがnullです。無視します。');
        callback(null, 'ディレクティブがnullです。無視します。');
    }
};

以下はLambda関数コードエディターのスクリーンショットです(ここにコードを挿入します)。

Lambda関数コードエディター
Lambda関数コードエディター

Lambda関数はAlexaから送信されたディレクティブを受け取ります(Lambdaのコードとロジックに関する詳細と手順については、手順6: Lambdaパッケージを作成・デプロイするで、Lambda関数をカスタマイズする際に説明します)。Alexaはユーザーの発話(例:『インターステラー』を再生して)をリッスンし、そのリクエストをJSON形式のディレクティブとしてパッケージ化する、ということを覚えておいてください。

LambdaはAlexaからディレクティブを受け取り、何らかのアクションを実行します。まず、Lambdaはディレクティブのメッセージヘッダーにある名前空間と名前の値によってリクエストの種類を判断します。たとえば、名前空間はリクエストがDiscoveryまたはChannelControlのディレクティブであるかを指定するので、これに応じてhandleDiscoveryまたはhandleChannelControl関数が呼び出されます。

このサンプルコードのLambda関数は、アクションを実行しません。手順6: Lambdaパッケージを作成・デプロイするで、このコードをカスタマイズして、実行するアクションのロジックを作成し、受信メッセージに関する基本的なレスポンスを指定することになります。

Lambdaコードをより詳細にカスタマイズするには、スキルに対するあらゆる種類のユーザーリクエストを処理し、アプリによる適切なレスポンスをAmazon Device Messaging(ADM)経由で提供する必要があります。チュートリアルの後半では、ビデオスキルでさまざまなディレクティブを処理する方法をテストします。

ここでは、基本的なLambdaコードのセットアップのみを行います。使用するLambdaコードは汎用的なもので、Gracenoteに登録された全ビデオコンテンツの情報を返すことができます。つまり、すべてのアプリカタログに含まれるメディアの全インスタンスに関する情報を取得することができます。

後で実際に使用するアプリのカタログを用いてLambdaコードをカスタマイズしますが、その際のレスポンス範囲は同カタログだけに限定されます。また、Lambdaコードのロジックについても後ほど詳しく説明します。

手順1.4: ビデオスキルのセットアップを完了させる

手順1.1: ビデオスキルの作成を始めるでセットアップを開始したビデオスキルに戻り、作業を完了させます。

以下の手順に従って、ビデオスキルのセットアップを完了させます。

  1. Alexa開発者コンソールのビデオスキルに戻ります。
  2. Alexaのスキルの一覧で、前に開始していたビデオスキルをクリックします(この画面を開いたままにしていた場合は、ページを更新して現在もログイン中であることを確認してください)。
  3. LambdaのARNを [デフォルトのエンドポイント] ボックスに貼り付けます(このARNは手順1.3: ビデオスキルのLambda関数を作成するでコピーしたものです)。
  4. [対象顧客に最も近い地域を選択して...] セクションで、地域別に異なるLambda ARNを選択して、AlexaとLambdaの間のレイテンシを低減させることができます。前に選択したAWSリージョンに基づいて、これらの地域のいずれかにARNを貼り付けます。

    Lambda ARNを使用したビデオスキルの構成
    Lambda ARNを使用したビデオスキルの構成
  5. [国固有の設定] で、スキルの対象国を選択します。デフォルトでは、1つの国が既に選択されているはずです(米国など)。ビデオスキルを複数の国で利用可能にする場合は、[国を追加] をクリックして国を追加します。

    国名の下にある「A. <国名>設定」というサブセクションには、 選択している国のカタログの詳細が表示されます。国を追加した場合は、国ごとにカタログの詳細が表示されます。たとえば、ビデオスキルに米国とカナダを追加した場合、次の2つのカタログのサブセクションが表示されます。

    国別のカタログのサブセクション
    国別のカタログのサブセクション
  6. [カタログ名] フィールドに、国ごとのカタログの名前を入力します。

    はじめに述べたように、ビデオスキルではカタログ統合が必須となります。ユーザーがメディアタイトルをリクエストすると、Amazonはカタログ内で一致するタイトルを検索して、対応する識別子を送信します。CDFの形式を含むカタログ統合の詳細については、カタログのドキュメントを参照してください。

    Fire TV対応アプリでビデオスキルをテストするためのサンプルカタログ

    Fire TVデバイスでテスト用ビデオスキルの動作を簡単に確認するには、hawaii_us(米国のスキル)のカタログ名を使用します。または、hawaii_ca(カナダ)、hawaii_de(ドイツ)、hawaii_es(スペイン)、hawaii_gb(英国)、hawaii_in(インド)、hawaii_it(イタリア)、hawaii_jp(日本)を使用することもできます。このテスト用のカタログには、クリエイティブコモンズのビデオ(『ビックバックバニー』『エレファントドリーム』『コスモスローンドロマット』『カミナンデス』 『ティアーズ・オブ・スティール』など)がいくつか含まれています(このフィードに記載されています)。
  7. [MSO ID] フィールドは、Fire TV対応アプリのビデオスキルでは使用されないため、無視してください(MSOは、「マルチシステムオペレーター」の略で、セットトップボックスでのビデオスキルのライブTV統合に使用されます)。
  8. [言語固有の設定] セクションで、ビデオスキルの言語を選択します。選択した国に対応する言語は自動的に追加されますが、必要に応じて、[言語を追加] をクリックして言語を追加できます。言語を追加するたびに、対応するサブセクションが作成され、スキルの呼び出しの詳細が表示されます。

    たとえば、ビデオスキルが米国とカナダで利用可能な場合、デフォルトでen-USとen-CAの2つの言語が選択されます。その結果、下のスクリーンショットのように、それぞれの言語でスキルの呼び出しを設定するための2つのサブセクション (「A. 英語(米国):en-US設定」および「B. 英語(カナダ)en-CA設定」)が表示されます。

    国別の言語固有の設定
    国別の言語固有の設定

    このサブセクションでは、言語ごとにビデオスキルの呼び出し名と画像アセットをカスタマイズできます。たとえば、それぞれの場所でビデオスキル名やロゴ画像が異なる場合は、このサブセクションで呼び出しをカスタマイズして適切に表示できます。

  9. [代替のスキルの呼び出し名] ボックスに、その他のスキルの呼び出し方法を入力します。デフォルトでは、ビデオスキルはスキルの作成時に(手順1.1: ビデオスキルの作成を始めるで)指定した名前で呼び出すことができますが、ここで代替の名前を作成することもできます。

    たとえば、スキルの名前が「XYZ」である場合、ユーザーは「XYZで『ビックバックバニー』の映画を再生して」と話しかければ、ビデオスキルを呼び出すことができます(この発話ではスキルを明示的にターゲット指定しています)。 「ACME」という別のスキルの呼び出しを追加すると、ユーザーが「ACMEで『ビックバックバニー』の映画を再生して」と話しかけた場合にもビデオスキルが呼び出され、Alexaがビデオスキルをターゲットに設定できるようになります。

  10. 一番上までスクロールして、[保存] をクリックします。
  11. 左側のナビゲーションで [アカウントリンク] をクリックします。
  12. 次の表の説明に従って、フィールドを構成します。

    ビデオスキルのサンプルOAuth値の入力

    ビデオスキルを作成する際、ここでテストOAuth値を入力できます。チュートリアルの後半で、ここに戻ってアカウントのリンクに必要な正しいOAuth構成を追加します。入力可能なテストOAuth値については、Amazonの担当者にお問合せください。
    [アカウントのリンク] のフィールド
    フィールド 説明
    [認証画面のURI] OAuthをまだ設定していない場合は、ここに入力できるテスト値をAmazonの担当者に確認してください。
    [アクセストークンのURI] OAuthをまだ設定していない場合は、ここに入力できるテスト値をAmazonの担当者に確認してください。
    [ユーザーのクライアントID] alexa-skillと入力します。
    [ユーザーのシークレット] OAuthをまだ設定していない場合は、ここに入力できるテスト値をAmazonの担当者に確認してください。
    [ユーザーの認可スキーム] デフォルトのままにします ([HTTP Basic認証(推奨)])。
    [スコープ] [+スコープの追加] をクリックし、単純な1語の名前(appscopeなど)を追加します。
    [ドメインリスト] このフィールドはスキップします。
    [デフォルトのアクセストークンの有効期限] 空白のままにします。
    [Alexaのリダイレクト先のURL] このフィールドはスキップします。
  13. [保存] をクリックします。
  14. 上部のナビゲーションの [公開] タブをクリックし、アイコンを含むすべてのフィールドが入力されていることを確認します。これらのフィールドは後で必要に応じて変更できます(スキルを正式に公開してテストする必要がないため)。ただし、ここでは少なくとも各フィールドに何らかのスタブ値を入力してください。次の表で、各フィールドについて説明します。

    各フィールドの説明は次のとおりです。

    [公開] のフィールド
    フィールド 説明
    [公開名] Alexaアプリでユーザーに表示されるスキル名です。アプリの名前(「ACME」など)を使用します。
    [説明] スキルの概要とユーザーができることが一目でわかる文章です(「このスキルではACMEを声で操作できます」など)。このテキストは、Alexaスキルの説明の最初に表示されます。
    [詳細な説明] スキルの使用方法を説明します(「お気に入りの番組を名前で検索できるほか、一般的なコマンドによる再生の制御や、チャンネルの変更などを行うこともできます」など)。
    [最新情報] スキルのリリースノートです(「スキルの初回リリース」など)。
    [サンプルフレーズ] アプリでユーザーが使用できるサンプル発話です。発話ごとに改行します。サンプルフレーズは、実装したビデオスキル機能に対応している必要があります。以下に例を示します。
    • 「アレクサ、ACMEで<テレビ番組>を検索して」
    • 「アレクサ、ACMEで<映画>見せて」
    • 「アレクサ、ACMEを開いて」
    • 「アレクサ、30秒巻き戻して」
    • 「アレクサ、ACMEで<テレビ番組>のエピソードを見せて」
    [小さなスキルアイコン] Alexaアプリでスキルを表す108×108pxのアイコン(PNGまたはJPG)です。画像は円形のデザインにする必要があります。画像がない場合は、以下のストック画像を使用するか、Alexaスキルアイコンビルダーを使用して画像を作成してください(下の画像を右クリックすると、コンピューターに保存できます)。
    108×108pxのアイコン
    [大きなスキルアイコン] 同じアイコンの大きなバージョンである512×512pxのアイコン(PNGまたはJPG)です。このアイコンは、Amazon.co.jpの「Alexaスキル」セクションに表示されます。画像がない場合は、以下のストック画像を使用するか、Alexaスキルアイコンビルダーを使用して画像を作成してください(下の画像を右クリックすると、コンピューターに保存できます)。
    512×512pxのアイコン
    [カテゴリー] [Video] を選択します。
    [キーワード] このスキルを説明する簡単な検索キーワードです。たとえば、アプリの名前のバリエーションやアプリで最も人気のある番組を入力します。これにより、ユーザーがスキルをすばやく簡単に見つけることができます。各検索キーワードはスペースかコンマで区切って入力してください。
    [プライバシーポリシーのURL] このスキルに適用されるプライバシーポリシーへのリンクです(ない場合は、自分のウェブサイトへのリンクを入力してください)。
    [利用規約のURL] このスキルの利用規約に関するドキュメントへのリンクです(ない場合は、自分のウェブサイトへのリンクを入力してください)。
  15. 必須フィールドの入力が完了したら、[保存して続行] をクリックします。左側のナビゲーションに次の [プライバシーとコンプライアンス] 画面が表示されます。
  16. [プライバシーとコンプライアンス] のフィールドに入力します。[テストの手順] には何らかの内容を入力する必要があります。

  17. この画面の入力が終わったら、[保存して続行] をクリックします。左側のナビゲーションに次の [公開範囲] 画面が表示されます。

  18. [公開範囲] のフィールドに入力します。[公開] が選択されていることを確認し、適切な場所を選択します(ビデオスキルの公開範囲として、アプリの公開範囲と同じ地域を選択します)。[保存して続行] をクリックします。
  19. [認証] タブの [検証] サイドタブが表示されます。必須フィールドの入力がすべて完了している場合は、「エラーは見つかりませんでした」と表示されます。

    ビデオスキルの構成が終わりテストの準備ができた状態
    ビデオスキルの構成が終わりテストの準備ができた状態

    [機能テスト] および [申請] ページに移動する必要はありません。また、この時点ではビデオスキルを申請する必要はありません。開発中でもスキルのテストは可能です。

次のステップ

次に 手順2: Echoデバイスでビデオスキルを有効化してテストするに進みます。