Alexa.SeekControllerインターフェース
「アレクサ、5分早送りして」や「アレクサ、60秒早送りして」など、特定の時間だけ早送りや早戻しをするようにユーザーが発話すると、Alexa.SeekController
インターフェースはAdjustSeekPosition
ディレクティブをアプリまたはLambdaに送信します。
SeekController
インターフェースから送信されるディレクティブ(AdjustSeekPosition
ディレクティブなど)には、特定のオフセット時間の情報が含まれているため、PlaybackController
インターフェースによる早送りや早戻しの操作とは異なることに注意してください。
SeekController
を使用するのではなく、Android MediaSessionを使用することをお勧めします。Media Sessionは、より低レイテンシで一貫性のあるユーザーエクスペリエンスを実現しながら、同じ機能を提供します。詳細については、手順2: MediaSessionと統合するを参照してください。- AdjustSeekPositionディレクティブの発話
- AdjustSeekPositionディレクティブの処理
- AdjustSeekPositionディレクティブの例
- ペイロードの定義
- レスポンスの例
- インターフェース機能に対するサポートの宣言
AdjustSeekPositionディレクティブの発話
ユーザーが以下の発話を行うと、AlexaはAdjustSeekPosition
ディレクティブをアプリ(アプリのみの統合の場合)またはLambda(クラウド側の統合の場合)に送信します。
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
Fast forward thirty seconds |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
Rewind forty seconds |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
Avance de trente secondes Saute trente secondes |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
rebobina treinta segundos retrocede diez segundos |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
Avance de trente secondes Saute trente secondes |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
Rembobine de trente secondes Retour en arrière de trente secondes |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
spul/spring [Duration] lang? vor/vorwärts spring [Duration] vorwärts auf [AppName] spul [DeviceBrand] vor spring [Duration] auf [DeviceBrand] vor überspring [Duration] auf [DeviceType] |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
spul zurück spring zurück spul/spring für? [Duration] lang? zurück spring nach hinten für [Duration] spul [AppName] zurück spul [AppName] [Duration] zurück spul [Duration] auf [AppName] zurück spring rückwärts auf [AppName] für [Duration] spul auf? [DeviceBrand] zurück spul [DeviceBrand] [Duration] zurück |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
[Duration] के लिए आगे/forward जाओ [Episode] में fast forward Duration कर दें [Duration] के लिये [Episode] forward कर दें[MediaType] में [Duration] आगे जाओ[AppName] पर [Duration] आगे जाओ |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
1. पीछे जाना दस seconds 2. rewind करो forty seconds |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
manda avanti l' episodio di trenta secondi vai avanti di trenta secondi manda avanti di trenta secondi |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
manda indietro di trenta secondi manda indietro il video di trenta secondi |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
|
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
|
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
|
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
rebobinar/voltar [durastion] |
リクエストされた時間だけメディアが早戻しされます。 |
機能 | サンプル発話 | 想定されるレスポンス |
---|---|---|
早送り(時間指定) 認定に必須 |
adelanta treinta segundos salta diez minutos en la película |
リクエストされた時間だけメディアが早送りされます。 |
早戻し(時間指定) 認定に必須 |
rebobina treinta segundos retrocede diez segundos |
リクエストされた時間だけメディアが早戻しされます。 |
ほかのディレクティブの場合と同様に、Discoverディレクティブを受信したら、ビデオスキルでサポートしているSeekControllerディレクティブを指定する必要があります。
AdjustSeekPositionディレクティブの処理
AdjustSeekPosition
ディレクティブでは、deltaPositionMilonds
というプロパティがpayload
に含まれます。deltaPositionMilonds
には、正の値(ストリーム内を前方にシーク)または負の値(ストリーム内を後方にシーク)を指定できます。
たとえば、「5分スキップして」と発話した場合、deltaPositionMilliseconds
の値は300000
になり、「10分早戻しして」と発話した場合、deltaPositionMilliseconds
の値は-600000
になります。
つまり、負の値は早戻し、正の値は早送りを示します。指定されたオフセット分だけ先に進んで、ユーザーのリクエストを必ず満たしてください。
AdjustSeekPositionディレクティブの例
AdjustSeekPosition
ディレクティブの例を以下に示します。
EXTRA_DIRECTIVE_NAMESPACE: Alexa.SeekController EXTRA_DIRECTIVE_NAME: AdjustSeekPosition EXTRA_DIRECTIVE_PAYLOAD_VERSION: 3 EXTRA_DIRECTIVE_PAYLOAD: payload
payload
の内容は以下のとおりです。
{
"payload": {
"experience": {
"mode": "VOICE_OPTIMIZED",
},
"deltaPositionMilliseconds": 300000
}
}
{
"directive": {
"endpoint": {
"cookie": {},
"endpointId": "VSKTV",
"scope": {
"token": "<OAuth2ベアラートークン>",
"type": "BearerToken"
}
},
"header": {
"correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg==",
"messageId": "4bef62cc-208d-4382-a43e-ce9e4825c1cb",
"name": "AdjustSeekPosition",
"namespace": "Alexa.SeekController",
"payloadVersion": "3"
},
"payload": {
"experience": {
"mode": "VOICE_OPTIMIZED",
},
"deltaPositionMilliseconds": 300000
}
}
}
ペイロードの定義
payload
のプロパティを次の表に示します。
フィールド | 説明 | データ型 |
---|---|---|
deltaPositionMilliseconds (必須) |
メディアプレーヤーでの再生時にシークする相対的時間(ミリ秒単位)です。現在のシーク位置から前方または後方にシークするために、正または負の整数値を使用できます。指定できる値は、-86400000 から86400000 までの整数値(-24~+24時間)です。シーク先の位置がメディアアイテムの視聴時間外になる場合は、deltaPositionMilliseconds が負の値であるか正の値であるかに応じて、それぞれ視聴時間の先頭または末尾に設定されます。
例: |
整数 |
experience (省略可能) |
検索結果の表示を最適化するオブジェクトです。experience オブジェクトを使用すると、ユーザーが検索に使用したデバイスに基づいて、検索結果の表示方法を変更できます。experience オブジェクトとその値の詳細については、エクスペリエンスタイプを参照してください。
|
mode を含むオブジェクト |
エクスペリエンスタイプ
experience
オブジェクトを使用すると、検索に使用されたデバイスに基づいて、検索結果の表示を最適化できます。たとえば、ユーザーがFire TVリモコンを使用して検索した場合、ユーザーはリモコンを使用して結果を閲覧できるため、experience
オブジェクトによって多数の検索結果が表示されます。一方、Fire TVとペアリングされたEchoを使用して検索リクエストが行われた場合は、experience
オブジェクトによって表示される結果の数と表示方法が制限され、ユーザーはリモコンを使用せずに結果を確認できます。
experience
オブジェクトは、検索結果の表示方法を決定するmode
オブジェクトで構成されています。mode
オブジェクトは、 VOICE_OPTIMIZED
とDEFAULT
の2つの値を取ります。
-
VOICE_OPTIMIZED
: 音声専用デバイス向けに最適化された表示方法です。リモコンを使用せずに音声で操作できる検索結果のリストが表示されます。 -
DEFAULT
: 検索に使用されたデバイスに関係なく、すべての検索結果をリスト形式で表示する、デフォルトの表示方法です。
上位互換性を確保するため、mode
で不明な値を受け取った場合は、失敗とするのではなく、DEFAULT
にフォールバックするようにしてください。
レスポンスの例
アプリでディレクティブが正常に処理された場合、BroadcastReceiverクラスは、次のように、成功ステータスを含む成功のインテントを返送します。
if (response != null && sendResponse) {
Intent success = new Intent().putExtra(VSKIntentConstants.EXTRA_DIRECTIVE_STATUS, didSucceed);
try {
response.send(context, 0, success);
} catch(PendingIntent.CanceledException e) {
// 応答に時間がかかりすぎているため、ログにエラーを出力します
}
}
詳細については、手順7: BroadcastReceiverを追加するを参照してください。また、具体的なコードの例については、サンプルアプリのAlexaDirectiveReceiver
クラスを参照してください。
AdjustSeekPosition
ディレクティブを受け取ってリクエストを実行したら、位置の状態をミリ秒単位で示すレスポンスをAlexaに送り返します。次の例に示すように、payload
にはname
およびvalue
プロパティが含まれています。positionMilliseconds
は、シーク先の絶対位置を-86400000から86400000までのミリ秒数で表します。
例
{
"context": {
"properties": []
},
"event": {
"header": {
"correlationToken": "dFMb0z+PgpgdDmluhJ1LddFvSqZ/jCc8ptlAKulUj90jSqg==",
"messageId": "eab7fe6e-f65d-4dbb-aeea-5bae61439f4d",
"name": "Response",
"namespace": "Alexa",
"payloadVersion": "3"
},
"payload": {}
}
}
何らかの理由でユーザーのリクエストを完了できない場合は、エラーレスポンスを返す必要があります。詳細については、エラー処理を参照してください。
インターフェース機能に対するサポートの宣言
アプリでSeekController
を受け取るには、機能を宣言する際にこのインターフェースのサポートを明示する必要があります。アプリのみの統合での機能の宣言の詳細については、以下を参照してください。
ビデオスキルがAlexa.SeekController
インターフェースをサポートしていることを示すには、Alexa.Discovery
インターフェースを介して送信されたDiscover
ディレクティブへのレスポンスで、そのサポートを明示する必要があります。詳細については、Discoveryインターフェース
を参照してください。