Echo Show用VSKの実装プロセスについて
ここでは、既存のビデオスキルを有効にして、マルチモーダルデバイスでコンテンツをストリーミングする方法について説明します。マルチモーダルデバイスで使用可能な音声機能については、Echo Show用VSKについてを参照してください。
アーキテクチャの概要
Echo Show用VSKについてでは、ワークフローの概要を説明しました。このセクションでは、ワークフローの詳細を見ていきます。
Fire TV対応アプリのビデオスキルアーキテクチャでは、Amazon Device Messaging(ADM)経由でLambda関数からFire TV対応アプリにリクエストを送信する必要があります。マルチモーダルデバイスの場合はそれとは異なり、ビデオスキルでの音声操作の結果が「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クラウドがビデオスキルターゲットを決定し、インテントペイロードをパートナーLambda関数に送信する
Alexaは、リクエストのターゲットとなるビデオスキルを特定し、ビデオスキルAPIを使用してこのリクエストをAWS Lambda関数に送信します。ビデオスキルは、使用するLambda関数のリソースIDを提供します。
Lambdaは、コードをホストするサーバーを必要とせずに、クラウド上でコードを実行できるAWSのサービスです(サーバーレスコンピューティング)。Lambda関数はさまざまなプログラミング言語で記述できますが、Lambda関数のサンプルコードではNode.jsを使用しています。Lambda関数のロジックは開発者側で作成する必要がありますが、サンプルコードを使用することで、このプロセスを短時間で完了させることができます。
Alexaクラウドから送信されたリクエストには、Lambda関数の動作を左右するインテントペイロードが含まれています。
パートナーLambda関数の検出結果が検証され、マルチモーダルデバイスでビデオスキルが呼び出される
AlexaクラウドがLambda関数に接続すると、マルチモーダルデバイスでビデオスキルが呼び出されます。ビデオスキルにはウェブプレーヤーのURIが含まれているため、デバイスに読み込むウェブプレーヤーをスキル側で識別できます。
パートナー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デバイスでビデオを再生できます。
次のステップ
手順1: ビデオスキルとLambda関数を作成するに進んで、ビデオスキルの作成を開始します。