開発者コンソール

手順6: Lambdaに送信されたAlexaディレクティブに応答する

手順6: Lambdaに送信されたAlexaディレクティブに応答する

この手順では、6つのディレクティブそれぞれに対して適切なレスポンスを返すように、Lambda関数のコードを作成する必要があります。主なディレクティブには、 GetPlayableItemsGetPlayableItemsMetadataGetDisplayableItemsGetDisplayableItemsMetadataGetBrowseNodeItemsGetNextPageの6つがあります。これについては、APIリファレンスの概要に全般的な参照情報が記載されています。

Lambda関数では、バックエンドサービスとやり取りして情報を取得する必要があります。たとえば、Alexaから送信されたディレクティブをLambdaで処理するときに、特定のメディアに関する情報の取得が求められる場合があります。そのため、バックエンドサービスで対象のメディアの検索を実行し、その情報を適切なJSON形式でAlexaに返すコードを記述する必要があります。

検出

検出のプロセスにより、スキルの機能をAlexaに対して宣言できます。この機能は、スキルを使用するすべてのユーザーで同一にすることも、サービスの定期購入状況に応じてユーザーごとに変更することも可能です。どちらの場合でも、このディレクティブに対するレスポンスにより、ユーザーがスキルで行えることが決まります。

GetDisplayableItemsディレクティブでは、Lambdaのレスポンスでアイテムのコレクションを受け取ります。レスポンスには、コンテンツの識別子が含まれている必要があります。この後のセクションで説明するもう1つのディレクティブ(GetDisplayableItemsMetadata)は、コンテンツを再生するためのメタデータを取得する目的で使用されます。GetDisplayableItemsGetDisplayableItemsMetadataのディレクティブは、レイテンシを最適化するために、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で、sortTypeRECOMMENDEDに設定されています。

  • 2つ目のGetDisplayableItemsディレクティブは、ランディングページの注目ビデオを取得するためのものです。1つ目のディレクティブとは異なり、このリクエストではitemTypeVIDEOに設定されています。

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>の映画を再生して」などのリクエストを行った場合)では、GetPlayableItemsGetPlayableItemsMetadataのディレクティブを使用します。これらはGetDisplayableItemsGetDisplayableItemsMetadataに非常によく似ています。唯一の違いは、再生用に返されるメタデータが、検索に使用されるメタデータとは少し異なる点です。詳細については、GetPlayableItemsディレクティブおよびGetPlayableItemsMetadataディレクティブを参照してください。

チャンネルナビゲーション

チャンネルナビゲーションの発話でも、GetPlayableItemsGetPlayableItemsMetadataのディレクティブがAlexaから送信されます。唯一の違いは、チャンネルナビゲーション用に返されるメタデータが、検索/再生に使用されるメタデータとは少し異なる点です。詳細については、GetPlayableItemsディレクティブを参照してください。

次のステップ

手順7: アカウントリンクを実装するに進みます。