マルチモーダルデバイスにおけるVSK(Video Skills Kit)の実装プロセスについて


マルチモーダルデバイスにおけるVSK(Video Skills Kit)の実装プロセスについて

このステップバイステップ方式のガイドに従うと、既存のビデオスキルでマルチモーダルデバイスにコンテンツをストリーミングできるようになります。マルチモーダルデバイスで使用可能な音声機能については、マルチモーダルデバイス用VSK(Video Skills Kit)についてを参照してください。

アーキテクチャの概要

上記のマルチモーダルデバイス用VSK(Video Skills Kit)についてでは、ワークフローの概要を説明しました。次は、実装に向けてワークフローの詳細を見ていきます。

Fire TV対応アプリのビデオスキルアーキテクチャでは、Amazon Device Messaging(ADM)経由でLambda関数からFire TV対応アプリにリクエストを送信する必要があります。マルチモーダルデバイスの場合はそれとは異なり、ビデオスキルの結果が「Alexaに直接」送り返されるしくみになっています。

マルチモーダルデバイスにおけるビデオスキルのワークフローを下図に示します。

マルチモーダルデバイス用ビデオスキルの説明図とワークフロー
マルチモーダルデバイス用ビデオスキルの説明図とワークフロー

ワークフローの概要は以下のとおりです。

  1. ユーザーが「アレクサ、『ボッシュ』を再生して」などのフレーズを発話します。
  2. マルチモーダルデバイスが発話をAlexaクラウドに送信して、処理・インテントの決定を依頼します。
  3. Alexaクラウドがビデオスキルターゲットを決定し、インテントペイロードをパートナーLambda関数に送信します。
  4. パートナーLambda関数の検出結果が検証され、マルチモーダルデバイスでビデオスキルが呼び出されます。
  5. パートナーLambda関数がリクエストをさらに処理し、ペイロードをパートナーサービスに送信します。
  6. パートナーサービスがリクエストを処理し、適切なレスポンスをLambda関数に返します。
  7. Alexa JavaScriptライブラリがLambda関数からペイロードを受け取り、リクエスト(再生・検索・トランスポート)を実行します。
  8. パートナーウェブプレーヤー環境がパートナーサービスからアセット/ストリームURLを受け取ります。
  9. Alexa JavaScriptライブラリがパートナーLambda関数にレスポンスを伝達します。
  10. パートナーLambda関数がAlexaクラウドにレスポンスを送信します。
  11. Alexaクラウドがレスポンスを処理し、(必要な場合は)適切なテキスト読み上げ(TTS)の音声データをマルチモーダルデバイスに返します。

ワークフローの詳細な説明

以下のセクションでは、各ワークフローステップの詳細について説明します。

ユーザーが「アレクサ、『ボッシュ』を再生して」などのフレーズを発話する

マルチモーダルデバイスで、Alexaがユーザーからの自然言語コマンドをリッスンします。サポートされている発話には、検索・再生・チャンネル変更・トランスポートコントロール(早送りや巻き戻し)などを呼び出すフレーズが含まれます。たとえば、「『ボッシュ』を再生して」といったフレーズです。

マルチモーダルデバイスが発話をAlexaクラウドに送信して、処理・インテント決定を依頼する

マルチモーダルデバイスは、これらの発話をクラウド上のAlexaに送信します。Alexaはクラウド上で自動音声認識の機能を使用してユーザーの発話を処理し、音声をテキストに変換します。また、Alexaは自然言語理解の機能を使用してコマンドを処理し、テキストの意図を認識します(この言語処理と解釈の機能はすべて無料で利用可能です)。

クラウド上でAlexaがユーザーの発話やコマンドを分析・解釈して出力したものが「リクエスト」です。 リクエストは、JSON形式で記述されたデータと命令のセットのことで、ユーザーの発話に応答する方法を指示します。

