開発者コンソール

【Fire TV】VSK(Video Skills Kit)を使用したアプリ内検索

Waqar Aziz Jun 18, 2021
Share:
How to VSK
Blog_Header_Post_Img

Fire TV対応アプリ用のVSK(Video Skills Kit)を使用すると、リモコンを使用せずにアプリコンテンツを発見・検索し、楽しむことができます。アプリにVSKを統合するための前提条件は、まずカタログ統合を行い、Fire TVでユニバーサル検索・閲覧機能と統合することです。 現時点では、カタログ統合を利用できるのは一部の開発者のみです。VSKとカタログ統合を組み合わせることにより、Fire TVでさまざまな方法でコンテンツを表示できます。

VSKを使用すると、アプリのエクスペリエンスを音声で操作できるようになります。ユーザーが「アレクサ、『バットマン』を見せて」(SearchAndPlay)や「アレクサ、『バットマン』を探して」(SearchAndDisplayResults)などと話しかけると、Alexaがアプリにディレクティブを送信するので、アプリではユーザーに対して再生や検索結果の表示を行うことができます。ユーザーは動詞を省略することも可能で、単に「バットマン」とだけ言った場合、Alexaはこれを検索リクエストとして処理します。Alexaは「アレクサ、トム・ハンクスの映画を探して」といった出演俳優による映画の検索や、「アレクサ、コメディを探して」といった映画ジャンルでの検索など、よりあいまいなリクエストにも対応します。

Fire TVでのVSKの動作のしくみ

VSKの統合にアプリのみの実装方法を使用する場合、AlexaビデオスキルAPIはFire TVデバイス上のアプリに直接ディレクティブを送信します。Fire TVには「VSK Agent」と呼ばれるサービスがあり、このサービスがAlexaディレクティブを受信して、インテントとしてブロードキャストします。アプリでは、BroadcastReceiverでそのインテントを処理します。VSKの統合はすべて、Androidコード内で完結します。既にカタログ統合が完了していて、検索などを行うためのテキスト入力を処理するロジックがアプリにある場合は、VSK統合は短期間で完了することができます(2週間以内)。

ユーザーのリクエストの解釈、インテントの確認、ディレクティブへのパッケージ化といった難しい処理はクラウドのAlexaサービスが行うため、アプリではそれぞれのロジックに基づいてリクエストを処理できます。アプリに送信されるディレクティブには、構造化された解決済みの形でリクエストが表現されており、これにはVideo、Actor、Genre、MediaTypeなどのエンティティが含まれます。検索および再生の発話と送信されるディレクティブの包括的なリストについては、SearchAndPlayおよびSearchAndDisplayResultsを参照してください。

優れた検索エクスペリエンスを構築するためのベストプラクティス

ここでは、VSKを使用して優れた検索エクスペリエンスを構築するためのベストプラクティスを紹介します。

  • ユーザーの状態(サインインの有無)やその他の要素(定期購入のレベル)に関係なく、すべてのユーザーにコンテンツの閲覧を許可するアプリの場合は、検索を静的機能として宣言します。それ以外の場合は、動的機能として検索を宣言することで機能を管理できます。
  • ユーザーは「アレクサ、『ブレイキング・バッド』シーズン2のエピソード3を探して」と言えば、TVシリーズをSeasonとEpisodeで検索(または視聴)できます。ユーザーに該当のエピソードを表示するには、SeasonフィールドとEpisodeフィールドを使用できます。シーズン番号またはエピソード番号の情報がない場合は、ユーザーが最後に視聴したエピソードに基づいて番号を特定します。
  • ユーザーは「アレクサ、トム・ハンクスの映画を探して」と言ってその俳優の映画を探したり、「アレクサ、コメディを探して」と言ってジャンルで検索したりできます。この場合、開発者はActor、Franchise、Genreの各フィールドを使用して検索結果を表示するか、そのエンティティ専用の特別ページをユーザーに表示するかを選択できます。アプリがこれらのフィールドによる検索をサポートしていない場合は、フォールバックとして、ディレクティブで送信された値で文字どおりのテキスト検索を行います。
  • SearchTextフィールドを使用すると、アプリでユーザーに表示される検索結果の関連性を高めることができます。あいまいなリクエスト(タイトル名が含まれていないリクエスト)の場合、検索テキストには、ユーザーの求めるものが構造化されずにより完全な形で表現されます。これには、追加のエンティティや未解決の単語も含まれます。たとえば、「アレクサ、人気のコメディTV番組をHDで再生して」の場合は、「h.d.人気のコメディTV番組」というtranscribed値が提供されます。語順や形式の保証はありません。詳細については、SearchTextを参照してください。
  • ユーザーに表示する検索結果には、タイトルに当てはまる関連したアートワークを含める必要があります。アートワークを使用すると、ユーザーが検索結果でおすすめのコンテンツを識別しやすくなります。


SearchAndDisplayResultsディレクティブの処理

以下は、「アレクサ、『バットマン』を探して」というユーザーからのリクエストに対応するため、Alexaが送信するSearchAndDisplayResultsディレクティブです。

Copied to clipboard
EXTRA_DIRECTIVE_NAMESPACE: Alexa.RemoteVideoPlayer
EXTRA_DIRECTIVE_NAME: SearchAndDisplayResults
EXTRA_DIRECTIVE_PAYLOAD_VERSION: 3
EXTRA_DIRECTIVE_PAYLOAD: payload

payloadの内容は以下のとおりです。

Copied to clipboard
{
    "payload": {
        "entities": [
            {
                "externalIds": {
                    "ENTITY_ID": "0"
                },
                "type": "Franchise",
                "uri": "entity://avers/franchise/Batman",
                "value": "Batman"
            }
        ],
        "searchText": [
            {
                "transcribed": "batman"
            }
        ],
        "timeWindow": {
            "end": "2016-09-07T23:59:00+00:00",
            "start": "2016-09-01T00:00:00+00:00"
        }
    }
}

VSK統合では、アプリにBroadcastRecieverクラスを作成します。VSK Agentが、ディレクティブをインテントにパッケージ化して、onReceiveメソッドに渡します。JSONパーサーのサポートにより、transcribedからユーザーの検索リクエストをテキスト変換したものとentitiesオブジェクトの両方を取得できます。このオブジェクトには、Title、Genre、Actor、Franchise、Season、Episode、MediaTypeなど、検索する一連のentityオブジェクトが含まれます。この例では、アプリに「バットマン」の検索結果を表示します。

アプリがディレクティブを正常に処理した場合(または処理しなかった場合)、BroadcastRecieverクラスは成功インテントをtrue(成功の場合)またはfalse(失敗の場合)の形式で返す必要があります。

次のステップ

VSKの統合の詳細については、こちらの開発者ドキュメントを参照してください。Fire TV対応アプリへのVSK統合に関して要点をまとめたビデオチュートリアルも参考にしてください。

関連記事

ニュースレターを購読してみませんか?

最新のAmazon開発者向けニュース、業界の動向、ブログの記事をお届けします。