開発者コンソール

バッジ


バッジ

検索結果のタイルやビデオの再生画面でユーザーに有益な情報を提供するには、多くの場合、バッジ(コンテキスト画像)の使用が効果的です。このセクションでは、使用可能なバッジの種類とその用途について説明します。

実装できるバッジ

次の表に、実装できる表示バッジの種類を示します。

バッジの種類 説明
Recording(録画中) ユーザーが意図的にコンテンツを録画しているときに表示されます。このバッジは、ほかのどのバッジよりも優先されます。
Live(生放送中) コンテンツがリアルタイムで放送されているときに表示されます(例:アカデミー賞、エミー賞、スポーツ中継などの番組)。
On Now(放送中) 特定の時間にチャンネルでコンテンツが放送されているときに表示されます。生放送とはみなされません。

バッジに加えて、ネットワークロゴやネットワークコールサインを表示して、コンテンツの放送局を示す必要もあります。たとえば、ユーザーが「<プロバイダー>でコメディのテレビ番組を見せて」と発話したとします。 こうした場合、<プロバイダー>ではABC、HBO、CBSといった複数のネットワークのコンテンツを表示できることがあります。 

マルチモーダルデバイスでこのような結果を返すときは、コンテンツの提供元を示すネットワークロゴをボックスアートの下部に表示する必要があります。ネットワークロゴが利用できない場合は、ABC、HBOなどのネットワークコールサインを表示してください。 

コンテンツの鮮度

また、検索結果のメタデータと併せて、コンテンツが「新しい」ものかどうかも示す必要があります。コンテンツプロバイダーからこの情報を取得して表示することで、そのコンテンツが初回放送であることを示すことができます。

たとえば、「ビッグバン・セオリー」のエピソードを検索するとします。エピソード1~5は放送済みであり、新たにエピソード6の視聴が可能になっている場合、この情報がコンテンツプロバイダーから提供されるので、エピソード6についてはほかのメタデータと共に「NEW」を表示することができます。 

スキルでバッジを指定するには、Lambdaから送信されるGetDisplayableItemsMetadataResponseGetPlayableItemsMetadataResponseのレスポンスを使用します。 

バッジAPI

バッジをサポートするには、GetDisplayableItemsMetadataResponseレスポンスのペイロード内で次の構造体を使用する必要があります。 

  • recording: コンテンツが録画中であるかどうかを示す目的で使用されます。
  • contentFreshness: 新しいコンテンツであるかどうかを示す目的で使用されます。
  • networkDetails: チャンネルのメタデータを指定する目的で使用されます。
  • airingDetails: 開始時刻と終了時刻のほか、コンテンツが生放送中であるかどうかを指定する目的で使用されます。

GetDisplayableItemsMetadataResponseの例

Lambdaから送信される、バッジを含むGetDisplayableItemsMetadataResponseの例を次に示します。

{
    "payload": {
        "searchResults": [
            {
                "name": "インターステラー",
                "contentType": "LIVE",
                "releaseYear": "2011",
                "selectionAction": "PLAY",
                "thumbnailImage": {
                    "contentDescription": "インターステラーの画像",
                    "sources": [
                        {
                            "url": "http: //ecx.images-amazon.com/images/I/81nSh3pZUDL.RI.jpg",
                            "size": "X_SMALL",
                            "widthPixels": 480,
                            "heightPixels": 320
                        }
                    ]
                },
                "runtime": {
                    "runTimeInMilliseconds": 120931123,
                    "displayString": "2時間30分"
                },
                "closedCaption": {
                    "status": "AVAILABLE",
                    "displayString": "字幕"
                },
                "absoluteViewingPositionMilliseconds": 0,
                "parentalControl": {
                    "pinControl": "REQUIRED"
                },
                "viewingDisplayString": "PlayNow",
                "rating": {
                    "category": "PG-13"
                },
                "recording": {
                    "status": "RECORDING"
                },
                "contentFreshness": {
                    "state": "NEW"
                },
                "networkDetails": [
                    {
                        "channel": {
                            "number": "1234",
                            "callSign": "PBS",
                            "affiliateCallSign": "KCTS9",
                            "uri": "someUrl"
                        },
                        "channelMetadata": {
                            "name": "AlternateChannelName",
                            "image": "http: //ecx.images-amazon.com/images/I/81nSh3pZUDL.RI.jpg"
                        },
                        "airingDetails": [
                            {
                                "isLiveBroadcast": "true",
                                "end": "2018-01-24T02: 30: 00Z",
                                "start": "2018-01-24T00: 00: 00Z"
                            }
                        ]
                    }
                ]
            }
        ]
    }
}

