Alexa.Commissionableインターフェース1.0
AlexaスキルにAlexa.Commissionable
インターフェースを実装すると、Matterなどのローカルプロトコルを使って、Alexaをユーザーのホームネットワーク上のエンドポイントにローカル接続できます。Alexaをエンドポイントにローカル接続することにより、別ルートでも制御ディレクティブを実行できるようになります。このルートを使うことで、エンドポイントをより高速に制御できるため、ネットワークがダウンしたり、スキルが利用できなくなったりした場合でも、より柔軟に対応できます。MatterデバイスとAmazonの統合について詳しくは、こちらのページを参照してください。
Alexa.Commissionable
インターフェースがサポートするロケールについては、Alexaインターフェースとサポートしている言語の一覧を参照してください。メッセージプロパティの定義については、Alexaインターフェースのメッセージとプロパティを参照してください。
発話
Alexa.Commissionable
はユーザーと対話するインターフェースではないため、音声を使ったユーザーとAlexaの直接の対話はサポートされません。
ワークフロー
Alexa.Commissionable
は、ユーザーおよび開発者の既存ワークフローにシームレスに統合されます。通常どおり、ユーザーがまずデバイスをアプリに登録し、Amazonアカウントを使ってアプリをアカウントリンクすることにより、スマートホームスキルを有効にします。Alexaとのアカウントリンクの詳細については、アプリ間アカウントリンクの設定を参照してください。次のいずれかのアクティビティが発生すると、デバイスのAlexaへのコミッションが開始します。
- ユーザーがAlexaにデバイスを探すようリクエストした場合。Alexaはスキルに
Discover
ディレクティブを送信し、スキルは、Alexa.Commissionable
機能を持つDiscover.Response
イベントを、そのエンドポイントについて初めてレポートします。詳細については、検出を参照してください。 - スキルが
AddOrUpdateReport
イベントを使って、Alexa.Commissionable
機能を持つデバイスをプロアクティブにレポートする場合。詳細については、AddOrUpdateReportを参照してください。
Alexa.Commissionable
機能を持つDiscover.Response
イベントまたはAddOrUpdateReport
イベントを受信すると、AlexaはReportCommissioningInformation
ディレクティブを送信してデバイスのコミッション情報をリクエストします。スキルがCommissioningInformationReport
を送信すると、Alexaはローカルコミッションをトリガーするワークフローを開始します。
この図は、ユーザーがスキルを有効にしていない場合の検出ワークフローを表しています。画像をクリックすると拡大します。
この図は、ユーザーが既にスキルを有効にしている場合のAddOrUpdateReportワークフローを表しています。画像をクリックすると拡大します。
Alexa検出を行うMatterの要件
スキルがMatter対応デバイスをAlexaに接続する場合、これらのデバイスは複数のルートでAlexaに接続する可能性があります。たとえば、ユーザーは、複数のAlexaスマートホームスキルをAlexaアカウントにリンクして同じデバイスを制御する可能性があり、そのアカウントには同じデバイスへのローカルMatter接続がある可能性があります。Alexaが、これらのスキルのレポートしたエンドポイントおよびMatterのレポートしたエンドポイントを3つのデバイスではなく、1つのデバイスとしてユーザーに表示できるように、スキルはデバイスの識別情報を提供する必要があります。ここでの、Matterのレポートしたエンドポイントは、Matterファブリックに直接接続されるネイティブのMatterデバイス、Matter Bridge経由のブリッジデバイスとして公開される非Matterデバイスのいずれでもかまいません。
スキルがMatter対応デバイスとAlexaを接続する場合、直接接続であってもMatter Bridge経由であっても、スキルからのDiscover.Response
イベントとAddOrUpdateReport
イベントで次のMatterアトリビュートをAlexaにレポートする必要があります。
endpoint.additionalAttributes.customIdentifier
プロパティに、ネイティブMatterデバイスのBasic ClusterまたはMatter BridgedデバイスのBridged Basic ClusterのUniqueID
アトリビュートの値を設定します。endpoint.connections
配列の接続タイプにMATTER
を設定し、MatterデバイスのVendorID
アトリビュートとProductID
アトリビュートを含めます。わかっている場合は、Discriminator
アトリビュートを含めます。
また、Amazonでは、macAddress
とmacNetworkInterface
をレポートすることを推奨しています(わかっている場合)。重要: MACアドレスが変更された場合、AddOrUpdateReport
イベントをAlexaイベントゲートウェイに送信して、更新後のmacAddress
をプロアクティブにAlexaにレポートします。endpoint.friendlyName
プロパティにアトリビュートを設定する場合、スキルがレポートする名前がネイティブMatterデバイスのBasic ClusterまたはMatter BridgedデバイスのBridged Basic ClusterのNodeLabel
アトリビュートと一致することを確認してください。ユーザーがアプリでフレンドリー名を変更した場合、NodeLabel
フィールドが設定されていれば、このフィールドも更新して変更を反映するようにしてください。NodeLabel
を更新したら、AddOrUpdateReport
イベントで更新後のendpoint.friendlyName
をプロアクティブにAlexaイベントゲートウェイに送信します。
Matterアトリビュートの例
以下は、Matter Basic Information Clusterからの値に基づいて検出プロパティをを設定する方法の例です。
endpoint.friendlyName = matter_device.basicInformationCluster.nodeLabel
additional_attributes.customIdentifier = matter_device.basicInformationCluster.uniqueId
network_interfaces_map = { "WIFI": 1, "THREAD": 2, "ETHERNET": 4 }
if (matter_device.networkCommissioningCluster.featureFlag & network_interfaces_map.WIFI) {
mac_network_interface = "WIFI"
}
else if (matter_device.networkCommissioningCluster.featureFlag & network_interfaces_map.THREAD) {
mac_network_interface = "THREAD"
}
else if (matter_device.networkCommissioningCluster.featureFlag & network_interfaces_map.ETHERNET) {
mac_network_interface = "ETHERNET"
}
connections = [{
"type": "MATTER",
"macAddress": matter_device.get_mac_address(),
"macNetworkInterface": mac_network_interface,
"matterVendorId": matter_device.basicInformationCluster.vendorId,
"matterProductId": matter_device.basicInformationCluster.productId,
"matterDiscriminator": matter_device.get_discriminator()
}]
endpoint.friendlyName = matter_device.basicInformationCluster.nodeLabel
additional_attributes.customIdentifier = matter_device.basicInformationCluster.uniqueId
network_interfaces_map = { "WIFI": 1, "THREAD": 2, "ETHERNET": 4 }
if matter_device.networkCommissioningCluster.featureFlag & network_interfaces_map["WIFI"]:
mac_network_interface = "WIFI"
elif matter_device.networkCommissioningCluster.featureFlag & network_interfaces_map["THREAD"]:
mac_network_interface = "THREAD"
elif matter_device.networkCommissioningCluster.featureFlag & network_interfaces_map["ETHERNET"]:
mac_network_interface = "ETHERNET"
connections = [{
"type": "MATTER",
"macAddress": matter_device.get_mac_address(),
"macNetworkInterface": mac_network_interface,
"matterVendorId": matter_device.basicInformationCluster.vendorId,
"matterProductId": matter_device.basicInformationCluster.productId,
"matterDiscriminator": matter_device.get_discriminator()
}]
検出
Alexa.Commissionable
インターフェースをサポートするエンドポイントは、Alexa.Discovery
インターフェースの標準検出メカニズムを使用して表します。検出応答でAlexa.Commissionable
機能をレポートすると、Alexaは、ユーザーのアカウントで利用可能なデバイスがあること、そのデバイスをローカルでEchoデバイスとペアリングできることを認識します。
検出応答プロパティに、Matter固有の設定をMatterの要件に従って適用します。
検出応答の例
以下は、Alexa.Commissionable
インターフェースとAlexa.EndpointHealth
インターフェースをサポートするMatter対応エンドポイントの検出応答の例です。
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "Discover.Response",
"payloadVersion": "3",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい"
},
"payload": {
"endpoints": [{
"endpointId": "エンドポイントの一意のID",
"manufacturerName": "エンドポイントのメーカー名",
"description": "Alexaアプリに表示される説明",
"friendlyName": "新しいMatterデバイス",
"displayCategories": ["LIGHT"],
"additionalAttributes": {
"manufacturer": "エンドポイントのメーカー名",
"model": "デバイスのモデル",
"serialNumber": "デバイスのシリアル番号",
"firmwareVersion": "デバイスのファームウェアバージョン",
"softwareVersion": "デバイスのソフトウェアバージョン",
"customIdentifier": "Matterの一意ID"
},
"cookie": {},
"capabilities": [{
"type": "AlexaInterface",
"interface": "Alexa.Commissionable",
"version": "1.0"
},
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3.1",
"properties": {
"supported": [{
"name": "connectivity"
}],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
],
"connections": [{
"type": "MATTER",
"macAddress": "00:11:22:AA:BB:33:44:55",
"macNetworkInterface": "THREAD",
"matterVendorId": "MatterベンダーID",
"matterProductId": "Matter製品ID",
"matterDiscriminator": "longDiscriminator"
} ],
"relationships": {}
}]
}
}
}
AddOrUpdateReport
新規のMatterエンドポイントをコミッションしたり既存のエンドポイントを更新したりするには、Alexa.Discovery.AddOrUpdateReport
イベントをプロアクティブに送信します。たとえば、ファームウェアアップデートで既存のエンドポイントをMatterに対応させたら、更新をレポートします。詳細については、AddOrUpdateReport
を参照してください。
Matter固有の設定は、Matterプロトコル固有の要件に従って適用します。
AddOrUpdateReportイベントの例
以下は、新しいMatterエンドポイントに対して、Echoデバイスがこのエンドポイントをコミッションできるよう指定するAddOrUpdateReport
イベントの例です。
{
"event": {
"header": {
"namespace": "Alexa.Discovery",
"name": "AddOrUpdateReport",
"payloadVersion": "3",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい"
},
"payload": {
"endpoints": [{
"endpointId": "新しいエンドポイントの一意ID",
"manufacturerName": "エンドポイントのメーカー名",
"description": "Alexaアプリに表示される説明",
"friendlyName": "新しいMatterデバイス",
"displayCategories": ["LIGHT"],
"additionalAttributes": {
"manufacturer": "エンドポイントのメーカー名",
"model": "デバイスのモデル",
"serialNumber": "デバイスのシリアル番号",
"firmwareVersion": "デバイスのファームウェアバージョン",
"softwareVersion": "デバイスのソフトウェアバージョン",
"customIdentifier": "Matterの一意ID"
},
"cookie": {},
"capabilities": [{
"type": "AlexaInterface",
"interface": "Alexa.Commissionable",
"version": "1.0"
},
{
"type": "AlexaInterface",
"interface": "Alexa.EndpointHealth",
"version": "3.1",
"properties": {
"supported": [{
"name": "connectivity"
}],
"proactivelyReported": true,
"retrievable": true
}
},
{
"type": "AlexaInterface",
"interface": "Alexa",
"version": "3"
}
],
"connections": [{
"type": "MATTER",
"macAddress": "00:11:22:AA:BB:33:44:55",
"macNetworkInterface": "THREAD",
"matterVendorId": "MatterベンダーID",
"matterProductId": "Matter製品ID",
"matterDiscriminator": "longDiscriminator"
} ],
"relationships": {}
}]
}
}
}
ディレクティブとイベント
Alexa.Commissionable
インターフェースは、次のディレクティブとイベントを定義します。
ReportCommissioningInformationディレクティブ
Discover.Response
またはAddOrUpdateReport
イベントにAlexa.Commissionable
機能がある場合、AlexaはReportCommissioningInformation
ディレクティブをスキルに送信します。このディレクティブを使って、Alexaはデバイス制御クラウドに、ローカルコミッションを有効にするために必要なアクションを実行するようリクエストします。
Matterデバイスの場合、次のアクションが発生します。
- このディレクティブを受信すると、デバイス制御クラウドはデバイスを一定期間コミッションモードに設定し、コミッションの認証情報を返します。
- また、デバイス制御クラウドは、デバイスがコミッションモードに設定される期間を表すコミッション有効期限のタイムスタンプも返します。
ReportCommissioningInformation
ディレクティブの例
以下は、Alexaがスキルに送信するReportCommissioningInformation
ディレクティブの例です。
{
"directive": {
"header": {
"namespace": "Alexa.Commissionable",
"name": "ReportCommissioningInformation",
"messageId": "一意のバージョン4 UUID",
"correlationToken": "opaque相関トークン",
"payloadVersion": "1.0"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "OAuth2ベアラートークン"
},
"endpointId": "エンドポイントID",
"cookie": {}
},
"payload": {}
}
}
ReportCommissioningInformationディレクティブのペイロード
ReportCommissioningInformation
ディレクティブは、ペイロードパラメーターを定義しません。
ReportCommissioningInformation
ディレクティブの応答
スキルが正常にReportCommissioningInformation
ディレクティブを処理し、デバイスをコミッションモードに設定すると、CommissioningInformationReport
イベントで応答します。
ReportCommissioningInformationディレクティブのエラー処理
スキルが正常にReportCommissioningInformation
ディレクティブを処理できず、コミッション固有のエラーの場合、Alexa.ReportCommissioningInformation.ErrorResponse
イベントで応答します。一般的なエラーの場合、Alexa.ErrorResponseで応答します。ReportCommissioningInformation
のエラータイプに加え、ENDPOINT_BUSY
、ENDPOINT_UNREACHABLE
、BRIDGE_UNREACHABLE
といった一般的なAlexaのエラータイプを使うこともできます。
CommissioningInformationReportイベント
CommissioningInformationReport
イベントをAlexaイベントゲートウェイに送信して、Alexaにデバイスがコミッションモードになったことを通知します。ReportCommissioningInformation
ディレクティブへの応答として、CommissioningInformationReport
を送信します。
CommissioningInformationReportイベントの例
以下は、正常なCommissioningInformationReport
イベントの例です。
{
"event": {
"header": {
"namespace": "Alexa.Commissionable",
"name": "CommissioningInformationReport",
"messageId": "一意の識別子、バージョン4 UUIDが望ましい",
"correlationToken": "リクエストに一致するopaque相関トークン",
"payloadVersion": "1.0"
},
"endpoint": {
"endpointId": "エンドポイントID"
},
"payload": {
"commissioningInformation": [{
"localProtocol": "MATTER",
"protocolData": {
"manualPairingCode": "ManualPairingCode",
"commissioningWindowExpirationTimestamp": "2021-02-03T16:20:50Z"
}
}
]
}
}
}
CommissioningInformationReportイベントのペイロード
次の表は、CommissioningInformationReport
応答イベントのペイロードの詳細を示しています。
プロパティ | 説明 | 型 | 必須 |
---|---|---|---|
|
Echoをデバイスとペアリングできるローカルプロトコルのリストです。 |
オブジェクトの配列 |
〇 |
|
ローカルネットワーク上でこのデバイスとコミッションするプロトコルを指定します。 |
文字列 |
◯ |
|
プロトコル固有のコミッション情報です。 |
オブジェクト |
◯ |
|
現在のMatter管理者がオープン中のコミッションウィンドウに入るよう指示したときに、Matterデバイスによって生成されるコードです。 |
文字列 |
◯ |
|
Alexaがローカル接続を作成できなくなった後の、コミッションの期間(日時)を表します。このタイムスタンプによってAlexaは特定の時間までリトライを制限できます。また、Alexaがローカル接続できない理由がコミッション期限切れである場合には、トラブルシューティングにも役立ちます。 |
文字列 |
✕ |
CommissioningInformationReport応答
成功すると、Alexaは、Alexaサービスがイベントを受け入れて詳しい論理検証と処理を行うことを示す202 Accepted
を送信します。イベントが受け入れられない場合、Alexaは適切なHTTPステータスコードを送信します。
関連トピック
最終更新日: 2024 年 11 月 12 日