たとえば、ユーザーが「『ボッシュ』を再生して」と話しかけると、クラウド上のAlexaはこれを以下のような特定のJSON構造を持つGetPlayableItemsディレクティブに変換します。

 {
     "directive": {
         "profile": null,
         "payload": {
             "minResultLimit": 1,
             "entities": [
                 {
                     "externalIds": null,
                     "type": "MediaType",
                     "value": "MOVIE",
                     "entityMetadata": null,
                     "mergedGroupId": 0
                 },
                 {
                     "externalIds": {
                         "catalog_name": "123456"
                     },
                     "type": "Video",
                     "value": "Bosch",
                     "entityMetadata": null,
                     "mergedGroupId": 1
                 }
             ],
             "timeWindow": null,
             "locale": "ja-JP",
             "contentType": null,
             "maxResultLimit": 40
         },
         "endpoint": {
             "cookie": {},
             "endpointId": "ALEXA_VOICE_SERVICE_EXTERNAL_MEDIA_PLAYER_VIDEO_PROVIDER",
             "scope": {
                 "token": "1dc32f5e-1694-38a0-1af6-e948f45adad9",
                 "type": "BearerToken"
             }
         },
         "header": {
             "payloadVersion": "3",
             "messageId": "01c46fa2-fcca-4c24-93bd-e6bed03ef906",
             "namespace": "Alexa.VideoContentProvider",
             "name": "GetPlayableItems",
             "correlationToken": null
         }
     }
 }

Alexaで生成されるリクエストの種類は次のとおりです。

機能 サンプル発話
クイック再生 「アレクサ、<ビデオプロバイダー>で<テレビ番組>を再生して」、「アレクサ、<ビデオプロバイダー>で<テレビ番組>を見せて」
チャンネルナビゲーション 「アレクサ、<チャンネル>に変えて」
再生コントロール 「アレクサ、一時停止して」、「アレクサ、早送りして」
検索 「アレクサ、<ビデオプロバイダー>でコメディ番組を探して」
閲覧 「アレクサ、ビデオを見せて」、「アレクサ、<ビデオプロバイダー>を開いて」
ビデオホーム 「アレクサ、ビデオを見せて」、「アレクサ、ビデオホームに移動して」、「アレクサ、ビデオホーム」

各リクエストの詳細については、マルチモーダルデバイス用VSK(Video Skills Kit)についてを参照してください。

Alexaクラウドがビデオスキルターゲットを決定し、インテントペイロードをパートナーLambda関数に送信する

Alexaは、リクエストのターゲットとなるビデオスキルを決定し、ビデオスキルAPIを使用してこのリクエストをAWS Lambda関数に送信します。ビデオスキルは、使用するLambda関数のリソースIDを提供します。

Lambdaは、コードをホストするサーバーを必要とせずに、クラウド上でコードを実行できるAWSのサービスです(サーバーレスコンピューティング)。Lambda関数は、リクエストの処理時にほかのサービスとのインターフェイスとして機能する重要なコンポーネントです。Lambda関数はさまざまなプログラミング言語でコーディングできますが、このドキュメントで扱うLambda関数のサンプルコードではNode.jsを使用しています。なお、Lambda関数のロジックは、開発者自身がプログラミングします。

Alexaクラウドから送信されたリクエストには、Lambda関数の動作を左右するインテントペイロードが含まれています。

パートナーLambda関数の検出結果が検証され、マルチモーダルデバイスでビデオスキルが呼び出される

AlexaクラウドがLambda関数に接続すると、マルチモーダルデバイスでビデオスキルが呼び出されます。ビデオスキルにはウェブプレーヤーのURIが含まれているため、デバイスに読み込むウェブプレーヤーをスキルが認識できます。

パートナーLambda関数がリクエストをさらに処理し、ペイロードをパートナーサービスに送信する

Lambda関数は、サービスバックエンドと通信して、リクエストを処理するための情報を取得する必要があります。Lambda関数は、身体のほかの部分に信号を送って動かす脳に少し似ています。たとえば、Lambda関数で受け取るリクエストに応じて、ルックアップやクエリなどの情報検索関数が実行されます。

パートナーサービスがリクエストを処理し、適切なレスポンスをLambda関数に返す

サービスバックエンドは、使用されているクラウド環境の設定やロジックに基づいてリクエストを処理します。サービスバックエンドの動作はパートナーによって異なりますが、このドキュメントではプロセスについての説明は範囲外となるため省略します。基本的に、Lambda関数は環境内のほかのサービスとやり取りして、必要な情報を提供する必要があります。プロセスの動作によらず、本来Lambda関数は、要求された情報を取得してAlexaに返す必要があります。

