Alexa.ChangeReportインターフェース3
プロパティの更新をAlexaにプロアクティブにレポートするには、スキルにAlexa.ChangeReport
イベントを実装します。たとえば、ユーザーが手動で照明を点灯したとします。このとき、照明の状態がAlexaアプリに正しく反映されるように、変更レポートを送信します。
変更レポートの詳細については、状態および変更レポートについてを参照してください。
メッセージプロパティの定義については、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"
}
]
}]
}
}
}
変更レポート
エンドポイントの状態の変化をプロアクティブに出力するには、Alexa.ChangeReport
イベントを送信します。検出時にインターフェースのプロパティをproactivelyReported
として指定した場合、そのプロパティ値が変更されたときはAlexaにAlexa.ChangeReport
イベントを送信する必要があります。状態の変化がAlexaからのディレクティブによって発生した場合は、ディレクティブ応答と変更レポートイベントの両方を送信します。Alexa.ChangeReport
イベントを、非同期的にAlexaイベントゲートウェイに送信します。
Alexaにデバイスの健全性を通知する場合、Alexa.EndpointHealth
インターフェースを実装してください。
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-03T08:10:00.10Z",
"uncertaintyInMilliseconds": 0
}]
}
}
},
"context": {
"properties": [{
"namespace": "Alexa.BrightnessController",
"name": "brightness",
"value": 75,
"timeOfSample": "2022-02-01T08:00:00.10Z",
"uncertaintyInMilliseconds": 1000
},
{
"namespace": "Alexa.EndpointHealth",
"name": "connectivity",
"value": {
"value": "OK"
},
"timeOfSample": "2022-02-03T08:00:00.10Z",
"uncertaintyInMilliseconds": 0
}
]
}
}
ChangeReportイベントのプロパティ
プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
レポートのユーザーとエンドポイントを識別します。新しいプロパティ値と変更の理由をpayloadに格納します。 |
|
◯ |
|
レポート可能なほかのすべてのプロパティの状態をレポートします。これらのプロパティとその値を |
|
◯ |
Payloadオブジェクト
Payload
オブジェクトには、スキルがレポートする変更の理由と変更されたプロパティ値のリストを含めます。プロパティを追加するには、検出応答でそのプロパティをproactivelyReported = true
として定義する必要があります。Payload
オブジェクトには、変更されたプロパティ値のみを含めます。
payload
またはcontext
のどちらか1か所にのみ指定します。両方を使用することはできません。プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
変更の詳細を識別します。 |
オブジェクト |
◯ |
|
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開発者向け問い合わせ窓口にお問い合わせください。 |
応答本文401 Unauthorizedの例
以下は、エラー応答の例です。
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": "アクセストークンが無効、有効期限切れ、形式が正しくないのいずれかです。"
}
}
関連トピック
- Alexa.Discoveryインターフェース
- Alexa.EndpointHealthインターフェース
- Alexa.Report StateおよびAlexa.StateReportインターフェース
- Alexaインターフェースのメッセージとプロパティ
- 運用メトリクス
最終更新日: 2024 年 11 月 08 日