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


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

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

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

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

  • SearchAndPlay
  • SearchAndDisplayResults
  • AdjustSeekPosition
  • ChangeChannel

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

sample-nodejs-vsk-with-admプロジェクトのindex.jsファイルを再度開いて(手順A: 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のアップロード

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

次のステップ

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