手順6: Lambdaに送信されたAlexaディレクティブに応答する
この手順では、6つのディレクティブそれぞれに対して適切なレスポンスを返すように、Lambda関数のコードを作成する必要があります。主なディレクティブには、 GetPlayableItems
、GetPlayableItemsMetadata
、GetDisplayableItems
、GetDisplayableItemsMetadata
、GetBrowseNodeItems
、GetNextPage
の6つがあります。これについては、APIリファレンスの概要に全般的な参照情報が記載されています。
Lambda関数では、バックエンドサービスとやり取りして情報を取得する必要があります。たとえば、Alexaから送信されたディレクティブをLambdaで処理するときに、特定のメディアに関する情報の取得が求められる場合があります。そのため、バックエンドサービスで対象のメディアの検索を実行し、その情報を適切なJSON形式でAlexaに返すコードを記述する必要があります。
検出
検出のプロセスにより、スキルの機能をAlexaに対して宣言できます。この機能は、スキルを使用するすべてのユーザーで同一にすることも、サービスの定期購入状況に応じてユーザーごとに変更することも可能です。どちらの場合でも、このディレクティブに対するレスポンスにより、ユーザーがスキルで行えることが決まります。
検索
GetDisplayableItems
ディレクティブでは、Lambdaのレスポンスでアイテムのコレクションを受け取ります。レスポンスには、コンテンツの識別子が含まれている必要があります。この後のセクションで説明するもう1つのディレクティブ(GetDisplayableItemsMetadata
)は、コンテンツを再生するためのメタデータを取得する目的で使用されます。GetDisplayableItems
とGetDisplayableItemsMetadata
のディレクティブは、レイテンシを最適化するために、2つのリクエストに分けられています。
GetDisplayableItems
ユーザーが「アレクサ、<ビデオコンテンツのタイトル>を見せて」などの発話で検索のリクエストを行うと、Alexaは次のようなGetDisplayableItems
ディレクティブをLambdaに送信します。
{
"directive": {
"header": {
...
"name": "GetDisplayableItems",
"namespace": "Alexa.VideoContentProvider",
...
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "accessToken",
}
},
"payload": {
"entities": [{
"type": "Video",
"value": "ビデオコンテンツのタイトル",
"externalIds": {
"yourCatalogKey": "yourContentIdFromCatalog"
}
}],
"locale": "ja-JP",
"minResultLimit": 8,
"maxResultLimit": 25,
"timeWindow": {
"end": "2016-09-07T23:59:00+00:00",
"start": "2016-09-01T00:00:00+00:00"
}
}
}
}
このディレクティブを受信したら、Lambdaはリクエストされたメディアを含む次のようなGetDisplayableItemsResponse
レスポンスをAlexaに返す必要があります。
{
"event": {
"header": {
...
"name": "GetDisplayableItemsResponse",
"namespace": "Alexa.VideoContentProvider",
...
},
"payload": {
"nextToken": "wwrfwef3",
"mediaItems": [
{
"mediaIdentifier": {
"id": "video://content.1234567"
}
},
{
"mediaIdentifier": {
"id": "video://content.4567890"
}
}
]
}
}
}
GetDisplayableItemsMetadata
リクエストに対する適切なコンテンツが含まれたGetDisplayableItemsResponse
レスポンスを受信すると、AlexaはGetDisplayableItemsMetadata
という別のディレクティブを送信します。GetDisplayableItemsMetadata
の目的は、デバイスの画面に表示するために、受信したコンテンツに関する情報(画像、タイトル、その他のメタデータなど)を取得することです。GetDisplayableItemsMetadata
ディレクティブの例を以下に示します。
{
"directive": {
"header": {
...
"name": "GetDisplayableItemsMetadata",
"namespace": "Alexa.VideoContentProvider",
...
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "accessToken",
}
},
"payload": {
"mediaIdentifiers": [
{
"id": "video://content.1234567"
},
{
"id": "video://content.4567890"
}
]
}
}
}
GetDisplayableItemsMetadata
ディレクティブをLambdaが受信したら、リクエストされたアイテムのメタデータを含むGetDisplayableItemsMetadataResponse
レスポンスを返す必要があります。多くの場合、このメタデータはデバイスの検索結果テンプレートに設定されます。
{
"event": {
"header": {
...
"name": "GetDisplayableItemsMetadataResponse",
"namespace": "Alexa.VideoContentProvider",
...
},
"payload": {
"resultsTitle": "検索結果",
"searchResults": [
{
"title": "ビデオ名",
"contentType": "ON_DEMAND",
"thumbnailImage": {
"small": "https://.../image.jpg",
"medium": "https: //.../image.jpg",
"large": "https: //.../image.jpg"
},
/* ... ビデオ1のその他のメタデータ ... */
},
{
/* ... ビデオ2のメタデータ ... */
}
]
}
}
}
ランディングページ
ユーザーが(「アレクサ、ACMEのビデオを開いて」と言うか、「ビデオホーム」と言った後でビデオスキルを選択することで)ランディングページを開くと、Alexaは次の2つのGetDisplayableItems
ディレクティブを送信します。
-
1つ目の
GetDisplayableItems
ディレクティブは、ランディングページのカテゴリーを取得するためのものです。itemType
プロパティはCATEGORY
で、sortType
がRECOMMENDED
に設定されています。 -
2つ目の
GetDisplayableItems
ディレクティブは、ランディングページの注目ビデオを取得するためのものです。1つ目のディレクティブとは異なり、このリクエストではitemType
がVIDEO
に設定されています。
Alexaは両方のディレクティブに対するレスポンス(GetDisplayableItemsResponse
)を受信したら、カテゴリーIDとビデオIDを組み合わせたリストを含むGetDisplayableItemsMetadata
呼び出しを1回送信します。レスポンスには、カテゴリーとビデオに関するメタデータが含まれます。ぞれぞれのitemType
に必要なフィールドについては、GetDisplayableItems
ディレクティブおよびGetDisplayableItemsMetadata
ディレクティブを参照してください。
次に示すのは、itemType
の値がCATEGORY
になっているメタデータの例です。
{
"name": "ウォッチリスト",
"contentType": "ON_DEMAND",
"itemType": "CATEGORY",
"selectionAction": "BROWSE",
"thumbnailImage": {
"contentDescription": "ウォッチリストの画像",
"sources": [{
"url": "http://ecx.images-amazon.com/AJhF52zkD7ObETpyTTW.jpg",
"size": "SMALL",
"widthPixels": 720,
"heightPixels": 480
}]
},
"mediaIdentifier": {
"id": "entity://provider/category/myWatchList"
}
}
クイック再生
クイック再生のシナリオ(ユーザーが「アレクサ、<X>の映画を再生して」などのリクエストを行った場合)では、GetPlayableItems
とGetPlayableItemsMetadata
のディレクティブを使用します。これらはGetDisplayableItems
とGetDisplayableItemsMetadata
に非常によく似ています。唯一の違いは、再生用に返されるメタデータが、検索に使用されるメタデータとは少し異なる点です。詳細については、GetPlayableItems
ディレクティブおよびGetPlayableItemsMetadata
ディレクティブを参照してください。
チャンネルナビゲーション
チャンネルナビゲーションの発話でも、GetPlayableItems
とGetPlayableItemsMetadata
のディレクティブがAlexaから送信されます。唯一の違いは、チャンネルナビゲーション用に返されるメタデータが、検索/再生に使用されるメタデータとは少し異なる点です。詳細については、GetPlayableItems
ディレクティブを参照してください。
次のステップ
手順7: アカウントリンクを実装するに進みます。