開発者コンソール

手順10: 発話をテストしてログを確認する


手順10: 発話をテストしてログを確認する

ここでは、スキルのテストを実行して、Alexaからアプリに送信されるディレクティブを確認します。このやり取りの確認には、Android Studioの [Logcat] ペインまたはターミナルのgrepコマンドを使用します。

サンプルアプリに関する注意事項

サンプルアプリを確認するだけであっても、このトピックに記載されているすべての手順を実行する必要があります。

Fire TVデバイスのセットアップ

VSKの統合をテストするには、開発者アカウントに関連付けられているFire TV Stick 4KなどのFire TVデバイスが必要です。Fire TVデバイスのリモコンには、マイクボタンが付いている必要があります。Fire TVをセットアップして、開発者アカウントに登録します。

Fire TVへの接続とアプリの実行

  1. Fire TVデバイスに接続します。ADBを使用してコンピューターとFire TVを接続する方法の詳細については、ADBを使用してFire TVに接続する方法を参照してください。
  2. Android Studioを開き、app構成を選択して、アプリを実行するFire TVデバイス(「Amazon AFTMM」など)を選択します(「AFTMM」は、Fire TVのビルドモデルを意味します)。

    Android Studioでの構成の選択
    Android Studioでの構成の選択
  3. [Run App] ボタン「アプリ」を実行をクリックして、アプリをFire TVにサイドロードします。

    対象のFire TVデバイスの選択
    対象のFire TVデバイスの選択

    アプリのビルドおよび実行中に、Android Studioの下部にある [Logcat] タブをクリックすると、ログメッセージをモニタリングできます。

    サンプルアプリに関する注意事項

    サンプルアプリのホーム画面は次のようになります。

    一般に利用可能なビデオが組み込まれたサンプルアプリ一般に利用可能なビデオが組み込まれたサンプルアプリ

この手順で問題が発生した場合は、次の方法でトラブルシューティングを行います。

  • エラーメッセージ(エントリ名の競合など)が表示された場合は、[Build] > [Rebuild Project] の順にクリックし、古いアーティファクトが消去されたことを確認してから、アプリを再度実行します。
  • インストールに競合が生じた場合は、Fire TVに同じパッケージ名のアプリがないことを確認します。必要に応じてアプリをアンインストールします([設定] > [アプリケーション] > [インストール済みアプリケーションを管理])。
  • アプリの画面が空白になる場合やその他の問題がある場合は、Logcatを開き、「Error」でフィルタリングします。 「Invalid API key」というエラーが表示された場合は、前の手順で構成したカスタムfiretv署名鍵を使用してアプリに署名していることを確認します。

テスト発話による確認

Fire TVのフォアグラウンドで対象のアプリが実行されている状態で(対象のアプリが現在画面に表示されていてアクティブな状態で)、リモコンのマイクボタンを押して「アレクサ、『バットマン』を見せて」と言います(IMDbカタログに登録されていれば、ほかの映画やテレビ番組のタイトルでも構いません)。

サンプルアプリに関する注意事項

サンプルアプリではビデオ(『バットマン』ではなく汎用的なビデオ)が再生されます。サンプルアプリについてで説明されているように、サンプルアプリでは、IMDbカタログへのマッピングにcom.example.vskfiretvというパッケージのプレフィックスが使用されています。それにより、実質どのような映画のタイトルやTV番組がリクエストされても、サンプルアプリは利用可能なカタログ内のタイトルとしてリクエストを認識し、適切なディレクティブをアプリに送信します。アプリでは、SearchAndPlayディレクティブとSearchAndDisplayResultsディレクティブに加え、PlaybackControllerのディレクティブもサポートされています。

暗黙的な発話と明示的な発話