Alexa JavaScriptライブラリがLambda関数からペイロードを受け取り、リクエスト(再生・検索・トランスポート)を実行する

ウェブプレーヤーには、Alexa JavaScriptライブラリが組み込まれています。このライブラリを使用すると、Alexaクラウドとの通信、ライフサイクルイベントの管理などが可能になります。

パートナーウェブプレーヤー環境がパートナーサービスからアセット/ストリームURLを受け取る

ウェブプレーヤーは、バックエンドサービスからストリーミングするコンテンツのアセットおよびURLを受け取ります。たとえば、特定のタイトルを再生するリクエストを実行する場合、ウェブプレーヤーは、タイトルに関連するサムネイルと、そのタイトルをストリーミングするためのURLを受け取ります。

Alexa JavaScriptライブラリがパートナーLambda関数にレスポンスを伝達する

Alexa JavaScriptライブラリは、アセットやURLの受信確認などのアクションを実行したうえで、パートナーLambda関数にレスポンスを返します。

パートナーLambda関数がAlexaクラウドにレスポンスを送信する

Lambda関数はAlexaクラウドにレスポンスを送信します。レスポンスは、受け取ったリクエストに応じた特定のJSON構造(リファレンスドキュメントで定義)に準拠している必要があります。

たとえば、GetPlayableItemsリクエストを受け取った場合、Lambda関数は次のようなGetPlayableItemsResponseレスポンスを返します。

{
        "event": {
            "header": {
                "correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg==",
                "messageId": "5f0a0546-caad-416f-a617-80cf083a05cd",
                "name": "GetPlayableItemsResponse",
                "namespace": "Alexa.VideoContentProvider",
                "payloadVersion": "3"
            },
            "payload": {
                "nextToken": "fvkjbr20dvjbkwOpqStr",
                "mediaItems": [{
                    "mediaIdentifier": {
                        "id": "videoId://amzn1.av.rp.1234-2345-63434-asdf"
                    }
                }]
            }
        }
    };

Lambda関数で受け取るリクエストに対して使用可能なレスポンスの詳細については、リファレンスドキュメントを参照してください。

Fire TV対応アプリとマルチモーダルデバイスでは、ビデオスキルのワークフローに違いがあります。主な違いは、前者ではADMを介してアプリに指示をプッシュするのに対して、後者ではAlexaに情報を送り返すという点です。Fire TV対応アプリでは、Lambda関数はリクエストを受け取ったことを示す簡単なステータスメッセージを返した後、ADM経由でアプリに指示を送信するだけです。一方、マルチモーダルデバイスでは、要求された情報を実際にAlexaに返します。

Alexaクラウドがレスポンスを処理し、(必要な場合は)適切なテキスト読み上げ(TTS)の音声データをマルチモーダルデバイスに返す

Alexaは、マルチモーダルデバイスと通信してユーザーのリクエストを実行します。その際、メディア再生や検索結果などの情報に対応するコンテンツURIが提供される場合がほとんどです。レスポンスには、Alexaからユーザーに通知される読み上げテキストコマンドが含まれる場合があります。たとえば、Alexaは、リクエストに一致する候補の中から1つを選び出すようにユーザーに求めることがあります。

実装手順

マルチモーダルデバイスへのビデオスキルの実装は、以下の手順で行われます。

実装のクイックスタート

ここで紹介した実装の初期手順では、サンプルLambda関数、ウェブプレーヤー、カタログ、スキルアセットを含んだクイックスタートセットアップが用意されているので、基本的なフローを確認できます。この基本的なセットアップでは、Echo Showに「アレクサ、『ビッグバックバニー』を再生して」と言って、ビデオを再生することができます。

これらの初期手順を通じて、マルチモーダルデバイスでビデオが配信されるしくみを把握できます。最初の3つの手順は1時間ほどで完了できます(これらの初期手順は、Fire TV対応アプリのドキュメントで紹介しているサンプルアプリの手順に相当します)。 後半の実装手順では、Lambda関数とウェブプレーヤーのコードをカスタマイズしてバックエンドサービスやメディアとやり取りを行うため、大がかりなコーディング作業が必要になります。高度なカスタマイズを行う場合、開発には数週間かかることがあります。

次のステップ

手順1: ビデオスキルとLambda関数を作成するに進んで、ビデオスキルの作成を開始します。