Alexa.EndpointHealthインターフェース
AlexaスキルにAlexa.EndpointHealth
インターフェースを実装すると、デバイスの接続ステータスをAlexaにレポートできます。EndpointHealth
インターフェースは、デバイスに機能を提供するほかのインターフェースと組み合わせて実装します。たとえば、デバイスがサーモスタットの場合は、ユーザーがサーモスタットを制御できるようにThermostatControllerを実装し、サーモスタットが温度を感知してレポートできるようにTemperatureSensorを実装し、スキルがサーモスタットの接続ステータスをレポートできるようにEndpointHealth
を実装します。
ユーザーに最適なエクスペリエンスを提供するために、常にEndpointHealth
を実装することをお勧めします。EndpointHealth
の実装は任意ですが、次の場合は例外となります。
- モーションセンサーや温度センサーなど、センサーデバイスには
EndpointHealth
を実装する必要があります。 - Works with AlexaまたはCertified for Humansプログラムの認定を受ける予定がある場合は、デバイスに
EndpointHealth
を実装する必要があります。
EndpointHealth
インターフェースがサポートする言語については、Alexaインターフェースとサポートしている言語の一覧を参照してください。
プロパティ
connectivityプロパティ
Alexa.EndpointHealth
インターフェースは、connectivity
プロパティを使用してデバイスの接続を表します。connectivityプロパティは、次のフィールドを含むオブジェクトです。
フィールド | 説明 | 型 |
---|---|---|
value |
デバイスの接続ステータスです。OK またはUNREACHABLE のいずれかです。 |
文字列 |
connectivityプロパティの例
{
"name": "connectivity",
"value": {
"value": "OK"
}
}
検出
Alexa.EndpointHealth
インターフェースをサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。
Alexaからスキルに状態レポートリクエストが送信されたときにレポートするすべてのプロパティについて、そのretrievable
をtrueに設定します。変更レポートでAlexaにプロアクティブにレポートするプロパティについては、そのproactivelyReported
をtrueに設定します。EndpointHealth
を実装するときは、connectivityプロパティのretrievable
とproactivelyReported
の両方をtrueに設定します。
検出応答の例
以下は、EndpointHealth
インターフェースとLockControllerインターフェースをサポートするエンドポイントのDiscover.Response
メッセージの例です。
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover.Response",
"payloadVersion": "3",
"messageId": "<メッセージID>"
},
"payload": {
"endpoints":[
{
"endpointId": "<エンドポイントの一意のID>",
"manufacturerName": "<エンドポイントのメーカー名>",
"description": "<Alexaアプリに表示される説明>",
"friendlyName": "<Alexaアプリに表示されるデバイス名(例:玄関)>",
"displayCategories": ["SMARTLOCK"],
"cookie": {},
"capabilities": [
{
"type": "AlexaInterface",
"interface": "Alexa.LockController",
"version": "3",
"properties": {
"supported": [
{
"name": "lockState"
}
],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3",
"properties": {
"supported": [
{
"name":"connectivity"
}
],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
]
}
]
}
}
}
ディレクティブ応答
Alexa.EndpointHealth
インターフェース自体はディレクティブを定義しません。EndpointHealth
を実装する場合は、ほかのインターフェースで定義されたディレクティブへの応答にconnectivityプロパティを含める必要があります。
ディレクティブ応答イベントの例
次の例では、デバイスはPowerControllerインターフェースとEndpointHealth
インターフェースをサポートし、Alexa.ResponseをPowerController.TurnOn
ディレクティブに送信します。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.PowerController",
"name": "powerState",
"value": "ON",
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 500
},
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
状態レポート
Alexaはエンドポイントの状態についての情報をリクエストするために、ReportState
ディレクティブを送信します。AlexaがReportState
ディレクティブを送信したら、それに対する応答としてStateReport
イベントを送信します。応答には、contextオブジェクトのすべてのretrievableプロパティの現在の状態を含めます。retrievableプロパティは検出応答で特定します。状態レポートの詳細については、状態レポートについてを参照してください。
EndpointHealth
を実装する場合、StateReport
にconnectivityプロパティを含めます。
StateReport応答イベントの例
以下は、EndpointHealth
インターフェース、ThermostatControllerインターフェース、TemperatureSensorインターフェースをサポートするエンドポイントのStateReport
の例です。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "StateReport",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.ThermostatController",
"name": "thermostatMode",
"value": "HEAT",
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 500
},
{
"namespace": "Alexa.ThermostatController",
"name": "targetSetpoint",
"value": {
"value": 20.0,
"scale": "CELSIUS"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 500
},
{
"namespace": "Alexa.TemperatureSensor",
"name": "temperature",
"value": {
"value": 19.9,
"scale": "CELSIUS"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 1000
},
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2017-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
変更レポート
エンドポイントの状態の変化をプロアクティブにレポートするために、ChangeReport
イベントを送信します。プロアクティブにレポートするプロパティは検出応答で特定します。変更レポートの詳細については、スマートホームスキルの状態レポートについてを参照してください。
EndpointHealth
を実装する場合、ChangeReport
にconnectivityプロパティを含めます。
connectivity
プロパティの値が変更された場合は、これをペイロードフィールドに含めます。connectivity
プロパティの値が変更されていない場合は、これをコンテキストフィールドに含めます。connectivityプロパティが変更されていないChangeReportイベントの例
以下は、EndpointHealth
インターフェースとNetworking.AccessControllerインターフェースをサポートするエンドポイントのChangeReport
の例です。この変更レポートでは、networkAccess
プロパティの値が変更され、connectivity
プロパティの値は変更されていません。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "<メッセージID>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {
"change": {
"cause": {
"type": "APP_INTERACTION"
},
"properties": [
{
"namespace": "Alexa.Networking.AccessController",
"name": "networkAccess",
"value": "ALLOWED",
"timeOfSample": "2019-10-15T14:20:00Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
},
"context": {
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2019-10-15T14:20:00Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
connectivityプロパティが変更されたChangeReportイベントの例
以下は、EndpointHealth
インターフェースとNetworking.AccessControllerインターフェースをサポートするエンドポイントのChangeReport
の例です。この変更レポートでは、connectivity
プロパティの値が変更され、networkAccess
プロパティの値は変更されていません。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "<メッセージID>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {
"change": {
"cause": {
"type": "PERIODIC_POLL"
},
"properties": [
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "UNREACHABLE"
},
"timeOfSample": "2019-10-15T14:20:00Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
},
"context": {
"properties": [
{
"namespace": "Alexa.Networking.AccessController",
"name": "networkAccess",
"value": "ALLOWED",
"timeOfSample": "2019-10-15T14:20:00Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
関連トピック
最終更新日: 2020 年 12 月 22 日