Discoverディレクティブ
ビデオスキルでサポートされる機能を特定するために、AmazonはDiscovery APIを介してDiscoverディレクティブを送信します。このDiscoverディレクティブへのレスポンスで、AlexaからLambda関数に送信されるディレクティブの種類が決まります。
たとえば、チャンネル変更をサポートしていることを指定した場合、「チャンネルをPBSに変えて」とユーザーが発話すると、Alexaは"type": "Channel"ペイロードを含むGetPlayableItems ディレクティブを送信します。しかし、このサポートを指定しない場合、Alexaはこのディレクティブを送信しません。
Discoverディレクティブ
ユーザーがAlexaスキルをAmazonアカウントに関連付けると、AlexaはDiscoverディレクティブを送信します。その後、AlexaはDiscoverディレクティブを定期的に送信して、検出されたデバイスを更新します。
Discoverディレクティブを受信したら、スキルがサポートしているディレクティブを指定する必要があります。サポートされている処理は、supportedOperations配列で指定します。
(Fire TV対応アプリの実装では、Alexa Client Libraryを初期化する際にAndroidアプリの機能サポートも指定しましたが、マルチモーダル実装では、Lambda関数でサポートを指定するだけで構いません。)
Discoverの例
Alexaから送信されるDiscoverディレクティブの例を次に示します。
{
    "directive": {
        "header": {
            "namespace": "Alexa.Discovery",
            "name": "Discover",
            "payloadVersion": "3",
            "messageId": "a1dccea0-fe52-45ca-9ed9-a03a45be6fb6"
        },
        "payload": {
            "scope": {
                "type": "BearerToken",
                "token": "1bdaa2eb-4aa3-d0dc-fb10-7a5513981cf8"
            }
        }
    }
}
ペイロードの説明
payloadのフィールドについて次の表で説明します。
    ペイロードの説明 
    
         
    
        
            フィールド 
            説明 
            データ型 
         
    
    
    
        
          scope
          (必須)リクエストの範囲(tokenおよびtypeプロパティが含まれます)。
           
          オブジェクト 
         
    
        
          token
          (必須)OAuth2ベアラートークン。
          
例:b68f05cc-6a25-4134 
 
          文字列 
         
    
        
          type
          (必須)スコープの種類(現在サポートされている値はBearerTokenです)。
          
例: BearerToken 
 
          列挙型 
         
    
    
レスポンスの例
Discoverディレクティブに対するレスポンス(Discover.Response)の例を次に示します。レスポンスでは、サポートされている処理を指定します。
{
"event": {
    "header" : {
        "messageId" : "directive.header.messageId",
        "name" : "Discover.Response",
        "namespace": "Alexa.Discovery",
        "payloadVersion": "3"
    },
    "payload": {
      "endpoints": [{
              "endpointId": "ALEXA_VOICE_SERVICE_EXTERNAL_MEDIA_PLAYER_VIDEO_PROVIDER",
              "endpointTypeId": "TEST_VSK_MM",
              "manufacturerName": "TEST_VSK_MM",
              "friendlyName": "TEST_VSK_MM",
              "description": "TEST_VSK_MM",
              "displayCategories": ["APPLICATION"],
              "cookie": {},
              "capabilities": [{
                      "type": "AlexaInterface",
                      "interface": "Alexa.RemoteVideoPlayer",
                      "version": "1.0"
                  }, {
                      "type": "AlexaInterface",
                      "interface": "Alexa.PlaybackController",
                      "version": "1.0"
                  }, {
                      "type": "AlexaInterface",
                      "interface": "Alexa.SeekController",
                      "version": "1.0"
                  }, {
                      "type": "AlexaInterface",
                      "interface": "Alexa.ChannelController",
                      "version": "1.0"
                  },
                  {
                      "type": "AlexaInterface",
                      "interface": "Alexa.MultiModalLandingPage",
                      "version": "1.0"
                  }
              ]
          }]
        }
}
};
ペイロードの説明
    ペイロードの説明 
    
         
    
        
            フィールド 
            説明 
            データ型 
         
    
    
    
        
          endpoints
          (必須)ユーザーのデバイスクラウドアカウントに関連付けられたデバイスを表すエンドポイントオブジェクト配列。
           
          オブジェクト 
         
    
        
          capabilities
          (必須)スキルがエンドポイントに対してサポートしている機能インターフェース。詳細については、以下の機能オブジェクトを参照してください。
           
          機能オブジェクトの配列 
         
    
        
          interface
          (必須)デバイスのアクションを記述するAlexa.Interfaceの修飾名。
          
例: Alexa.RemoteVideoPlayer 
 
          文字列 
         
    
        
          type
          (必須)スコープの種類(現在サポートされている値はBearerTokenです)。
          
例: BearerToken 
 
          列挙型 
         
    
        
          version
          (省略可能)エンドポイントでサポートしているインターフェースのバージョン。
          