ペイロードの説明

ペイロードの説明
フィールド 説明 データ型
recording

録画に関連する情報。現在のところ、構造体のフィールドはstatusの1つのみです。単独のフィールドではなく構造体にしている理由は、将来Alexa Skills Kitによって、recording構造体にほかの情報が追加される可能性があるためです。オブジェクトとして利用できるようにすることで、Alexa Skills Kitでこうしたアイテムをグループ化し、将来の要件に合わせて拡張することが可能になります。

オブジェクト
status(recording)

コンテンツの録画ステータス。次の列挙値を使用できます。

  • RECORDED: コンテンツが以前に録画されたことを意味します。
  • RECORDING: リクエストの時点でコンテンツが意図的に録画されていることを意味します。
  • SCHEDULED: コンテンツが将来録画されるようにスケジュールされていることを意味します。

例: RECORDEDRECORDINGSCHEDULED

文字列
contentFreshness

コンテンツの鮮度についての詳細。

オブジェクト
state(contentFreshness)

Alexaに結果を返しているプロバイダーの新しいコンテンツであるかどうか。使用できる列挙値はNEWのみです。これは、コンテンツが新しいもので、そのプロバイダーでの初回放送であることを意味します。

例: NEW

文字列
networkDetails

番組を放送しているネットワークについての情報。たとえば、「ビッグバン・セオリー」の新しいエピソードであればCBS、サッカーの生中継であればESPNといった放送局の情報です。オンデマンドコンテンツの場合は、たとえばAmazonプライム・ビデオで配信される「ゲーム・オブ・スローンズ」であれば、制作局のHBOとなります。結果アイテムがチャンネルのライブ番組(contentType = LIVE)である場合は、そのメタデータがこのオブジェクトに格納されます。

リスト
isLiveBroadcast

このコンテンツがリアルタイムで放送されているかどうか。NFLフットボールの試合中継や、アカデミー賞、エミー賞のような授賞式など、リアルタイムで放送されるライブイベントの場合は、trueに設定します。

実際に放送される時刻よりも前に撮影されたコンテンツの場合は、falseに設定します(毎週木曜日に放送される「ビッグバン・セオリー」の新しいエピソードなど)。また、リアルタイムでは二度と行われない過去のフットボールの試合など、一度リアルタイムで配信されたコンテンツの場合も、falseに設定する必要があります。

例:truefalse

ブール型

GetPlayableItemsMetadataResponseの例

GetDisplayableItemsMetadataで使用されているnetworkDetails構造体は、GetPlayableItemsMetadataでも使用されます。GetPlayableItemsMetadataResponseレスポンスの例を次に示します。

{
    "event": {
        "header": {
            "correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg==",
            "messageId": "38ce5b22-eeff-40b8-a84f-979446f9b27e",
            "name": "GetPlayableItemsMetadataResponse",
            "namespace": "Alexa.VideoContentProvider",
            "payloadVersion": "3"
        },
        "payload": {
            "searchResults": [
                {
                    "name": "インターステラー",
                    "contentType": "LIVE",
                    "playbackContextToken": "amzn1.dv.gti.b4a9f7c6-5def-7e63-9aa7-df38a479333e",
                    "parentalControl": {
                        "pinControl": "REQUIRED"
                    },
                    "networkDetails": [
                        {
                            "channel": {
                                "callSign": "PBS",
                                "affiliateCallSign": "KCTS9"
                            },
                            "channelMetadata": {
                                "name": "AlternateChannelName"
                            },
                            "airingDetails": [
                                {
                                    "isLiveBroadcast": "true",
                                    "end": "2018-01-24T02: 30: 00Z",
                                    "start": "2018-01-24T00: 00: 00Z"
                                }
                            ]
                        }
                    ]
                }
            ]
        }
    }
}