Alexa.RTCSessionControllerインターフェース 3
リアルタイム通信(RTC)対応デバイス向けAlexaスキルには、Alexa.RTCSessionController
インターフェースを実装します。スキルでRTCSessionController
インターフェースを使用することで、Alexaユーザーはセキュリティカメラやその他のデバイスとリモートで通信できます。たとえば、ユーザーは玄関先の訪問者と通信できます。セキュリティスキルの詳細については、スマートホームセキュリティの概要を参照してください。
RTCSessionController
インターフェースがサポートする言語については、機能インターフェースとサポートしている言語の一覧を参照してください。メッセージプロパティの定義については、Alexaインターフェースのメッセージとプロパティを参照してください。
Alexaスキルの開発やテストを行う際、スマートホームデバッガーを使ってWebRTCセッションのログをリアルタイムに確認できます。詳細については、WebRTCスキル向けスマートホームデバッガーを参照してください。
発話
Alexa.RTCSessionController
インターフェイスではプリビルド音声対話モデルを使用します。ユーザーは、次のような発話を用いて会話を開始できます。
Alexa, show me the front door camera
Alexa, answer the front door.
Alexa, talk to the front door.
Alexa, talk to the backyard camera.
Alexa, talk to the baby monitor.
Alexa, get the call going with the front door.
Alexa, please call front door.
Alexa, respond to the front door.
Alexa, speak to the front door.
Alexa, talk to my front door camera.
Alexa, talk to the person at the main door.
アレクサ、玄関のカメラを見せて
アレクサ、玄関に出て
アレクサ、玄関と話して
アレクサ、裏庭のカメラと話して
アレクサ、赤ちゃんの部屋と話して
アレクサ、玄関のインターホンに答えて
アレクサ、玄関に呼びかけて
アレクサ、玄関に返事して
アレクサ、玄関に話しかけて
アレクサ、玄関のカメラと話して
アレクサ、玄関ドアの前にいる人と話して
ユーザーは、次のような発話を用いて会話を終了できます。
Alexa, go home.
Alexa, stop.
アレクサ、ホームに戻って
アレクサ、止めて
ユーザーがこのような発話をしたら、Alexaがそれに対応するディレクティブをスキルに送信します。
検出
Alexa.RTCSessionController
をサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。また、Alexa.RTCSessionController
機能のコンフィギュレーションで二重通信がサポートされているかどうかを判断します。
表示カテゴリーには、CAMERA
またはDOORBELL
を使用します。表示カテゴリーの一覧については、表示カテゴリーを参照してください。
機能配列のRTCSessionController
エントリには、通常の検出応答フィールドのほかに、次のフィールドを持つコンフィギュレーションオブジェクトを含めます。
フィールド | 説明 | 型 |
---|---|---|
isFullDuplexAudioSupported |
デバイスが双方向(全二重)通信をサポートしている場合はtrueです。デバイスが単方向(半二重)通信をサポートしている場合はfalseです。デフォルトはfalseです。デバイスがオーディオ通信をサポートしていない場合、この値をfalseに設定して`a=sendonly`アトリビュートを含めます。 | ブール値 |
検出応答の例
以下は、RTCSessionController
インターフェース、MediaMetadataインターフェース、EndpointHealthインターフェースをサポートするセキュリティカメラのDiscover.Response
メッセージ例です。
{
"event": {
"header": {
"namespace":"Alexa.Discovery",
"name":"Discover.Response",
"payloadVersion": "3",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい"
},
"payload":{
"endpoints":[
{
"endpointId": "エンドポイントの一意のID",
"manufacturerName": "エンドポイントのメーカー名",
"description": "Alexaアプリに表示される説明",
"friendlyName": "玄関のカメラ",
"displayCategories": ["CAMERA"],
"cookie": {},
"capabilities": [
{
"type": "AlexaInterface",
"interface": "Alexa.RTCSessionController",
"version": "3",
"configuration": {
"isFullDuplexAudioSupported": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa.MediaMetadata",
"version": "3",
"proactivelyReported": true
},
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3.2",
"properties": {
"supported": [
{
"name":"connectivity"
}
],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
]
}
]
}
}
}
ディレクティブとイベント
Alexa.RTCSessionController
インターフェースは、次のディレクティブとイベントを定義します。
InitiateSessionWithOfferディレクティブ
InitiateSessionWithOffer
ディレクティブをサポートすると、ユーザーが玄関のデバイスとリアルタイム通信を開始できます。
以下は、ユーザーの発話の例です。
Alexa, talk to my front door camera
アレクサ、玄関のカメラと話して
InitiateSessionWithOfferディレクティブの例
以下の例は、Alexaがスキルに送信するInitiateSessionWithOffer
ディレクティブを示しています。
{
"directive": {
"header": {
"namespace": "Alexa.RTCSessionController",
"name": "InitiateSessionWithOffer",
"messageId": "一意のバージョン4 UUID",
"correlationToken": "opaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID",
"cookie": {}
},
"payload": {
"sessionId" : "セッション識別子",
"offer": {
"format" : "SDP",
"value" : "SDPオファー値"
}
}
}
}
InitiateSessionWithOfferディレクティブペイロード
フィールド | 説明 | 型 |
---|---|---|
sessionId |
接続したいセッションのIDです。 | バージョン4 UUID |
offer |
SDPオファーです。 | 文字列 |
InitiateSessionWithOffer応答
InitiateSessionWithOffer
ディレクティブを正しく処理したら、AnswerGeneratedForSession
イベントを使用して応答します。応答は同期または非同期のどちらでも可能です。非同期で応答する場合、相関トークンと、認可トークンを含めたスコープを含めます。
AnswerGeneratedForSessionイベントの例
以下は、AnswerGeneratedForSession
イベントの例です。
{
"event": {
"header": {
"namespace": "Alexa.RTCSessionController",
"name": "AnswerGeneratedForSession",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {
"answer": {
"format" : "SDP",
"value" : "SDPアンサー値"
}
}
}
}
AnswerGeneratedForSessionイベントペイロード
フィールド | 説明 | 型 |
---|---|---|
answer |
SDPアンサーです。 | 文字列 |
InitiateSessionWithOfferディレクティブのエラー処理
InitiateSessionWithOffer
ディレクティブを正しく処理できなかった場合は、Alexa.ErrorResponseイベントを使用して応答します。ユーザーがカメラを設定する必要がある場合、NOT_SUPPORTED_IN_CURRENT_MODE
エラーを返し、currentDeviceMode
フィールドにはNOT_PROVISIONED
の値が含まれます。
SessionConnectedディレクティブ
SessionConnected
ディレクティブは、RTCセッションが接続されたことを通知します。
SessionConnected
ディレクティブを送信するとは限りません。SessionConnectedディレクティブの例
次の例は、Alexaがスキルに送信するSessionConnected
ディレクティブを示しています。
{
"directive": {
"header": {
"namespace": "Alexa.RTCSessionController",
"name": "SessionConnected",
"messageId": "一意のバージョン4 UUID",
"correlationToken": "opaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID",
"cookie": {}
},
"payload": {
"sessionId" : "セッション識別子"
}
}
}
SessionConnectedディレクティブペイロード
フィールド | 説明 | 型 |
---|---|---|
sessionId |
元のInitiateSessionWithOffer ディレクティブからのセッションのIDです。 |
バージョン4 UUID |
SessionConnected応答
SessionConnected
ディレクティブを正しく処理したら、SessionConnected
イベントを使用して応答します。応答は同期または非同期のどちらでも可能です。非同期で応答する場合、相関トークンと、認可トークンを含めたスコープを含めます。
SessionConnectedイベントの例
{
"event": {
"header": {
"namespace": "Alexa.RTCSessionController",
"name": "SessionConnected",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {
"sessionId" : "セッション識別子"
}
}
}
SessionConnectedイベントペイロード
フィールド | 説明 | 型 |
---|---|---|
sessionId |
元のInitiateSessionWithOffer ディレクティブからのセッションのIDです。 |
バージョン4 UUID |
SessionConnectedディレクティブのエラー処理
SessionConnected
ディレクティブを正しく処理できなかった場合は、Alexa.ErrorResponseイベントを使用して応答します。
SessionDisconnectedディレクティブ
SessionDisconnected
ディレクティブは、RTCセッションが切断されたことを通知します。
SessionDisconnectedディレクティブの例
次の例は、Alexaがスキルに送信するSessionDisconnected
ディレクティブを示しています。
{
"directive": {
"header": {
"namespace": "Alexa.RTCSessionController",
"name": "SessionDisconnected",
"messageId": "一意のバージョン4 UUID",
"correlationToken": "opaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID",
"cookie": {}
},
"payload": {
"sessionId" : "セッション識別子"
}
}
}
SessionDisconnectedディレクティブペイロード
フィールド | 説明 | 型 |
---|---|---|
sessionId |
元のInitiateSessionWithOffer ディレクティブからのセッションのIDです。 |
バージョン4 UUID |
SessionDisconnected応答イベント
SessionDisconnected
ディレクティブを正しく処理したら、SessionDisconnected
イベントを使用して応答します。応答は同期または非同期のどちらでも可能です。非同期で応答する場合、相関トークンと、認可トークンを含めたスコープを含めます。
SessionDisconnectedイベントの例
{
"event": {
"header": {
"namespace": "Alexa.RTCSessionController",
"name": "SessionDisconnected",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {
"sessionId" : "セッション識別子"
}
}
}
SessionDisconnectedイベントペイロード
フィールド | 説明 | 型 |
---|---|---|
sessionId |
元のInitiateSessionWithOffer ディレクティブからのセッションのIDです。 |
バージョン4 UUID |
SessionDisconnectedディレクティブのエラー処理
SessionDisconnected
ディレクティブを正しく処理できなかった場合は、Alexa.ErrorResponseイベントを使用して応答します。
状態レポート
Alexaはエンドポイントの状態についての情報をリクエストするために、ReportState
ディレクティブを送信します。AlexaがReportState
ディレクティブを送信したら、それに対する応答としてStateReport
イベントを送信します。この応答には、contextオブジェクトのすべてのretrievableプロパティの現在の状態を含めます。retrievableプロパティは検出応答で特定します。状態レポートの詳細については、状態および変更レポートについてを参照してください。
Alexa.RTCSessionController
インターフェースでは、取得可能なプロパティを定義しません。ただし、スキルでカメラデバイス用にほかのインターフェースも実装している場合、それらのインターフェースのプロパティについて状態レポートを行う必要があります。StateReport応答の例
{
"event": {
"header": {
"namespace": "Alexa",
"name": "StateReport",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
変更レポート
エンドポイントの状態の変化をプロアクティブにレポートするために、ChangeReport
イベントを送信します。プロアクティブにレポートするプロパティは検出応答で特定します。変更レポートの詳細については、状態および変更レポートについてを参照してください。
Alexa.RTCSessionController
インターフェースでは、プロアクティブに取得可能なプロパティを定義しません。ただし、スキルでカメラデバイス用にほかのインターフェースも実装している場合、それらのインターフェースのプロパティについて変更レポートを行う必要があります。ChangeReportイベントの例
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2.0ベアラートークン"
},
"endpointId": "エンドポイントID"
},
"payload": {
"change": {
"cause": {
"type": "PERIODIC_POLL"
},
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "UNREACHABLE"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
},
"context": {
"properties": [
]
}
}
関連トピック
- リアルタイム通信インターフェースについて
- Alexa.CameraStreamController
- Alexa.DoorbellEventSource
- Alexa.MotionSensor
- Announcing 2-Way Communication APIs
最終更新日: 2022 年 10 月 24 日