Alexa.LockControllerインターフェース
Alexa.LockController
機能インターフェースは、ロック可能なエンドポイントを制御するために使用するメッセージを記述しています。
LockController
インターフェースでサポートされているロケールについては、機能インターフェースの一覧を参照してください。
発話
Alexa.LockController
インターフェースを使用する場合、音声対話モデルは既にビルドされています。以下に、ユーザーの発話の例を示します。
アレクサ、玄関に鍵をかけて。
アレクサ、裏口の鍵を開けて。
ユーザーがこのような発話をしたら、Alexaがそれに対応するディレクティブをスキルに送信します。
プロパティ
lockStateプロパティ
Alexa.LockController
インターフェースは、lockState
プロパティを使用してロックの状態を表します。lockStateの有効な値は次のとおりです。
値 | 説明 |
---|---|
LOCKED |
デバイスは現在ロックされています。 |
UNLOCKED |
現在、デバイスのロックは解除されています。 |
JAMMED |
ロック機構で不具合が発生したため、ロックがロック状態またはロック解除状態に遷移できません。 |
LockStateプロパティの例
{
"name": "lockState",
"value": "LOCKED"
}
検出
Alexa.LockController
をサポートするエンドポイントは、Alexa.Discoveryの標準検出メカニズムを使用して表します。
Alexaからスキルに状態レポートリクエストが送信されるときにレポートするすべてのインターフェースとプロパティのretrievable
をtrueに設定します。変更レポートでAlexaにプロアクティブにレポートするインターフェースとプロパティのproactivelyReported
をtrueに設定します。
表示カテゴリーにはSMARTLOCK
を使用します。表示カテゴリーの一覧は、表示カテゴリーを参照してください。
応答例
以下は、Alexa.PercentageController
インターフェースをサポートする1つのエンドポイントへのAlexa.LockController
メッセージの例です。
{
"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",
"version": "3"
}
]
}
]
}
}
}
ディレクティブ
Lockディレクティブ
エンドポイントのロックをユーザーがリクエストできるように、Lock
ディレクティブをサポートします。
以下は、ユーザーの発話の例です。
アレクサ、玄関に鍵をかけて。
Lockディレクティブの例
{
"directive": {
"header": {
"namespace": "Alexa.LockController",
"name": "Lock",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>",
"cookie": {}
},
"payload": {}
}
}
Lock応答イベント
Lock
ディレクティブを正しく処理したら、ハードウェアでタスクを完了できる速度に応じて応答します。
- ハードウェアが5秒以内にロックを完了できる場合は、Responseイベントを送信します。
- ハードウェアがロックを完了するまでに5秒よりも長くかかる場合は、最初に同期DeferredResponseイベントを送信し、次にロックが完了したときに
Response
イベントを送信します。
いずれの場合も、Response
イベントを同期的または非同期的に送信できます。Response
を非同期で送信する場合、相関トークンと、認可トークンを含めたスコープを含めます。
応答のコンテキストでlockStateプロパティの値を指定します。
高速ロックの例:応答イベントのみ
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.LockController",
"name": "lockState",
"value": "LOCKED",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 1000
}
]
}
}
低速ロックの例:遅延応答と応答
次の例では、完了に5秒以上かかるLockディレクティブに対する2つの応答を示します。最初に同期のDeferredResponse</code>を送信します。オプションで、2番目の応答を送信する前のおおよその時間であるestimatedDeferralInSeconds
(単位:秒)を含めます。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "DeferredResponse",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"payload": {
"estimatedDeferralInSeconds": 15
}
}
}
次に、Response
イベントを送信します。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.LockController",
"name": "lockState",
"value": "LOCKED",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 1000
}
]
}
}
Lockディレクティブのエラー処理
Lock
ディレクティブを正しく処理できなかった場合は、Alexa.ErrorResponseイベントを使用して応答します。
Unlockディレクティブ
エンドポイントのロック解除をユーザーがリクエストできるように、Unlock
ディレクティブをサポートします。デフォルトでは、デバイスのロックを解除できません。ロック可能なエンドポイントスキルをテストする場合は、Alexaアプリでデバイスを編集することで、まずロック解除機能を有効にします。
以下は、ユーザーの発話の例です。
アレクサ、玄関の鍵を開けて。
Unlockディレクティブの例
{
"directive": {
"header": {
"namespace": "Alexa.LockController",
"name": "Unlock",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>",
"cookie": {}
},
"payload": {}
}
}
Unlock応答イベント
Unlock
ディレクティブを正しく処理したら、ハードウェアでタスクを完了できる速度に応じて応答します。
- ハードウェアが5秒以内にロック解除を完了できる場合は、Responseイベントを送信します。
- ハードウェアがロック解除を完了するまでに5秒よりも長くかかる場合は、 DeferredResponseイベントを送信し、ロック解除が完了したときに
Response
イベントを送信します。
いずれの場合も、Response
イベントを同期的または非同期的に送信できます。
応答のコンテキストでlockStateプロパティの値を指定します。
高速ロック解除の例:応答イベントのみ
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.LockController",
"name": "lockState",
"value": "UNLOCKED",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 1000
}
]
}
}
低速アンロックの例:遅延応答と応答
次の例では、完了に5秒以上かかるunlockディレクティブに対する2つの応答を示します。最初に同期のDeferredResponse</code>を送信します。オプションで、2番目の応答を送信する前のおおよその時間であるestimatedDeferralInSeconds
(単位:秒)を含めます。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "DeferredResponse",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"payload": {
"estimatedDeferralInSeconds": 20
}
}
}
次に、Response
イベントを送信します。
{
"event": {
"header": {
"namespace": "Alexa",
"name": "Response",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.LockController",
"name": "lockState",
"value": "UNLOCKED",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 1000
}
]
}
}
Unlockディレクティブのエラー処理
Unlock
ディレクティブを正しく処理できなかった場合は、Alexa.ErrorResponseイベントを使用して応答します。
状態レポート
Alexaはエンドポイントの状態についての情報をリクエストするためにReportState
ディレクティブを送信します。AlexaがReportState
ディレクティブを送信したら、それに対する応答としてStateReport
イベントを送信します。この応答には、contextオブジェクトのすべてのretrievableプロパティの現在の状態を含めます。retrievableプロパティは検出応答で特定します。状態レポートの詳細については、状態レポートについてを参照してください。
StateReport応答イベントの例
{
"event": {
"header": {
"namespace": "Alexa",
"name": "StateReport",
"messageId": "<メッセージID>",
"correlationToken": "<opaque相関トークン>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {}
},
"context": {
"properties": [
{
"namespace": "Alexa.LockController",
"name": "lockState",
"value": "UNLOCKED",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 1000
}
]
}
}
変更レポート
エンドポイントの状態の変化をプロアクティブにレポートするために、ChangeReport
イベントを送信します。プロアクティブにレポートするプロパティは検出応答で特定します。変更レポートの詳細については、スマートホームスキルの状態レポートについてを参照してください。
ChangeReportイベントの例
{
"event": {
"header": {
"namespace": "Alexa",
"name": "ChangeReport",
"messageId": "<メッセージID>",
"payloadVersion": "3"
},
"endpoint": {
"scope": {
"type": "BearerToken",
"token": "<OAuth2ベアラートークン>"
},
"endpointId": "<エンドポイントID>"
},
"payload": {
"change": {
"cause": {
"type": "PHYSICAL_INTERACTION"
},
"properties": [
{
"namespace": "Alexa.LockController",
"name": "lockState",
"value": "LOCKED",
"timeOfSample": "2017-02-03T16:20:50Z",
"uncertaintyInMilliseconds": 1000
}
]
}
}
},
"context": {}
}
関連トピック
最終更新日: 2021 年 08 月 10 日