例: 1.0 
 
          文字列 
         
    
        
          cookie
          (省略可能)スキルアダプターで使用するデバイスに関する追加情報を表す、名前と値のペアで構成される文字列。このプロパティの内容は5000バイト以内に収める必要があります(Amazon側はこのフィールドを使用せず、開発者が入力した値もユーザーには表示されません。ただし、ビデオスキル名と同じ値を入力することはできません)。
          
例:key1
 
          オブジェクト 
         
    
        
          extraDetail
          (省略可能)cookieオブジェクトのキー。
          
例:key1
 
    
        
          description
          (必須)デバイスの説明。会社名または実装を含む必要があります。この値は最大128文字までです(Amazon側はこのフィールドを使用せず、開発者が入力した値もユーザーには表示されません。ただし、ビデオスキル名と同じ値を入力することはできません)。
          
例: Amazon Streaming Media App 
 
          文字列 
         
    
        
          endpointId
          (必須)エンドポイントの識別子。たとえば、VSKTVなどです。注: ビデオスキル名と同じ値を入力することはできません。また、値の先頭にTEST_やPROD_を付けて、ビデオスキル名と明確に区別することをお勧めします。
          
例: TEST_VSKTV 
 
          文字列 
         
    
        
          friendlyName
          (必須)ビデオスキルの実装タイプを識別するための名前。この値は最大128文字までで、特殊文字や句読点を含めることはできません。注: ビデオスキル名と同じ値を入力しないでください。たとえば、ビデオスキルの名前が「ACME Media」の場合、フレンドリー名には「ACME Media」と入力しないでください。同じ名前を入力すると、エラーになります。名前に何らかの接頭辞を付けることをお勧めします(「TEST_ACME_Media」や「PROD_ACME_Media」など)。
          
例: TEST_VSK_FTV 
 
          文字列 
         
    
        
          manufacturerName
          (必須)デバイスのメーカーの名前。この値は最大128文字までです(Amazon側はこのフィールドを使用せず、開発者が入力した値もユーザーには表示されません。ただし、ビデオスキル名と同じ値を入力することはできません)。
          
例: Amazon 
 
          文字列 
         
    
    
機能オブジェクト
capabilities配列は、interface、type、version、supportOperationsの各プロパティをそれぞれに含むオブジェクトのリストです。たとえば、再生機能のサポートを宣言するcapabilities配列内の項目は次のようになります。
{
    "type": "AlexaInterface",
    "interface": "Alexa.PlaybackController",
    "version": "3",
    "supportedOperations" : ["Play", "Pause", "Stop", "StartOver", "Next", "Previous",
      "Rewind", "FastForward"]
}
supportedOperationsプロパティを含んでいるインターフェースはAlexa.PlaybackControllerインターフェースだけです。
ビデオスキルでサポートされている機能とその関連ディレクティブを次の表に示します。
   
       
   
      
         機能 
         説明 
       
   
   
      
         Alexa.RemoteVideoPlayerSearchAndPlayディレクティブとSearchAndDisplayResultsディレクティブをスキルでサポートできます。これらのディレクティブを使用すると、ユーザーはビデオコンテンツの検索や再生を行うことができます(「アレクサ、『ブレイキング・バッド』を検索して」や「アレクサ、『ブレイキング・バッド』を見せて」など)。 
      
         Alexa.PlaybackController再生制御ディレクティブをスキルでサポートできます。このディレクティブは、オーディオまたはビデオコンテンツの再生、停止、ナビゲーションに使用されます(「アレクサ、早送りして」や「アレクサ、停止して」など)。 上記のように、Alexa.PlaybackControllerインターフェースではsupportedOperationsプロパティも使用できます。使用できるプロパティは、Play、Pause、Stop、StartOver、Next、Previous、Rewind、FastForwardです。 
       
      
         Alexa.SeekControllerシーク制御ディレクティブをスキルでサポートできます。このディレクティブを使用すると、ユーザーは「アレクサ、早送りして」や「アレクサ、早戻しして」ではなく、「アレクサ、60秒早送りして」や「アレクサ、5分早戻しして」といったリクエストを使用して、メディアタイムラインの特定の位置に移動できます(アプリでメディアアイテムの早送りまたは早戻しのみが可能で、タイムラインの別のポイントまでシークできない場合は、代わりにAlexa.PlaybackControllerインターフェースを実装してください)。 
       
      
         Alexa.ChannelControllerChangeChannelディレクティブをビデオスキルでサポートできます。このディレクティブは、エンターテインメントデバイスのチャンネルを変更または進めるために使用されます(「アレクサ、チャンネルをPBSに変えて」など)。 
      
         Alexa.MultiModalLandingPageランディングページの設定をビデオスキルでサポートできます。たとえば、ユーザーが「ビデオホーム」と発話してビデオスキルをタップすると、ビデオのリストが表示されます。 
       
   
                      
                      
                    
