Alexa.ChangeReportインターフェース
プロパティの更新をAlexaにプロアクティブにレポートするには、スキルにAlexa.ChangeReport
イベントを実装します。たとえば、ユーザーが手動で照明を点灯したとします。このとき、照明の状態がAlexaアプリに正しく反映されるように、変更レポートを送信します。
変更レポートの詳細については、状態および変更レポートについてを参照してください。
検出
検出中に、スキルでサポートしているインターフェースと、各インターフェースのレポート可能なプロパティを特定します。インターフェースにproactivelyReported = true
を設定すると、そのインターフェースのプロパティに何らかの変更があるたびに、スキルがAlexa.ChangeReport
イベントをAlexaに送信します。
検出応答の例
以下は、照明を制御するAlexaスキルのDiscover.Response
メッセージの例です。このスキルは、Alexa.PowerController
、Alexa.BrightnessController
、Alexa.EndpointHealth
の各インターフェースをサポートしています。powerState
、brightness
、connectivity
はレポート可能なプロパティです。
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover.Response",
"payloadVersion": "3",
"messageId": "<一意の識別子、バージョン4 UUIDが望ましい>"
},
"payload": {
"endpoints": [{
"endpointId": "<照明のエンドポイントの一意のID>",
"manufacturerName": "<エンドポイントのメーカー名>",
"description": "<Alexaアプリに表示される説明>",
"friendlyName": "リビングの照明",
"displayCategories": ["LIGHT"],
"additionalAttributes": {
"manufacturer": "<エンドポイントのメーカー名>",
"model": "<デバイスのモデル>",
"serialNumber": "<デバイスのシリアル番号>",
"firmwareVersion": "<デバイスのファームウェアバージョン>",
"softwareVersion": "<デバイスのソフトウェアバージョン>",
"customIdentifier": "<デバイスのカスタム識別子>"
},
"cookie": {},
"capabilities": [{
"type": "AlexaInterface",
"interface": "Alexa.PowerController",
"version": "3",
"properties": {
"supported": [{
"name": "powerState"
}],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa.BrightnessController",
"version": "3",
"properties": {
"supported": [{
"name": "brightness"
}],
"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"
}
]
}]
}
}
}
ChangeReportイベント
エンドポイントの状態の変化をプロアクティブにレポートするには、Alexa.ChangeReport
イベントを送信します。検出時にインターフェースのプロパティをproactivelyReported
として指定した場合、そのプロパティ値が変更されたときはAlexaにAlexa.ChangeReport
イベントを送信する必要があります。状態の変化がAlexaからのディレクティブによって発生した場合は、ディレクティブ応答と変更レポートイベントの両方を送信します。Alexa.ChangeReport
イベントを、非同期的にAlexaイベントゲートウェイに送信します。
Alexa.ChangeReport
イベントを送信するには、Alexaイベントゲートウェイにイベントを送信する権限をリクエストし、ユーザーごとに認証トークンを取得します。イベントメッセージのscope
にトークンを含めます。詳細については、Alexaイベントゲートウェイへのアクセス権限のリクエストを参照してください。.
ChangeReportイベントの例
以下は、スキルからAlexaにプロアクティブに送信するAlexa.ChangeReport
イベントの例です。endpointId
はデバイスを識別し、scope
はユーザーを識別します。この例では、デバイスの物理的な操作によってpowerState
プロパティがON
に変わったことをレポートします。context
オブジェクトには、変更されていないプロパティの状態も含めます。
POST /v3/events HTTP/1.1
Host: api.amazonalexa.com
Authorization: Bearer access-token-from-Amazon
Content-Type: application/json
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "<一意の識別子、バージョン4 UUIDが望ましい>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "access-token-from-Amazon"
},
"endpointId": "<照明のエンドポイントID>"
},
"payload": {
"change": {
"cause": {
"type": "PHYSICAL_INTERACTION"
},
"properties": [{
"namespace": "Alexa.PowerController",
"name": "powerState",
"value": "ON",
"timeOfSample": "2022-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}]
}
}
},
"context": {
"properties": [{
"namespace": "Alexa.BrightnessController",
"name": "brightness",
"value": 75,
"timeOfSample": "2022-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 1000
},
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2022-02-03T16:20:50.52Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
ChangeReportイベントのプロパティ
プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
レポートのユーザーとエンドポイントを識別します。新しいプロパティ値と変更の理由をpayloadに格納します。 |
|
◯ |
|
レポート可能なほかのすべてのプロパティの状態をレポートします。これらのプロパティとその値を |
|
◯ |
Payloadオブジェクト
Payload
オブジェクトには、スキルがレポートする変更の理由と変更されたプロパティ値のリストを含めます。プロパティを追加するには、検出応答でそのプロパティをproactivelyReported = true
として定義する必要があります。Payload
オブジェクトには、変更されたプロパティ値のみを含めます。
payload
かcontext
のどちらか一方にのみ指定します。両方を使用することはできません。プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
変更の詳細を識別します。 |
オブジェクト |
◯ |
|
1つ以上のプロパティの変更の理由です。 |
|
◯ |
|
変更されたプロパティのリストです。変更されたプロパティごとに1つのオブジェクトを含めます。 |
|
◯ |
Causeオブジェクト
以下の表は、Cause
オブジェクトのプロパティを示しています。
プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
変更の原因を識別します。 |
|
◯ |
Type値
プロパティの値が変更された理由を説明するには、次のいずれかのtype
値を使用します。
CauseオブジェクトのType値 | 説明 |
---|---|
|
ユーザーによるデバイスアプリの操作です。たとえば、デバイス製造元から提供されたアプリを使用して、ユーザーが照明を点灯したりドアをロックした場合です。 |
|
エンドポイントの定期的なポーリングです。たとえば、温度センサーを1時間に1回ポーリングして、更新された温度をAlexaに送信できます。 |
|
エンドポイントの物理的な操作です。たとえば、ユーザーが手動で照明を点灯したり、ドアをロックしたりします。 |
|
ユーザーとAlexaとの対話です。たとえば、ユーザーがEchoデバイスに話しかけて照明を点灯したり、Alexaアプリを使用して照明を消したりします。 |
ChangeReport応答
成功すると、Alexaはイベントが受け付けられたことを示す202 Accepted
を送信します。その後、論理的な検証と処理が行われます。イベントが受け付けられない場合、Alexaは適切なHTTPステータスコードを送信します。
応答本文のパラメーター
この応答には本文はありません。
HTTPステータスコード
次の表は、スキルがAlexaイベントゲートウェイから受け取る可能性のあるHTTPステータスコードの一覧です。エラーを受け取った場合は、payload
オブジェクトにcode
フィールドとdescription
フィールドが含まれます。これらのフィールドはログ記録の目的でのみ使用してください。
ステータス | ペイロードのコード | 説明 |
---|---|---|
|
— |
リクエストは認可され、メッセージは構文的に有効なイベントでした。イベントは受け付けられ、論理的な検証と処理に進みます。 |
|
|
メッセージが無効です。フィールドがない、値が正しくない、正しいJSON形式ではないことが原因です。ドキュメントと照合して、メッセージにすべての必須フィールドが含まれていることを確認します。 |
|
|
メッセージに認可トークンが含まれていないか、トークンが無効、有効期限切れ、形式が正しくないのいずれかです。トークンを更新して、リクエストを再試行してください。ユーザーがスキルを無効にすると、アクセストークンも無効になります。この場合は、ユーザーが認可を取り消したため、変更レポートの送信も停止できます。 |
|
|
イベントゲートウェイへのアクセスが許可されていません。イベントを正しいリージョンのエンドポイントに送信していることを確認してください。たとえば、北米のイベントは北米のエンドポイントに送信します。 |
|
|
トークンに必要な権限がありません。スキルにAlexaイベントを送信する権限があることを確認してください。詳細については、Alexaイベントゲートウェイへのアクセス権限のリクエストを参照してください。 |
|
|
指定されたIDに関連付けられたアカウントレコードが存在しないか、期限が切れています。このエラーは、イベントの送信が遅すぎた場合や、無効なIDが指定された場合に発生する可能性があります。指定されたIDと認可コードが正しいことを確認してください。 |
|
|
このトークンに関連付けられたスキルIDが見つかりませんでした。このエラーは、スキルが認定中などの異なるステージにあるときにユーザーのアクセストークンが生成された場合に発生します。このユーザーでスキルの無効化と有効化を行ってみてください。 |
|
|
イベントペイロードのサイズが大きすぎます。1回のリクエストで許容されるエンドポイントの最大数は300です。より小さいペイロードでメッセージを送信してください。 |
|
|
リクエスト数が多すぎます。メッセージを最大3回再送してください。再送の間隔は、1秒以上空けてください。 |
|
|
Alexaでエラーが発生したため、メッセージは処理されませんでした。メッセージを最大3回再送してください。再送の間隔は、1秒以上空けてください。問題が解消されない場合、Alexa開発者向け問い合わせ窓口にお問い合わせください。 |
|
|
Alexaがメッセージを受け付けられませんでした。メッセージを最大3回再送してください。再送の間隔は、1秒以上空けてください。問題が解消されない場合、Alexa開発者向け問い合わせ窓口にお問い合わせください。 |
エラー応答の例
以下は、エラー応答の例です。
HTTP/1.1 400 Bad Request
Date: Wed, 07 Mar 2018 20:25:31 GMT
Connection: close
{
"header": {
"namespace": "System",
"name": "Exception",
"messageId": "90c3fc62-4b2d-460c-9c8b-77251f1698a0"
},
"payload": {
"code": "INVALID_ACCESS_TOKEN_EXCEPTION",
"description": "The access token is invalid, expired, or malformed."
}
}
関連トピック
- Alexa.Discoveryインターフェース
- Alexa.EndpointHealthインターフェース
- Alexa.Report StateおよびAlexa.StateReportインターフェース
- Alexaインターフェースのメッセージとプロパティ
最終更新日: 2022 年 05 月 25 日