手順7: Alexaディレクティブを解釈して応答する


手順7: Alexaディレクティブを解釈して応答する

ビデオスキルディレクティブのタイプ

Alexaはユーザーからの音声コマンドを聞き取ると、自然言語処理を使用してコマンドを解釈し、ディレクティブに変換してLambda関数に送信します(ユーザーが発する実際の単語は、ユーザーにとってプライベートと見なされるため、送信されることはありません)。ビデオスキルに関するディレクティブは、次のカテゴリーに分類されます。

ディレクティブ 説明
RemoteVideoPlayerインターフェースディレクティブ - SearchAndPlay ユーザーが特定ビデオコンテンツの再生をAlexaにリクエストしたときに送信されます。
RemoteVideoPlayerインターフェースディレクティブ - SearchAndDisplayResults ユーザーがビデオコンテンツの検索をAlexaにリクエストしたときに送信されます。
PlaybackControllerインターフェースディレクティブ ユーザーがビデオコンテンツの再生、停止、ナビゲーションをリクエストしたときに送信されます。
SeekControllerインターフェースディレクティブ ユーザーが時間を指定して早送り(またはスキップ)や巻き戻しをリクエストしたときに送信されます。
ChannelControllerインターフェースディレクティブ ユーザーがチャンネル変更をリクエストしたときに送信されます。
RecordControllerインターフェースディレクティブ ユーザーが録画の開始または停止をリクエストしたときに送信されます。
VideoRecorderインターフェースディレクティブ ユーザーが録画の検索、キャンセル、または削除をリクエストしたときに送信されます。
KeypadControllerインターフェースディレクティブ ユーザーが左右へのスクロール、ページの上下スクロール、フォーカスされているアイテムの選択をリクエストしたときに送信されます。

各ディレクティブカテゴリーには、送信されるディレクティブヘッダーが複数含まれている場合があります。手順1.3: ビデオスキルのLambda関数を作成するのLambda関数のサンプルコードでは、コード内のディレクティブヘッダーを参照できます。以下に例を示します。

  • SearchAndPlay
  • SearchAndDisplayResults
  • AdjustSeekPosition
  • ChangeChannel

上記の4つの各ディレクティブを実装して応答する場合の細かな違いについては、以下のセクションで詳しく説明します。また、ディレクティブの認定と前提条件に関する情報も提供します。

sample-nodejs-vsk-with-admプロジェクトのindex.jsファイルを再度開きます(手順6.1: Lambdaデプロイパッケージを作成するを参照)。このファイルのカスタムロジック用のプレースホルダーに記述する必要があります。たとえば、次のようなインラインコメントがあります。

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

各コメントでは必要なロジックが説明されているので、そのディレクティブを処理するロジックを記述します。Lambda関数が(ビデオスキルAPIから)受信したディレクティブについては、ADMを介してアプリに送信する方法をお勧めします。それ以降の処理は、すべてアプリ内で実行可能です。

詳細については、Alexa Client LibraryのJavadocを参照してください。

想定されるディレクティブへの応答

Lambdaで受信できるディレクティブの種類とそれに対して想定されるレスポンスとアクションの詳細については、Alexaディレクティブを解釈して応答するを参照してください。

アプリにはビデオスキルAPIのすべての機能が実装されるとは限りません。たとえば、アプリにチャンネルがない場合は、チャンネルの変更は必要でないことがあります。

Lambda関数のコーディングに関するベストプラクティス

コードを更新する際には、次の点に注意してください。

  • 登録IDの動的な受け渡しindex.jsファイルでは、ADM経由でアプリにメッセージを送信する前に、sendMessageToDevice(message, context)関数でアクセストークンを取得します。アプリインスタンスは、ハードコーディングされたADM登録IDを介して参照されます。本番環境では、このファイルで示されているようにADM登録IDをLambdaコードにハードコーディングするのではなく、ディレクティブからADM登録IDを読み取り、メッセージを正しいアプリに動的にルーティングする必要があります。

  • Alexaへのレスポンス: Alexaへのレスポンスは変更せず、ディレクティブの処理/送信部分のみコーディングしてください。また、Lambda関数からアプリにディレクティブを送信する必要はありますが、アプリからLambda関数にはメッセージを返さないようにしてください。Lambda関数からの成功レスポンスは、Lambda関数がメッセージを受信したことを示すもので、アプリによる受信を示すものではありません。

仕上げ済みのLambdaのアップロード

前のセクションで指定したディレクティブ処理ロジックの記述が完了したら、手順6.2: LambdaパッケージをAWS Lambdaにアップロードするの手順を繰り返して、Node.jsでzipパッケージを作成します。その後、そのパッケージをAWSのLambdaにアップロードします。本番環境で使用する際は必ず事前にコードをテストし、検証してください。

次のステップ

おめでとうございます! これで、ビデオスキルとLambda関数のセットアップが完了しました。次の 手順8: スキルの自動ペアリングを設定して仕上げるに進みます。