さまざまなテストケースを実行してログの確認を始める前に、リクエスト(発話)を行うコンテキストの種類に注意してください。

  • 暗黙的なターゲット指定: コンテンツプロバイダーやアプリ名を指定しない音声コマンド。例:「『バットマン』を見せて」 Alexaはすべてのカタログで一致するものを検索します。
  • 明示的なターゲット指定: コンテンツプロバイダーやアプリ名を指定する音声コマンド。例:「<アプリ名>で『バットマン』を見せて」 Alexaはアプリのカタログのみで一致するものを検索します。
  • フォアグラウンドにアプリがある場合の暗黙的なターゲット指定:アプリが(バックグラウンドではなく)フォアグラウンドにある場合、「『バットマン』を見せて」と発話すると、Alexaはすべてのカタログではなく、フォアグラウンドにあるアプリのカタログから一致するものを探します。フォアグラウンドのアプリがディレクティブを処理できる場合、Alexaはそのフォアグラウンドアプリに処理を任せます。それ以外の場合、Alexaは「Fire TVとプライム・ビデオで再生できますが、どちらにしますか?」のように質問して、あいまいさを解消します。 アプリがフォアグラウンドにある状態でリクエストすると、リクエストでアプリ名を指定しなくても、明示的なターゲット指定と同様になることに注意してください。

実際のアプリで明示的なターゲット指定を行うには、(1)カタログ統合が完了していること、かつ(2)アプリ(VSKが統合されたアプリに限定されません)がいずれかの段階で本番環境に公開申請されているか、ライブアプリテスト(LAT)に申請されていることが必要です(明示的なターゲット指定をサポートするために必要なAmazonサービスにより、アプリが本番環境またはLATの状態であることが求められます)。 アプリがこの状態でない場合は、アプリをフォアグラウンドにしてリクエストを行うことで、明示的なターゲット指定と同様の状態を作ることができます。

ログでディレクティブを確認するためのコマンド

アプリがテストコマンド(「アレクサ、『バットマン』を見せて」)に正常に応答したら、ログを確認します。ログの監視を行うには、2つの方法があります。

  • Android StudioのLogcat: Android Studioの [Logcat] ペインを使用して、特定の語句でフィルタリングします。
  • ターミナルのgrepコマンド: ターミナルウィンドウを開き、grepのフィルターを使用します。

次の表は、ログをフィルタリングして結果を確認する方法をまとめたものです。

Logcat(Android Studio) grep(ターミナル) 説明
AppAgent adb logcat | grep "AppAgent" -i アプリがインストールされたときおよび開かれたときにレポートされた機能を確認します。
AlexaDirectiveReceiver adb logcat | grep "AlexaDirectiveReceiver" -i ユーザーがテスト発話を行ったときに、アプリがAlexaから受け取ったメッセージを確認します。

(grepコマンドの-iでは、大文字と小文字は区別されません。)

Android Studioのログで受信したディレクティブを表示するには、次の手順を実行します。

  1. Android Studioで [Logcat] ペインを開き、アプリが実行されている状態で、 「AlexaDirectiveReceiver」でフィルタリングします。
  2. Fire TVのフォアグラウンドでアプリが実行されている状態で、「『バットマン』を見せて」と話しかけます。

    ログの表示は次のようになります。

    ディレクティブによるフィルタリング

    Logcatでは、受信したディレクティブが次のように表示されます。

    Received an Alexa Directive: Alexa.RemoteVideoPlayer#SearchAndPlay with payload version: 3 and payload: {"searchText":{"transcribed":"バットマン"},"entities":[{"externalIds":{"ENTITY_ID":"0"},"type":"Franchise","uri":"entity://avers/franchise/Batman","value":"バットマン"}]}
    

    このディレクティブのログとpayloadを展開してみましょう。発話では「見せて」が使用されたため、AlexaはRemoteVideoPlayerインターフェースからSearchAndPlayディレクティブを送信しています。

    Received an Alexa Directive: Alexa.RemoteVideoPlayer#SearchAndPlay with payload version: 3 and payload:
    
    {
      "searchText": {
        "transcribed": "バットマン"
      },
      "entities": [
        {
          "externalIds": {
            "ENTITY_ID": "0"
          },
          "type": "Franchise",
          "uri": "entity://avers/franchise/Batman",
          "value": "バットマン"
        }
      ]
    }
    

    このケースでは、「バットマン」はシリーズ物である(「バットマン」の映画が複数ある)ため、ディレクティブに"type": "Franchise"が含まれています。詳細については、シリーズで再生およびシリーズ物リストを参照してください。

詳細なログの説明

以下に示すのは、Logcatで「AlexaDirectiveReceiver」の語句でフィルタリングした場合に確認できるログの詳しい内容(および説明のコメント)です。このログは、ユーザーが「『バットマン』を見せて」という発話を行った場合のやり取り全体を示しています(この発話によりRemoteVideoPlayerインターフェースのSearchAndPlayディレクティブが送信されます)。 各行のタイムスタンプやその他の本文以外の記述は、読みやすくするために、ここでは削除しています。

// VSK Agentから送信されるインテントをMyStreamzアプリで処理します
AlexaDirectiveReceiver: Handling Intent from VSK Agent: Intent { act=com.amazon.alexa.vsk_app_agent_api.ACTION_ALEXA_DIRECTIVE flg=0x10000010 pkg=com.example.vskfiretv.mystreamz cmp=com.example.vskfiretv.mystreamz/.receiver.AlexaDirectiveReceiver (has extras) }

// VSK AgentからアプリにSearchAndPlayディレクティブを送信します
AlexaDirectiveReceiver: Received an Alexa Directive: Alexa.RemoteVideoPlayer#SearchAndPlay with payload version: 3 and payload: {"searchText":{"transcribed":"バットマン"},"entities":[{"externalIds":{"ENTITY_ID":"0"},"type":"Franchise","uri":"entity://avers/franchise/Batman","value":"バットマン"}]}

// アプリのロジックでディレクティブを処理し、ランダムに選択された映画を再生します。
// ここで、ディレクティブに対応するためのカスタムロジックをアプリで実装する必要があります。
AlexaDirectiveReceiver: Handling SearchAndPlay directive...
AlexaDirectiveReceiver: Playing some random Movie Video Two
AlexaDirectiveReceiver: Handling SearchAndPlay directive finished

// アプリがVSK Agentに、リクエストが処理されたことを示す成功のメッセージを送信します

トラブルシューティング

ディレクティブの受信に問題があり、VSK Agentに対してテストディレクティブをアプリに送信するようリクエストする場合は、VSK AgentクライアントのrequestTestDirectiveFromVSKAgent()メソッドを使用します。詳細については、動的機能の統合のテスト(オプション)を参照してください。

すべてのAndroidベースのアプリで使用できる別のデバッグツールとしては、Android Debug Bridge(ADB)があります。使用可能なコマンドの一覧を確認する場合は、「adb help」と入力します。

認定に向けた準備: 対応が必要なディレクティブ

認定に向けた準備では、サポートするディレクティブに関係するすべての発話について、アプリのテストを行います。ディレクティブごとの発話の一覧については、発話リファレンスを参照してください。必要に応じて、このページを印刷し、完了した項目にチェックを入れて、必須の発話のサポート状況を確認できるようにしておくとよいでしょう。

認定に合格するには、認定に必須のラベルが付いているすべての発話をサポートする必要があります。アプリの認定および公開の申請を行うと、Amazonアプリストアの統合担当チームのテスターが、(カタログ内のタイトルに合わせてサンプルリクエストを変更して)認定に必須となっている発話についてアプリのテストを実施し、その発話で想定される応答と一致した結果が得られるかどうかを確認します。必須の発話がアプリで適切に処理されない場合、そのアプリは認定に合格できないはずです。場合によっては、開発者が管理できない部分の問題のトラブルシューティングについて、Amazonの担当者の協力が必要になることがあります。

認定と公開に向けた申請

アプリの認定および公開の申請を行う準備ができたら、以下の手順を実行します。

  1. すべてのLATテストを終了します。前の手順でライブアプリテスト(LAT)にアプリを申請したので、次の手順を実行してLATをキャンセルします。

    1. 開発者コンソールにログインして、[アプリ&サービス] > [マイアプリ] の順に選択し、対象のアプリをクリックします。
    2. 左側のサイドバーの [ライブアプリテスト] をクリックします。
    3. [アクション] 列で3つの点が並んだメニューをクリックし、[テストを終了] を選択します。[OK] をクリックして選択を確定します。
  2. アプリを公開します。通常の手順を実行して、ライブアプリの公開または更新を行います。

Amazonはアプリのテストと認定を行い、アプリのみのVSK統合が正常に機能していることを確認します。評価が完了し、アプリが認定に合格すると、アプリが公開されます。

次のステップ: ライブTVの統合

VSKの統合が完了したら、次のステップとして、 アプリにライブコンテンツがある場合は、Fire TVの [ライブ] タブおよび番組表と統合できます。この統合を行うには、リニアTVについてを参照してください。