二次的なユーザー確認とは、2 つ目の要素を使って音声コマンドのセキュリティを強化する仕組みです。これにより、セキュリティ カメラの電源を切る、ドアを開けるなどの特定のアクションに対して、セキュリティを強化できます。二次的なユーザー確認は特定のデバイス トレイトには結び付けられていないため、いつ にチャレンジを発行させるかはデベロッパーが決定できます。Google Assistantたとえば、セキュリティカメラのOnOffトレイトではチャレンジを発行し、ライトのOnOffトレイトではチャレンジを発行しないよう設定できます。また、同じアクションでも、状況に応じてAssistant にチャレンジを発行させることもできます。たとえば、NFC キーフォブが近くにないドアを開ける場合はチャレンジ リクエストを発行し、キーフォブが存在するドアを開ける場合はチャレンジを発行しないようAssistantに要求できます。
Assistant は、
明示的な確認応答と個人識別番号(PIN)の 2 種類のチャレンジを発行できます。チャレンジを発行すると、Assistant からアクションに返される QUERY と EXECUTE のインテントに
チャレンジ ブロックが追加され、challengeNeeded エラー
レスポンスが受け入れられます。Assistantは、チャレンジ ブロックにチャレンジ データを格納したインテント リクエストを
アクションに返します。このチャレンジ データを検証して、ユーザーから提供されたセキュリティ レスポンスが正しいかどうかを判断できます。
Assistant によるチャレンジは対話として行われますが、音声非対応のサーフェスで Assistant を使用している場合、PIN の入力と 確認は画面上で行われます。
サポートされているデバイスタイプ
Secondary User Verification はすべてのデバイスタイプでサポートされています。
サポートされているデバイス トレイト
Secondary User Verification はすべてのデバイス トレイトでサポートされています。
サポートされているチャレンジの種類
Secondary User Verification がサポートされているチャレンジの種類は以下のとおりです。
- チャレンジなし - 二次的なユーザー確認チャレンジを使用しないリクエストとレスポンス。
- ackNeeded - 明示的な確認応答(はい / いいえ)を要求する二次的なユーザー確認。レスポンス フィードバックとしてトレイトの状態を使用することもできます。このチャレンジの種類は、セキュリティ デバイスやセキュリティ トレイトにはおすすめしません。
- pinNeeded - 個人識別番号(PIN)を要求する二次的なユーザー確認。セキュリティ デバイスやセキュリティ トレイトに最適です。
チャレンジなし
以下の例は、照明をオンにするためのチャレンジなしで EXECUTE リクエストとレスポンスが成功した場合を示します。
| ユーザー | 照明をつけて。 |
| Google Assistant | はい、3 つの照明をつけます。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.OnOff", "params": { "on": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "on": true, "online": true } }] } }
ackNeeded
トレイトの複数の状態または単純な確認応答を使用できる二次的なユーザー認証。
ackNeeded チャレンジには次の種類があります。
単純な ackNeeded
以下の例は、照明を暗くするために ackNeeded チャレンジを発行してその確認を得る単純なリクエストとレスポンスを示します。
| ユーザー | リビングの照明を暗くして。 |
| Google Assistant | リビングの照明を暗くします。よろしいですか? |
| ユーザー | はい。 |
| Google Assistant | リビングの照明を暗くします。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.BrightnessAbsolute", "params": { "brightness": 12 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.BrightnessAbsolute", "params": { "brightness": 12 }, "challenge": { "ack": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS" }] } }
トレイトの状態を伴う ackNeeded
トレイトの状態を使用できる二次的なユーザー認証。
たとえば、
TemperatureSetting トレイトを使用しているときに、
thermostatMode と thermostatTemperatureSetpoint の両方が設定されている場合、
Assistant は エアコンを 28 度に設定してもよろしいですか?と尋ねます。
また、レスポンスに状態を含めて、 Assistantに指定された リクエストに基づいて特定のアクションを実行させることもできます。
以下のトレイトとその状態は、トレイトの状態を伴う ackNeeded をサポートします。特定のトレイトがリストされている場合は、そのすべての状態がサポートされていることを示します。
- ArmDisarm
currentArmLevelcurrentStatusReport- Fill
- LockUnlock
- OnOff
on- OpenClose
- Scene
- TemperatureSetting
thermostatModethermostatTemperatureSetpointthermostatTemperatureSetpointHighthermostatTemperatureSetpointLow
以下の例は、トレイトの状態を使用する ackNeeded チャレンジを使用したリクエストとレスポンスを示します。エアコンのモードを暖房に変更し、温度を 28 度に設定します。レスポンスで thermostatTemperatureSetpoint の 28 が状態として返されるため、Assistant は暖房をオンにして温度を 28 度に設定することを確認します。
| ユーザー | エアコンを暖房に設定して。 |
| Google Assistant | エアコンを 28 度に設定してもよろしいですか? |
| ユーザー | はい。 |
| Google Assistant | エアコンを 28 度に設定します。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.TemperatureSetting", "params": { "thermostatMode": "heat" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 }, "errorCode": "challengeNeeded", "challengeNeeded": { "type": "ackNeeded" } }] } }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.TemperatureSetting", "params": { "thermostatMode": "heat" }, "challenge": { "ack": true } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "thermostatMode": "heat", "thermostatTemperatureSetpoint": 28 } }] } }
pinNeeded
セキュリティ デバイスには pinNeeded チャレンジを使用することをおすすめします。
以下の例は、pinNeeded チャレンジを使用した最初のリクエストとレスポンスを示しています。この例では、pinNeededチャレンジを含むレスポンスが返されるため、
Assistantは PIN を要求します。この時点で、ユーザーは正しくない PIN または有効な PIN
を提供する可能性があります。
正しくない PIN が提供された場合と有効な PIN が提供された場合のリクエストとレスポンスの例:
| ユーザー | ドアを開けて。 |
| Google Assistant | セキュリティ コードを教えてください。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.LockUnlock", "params": { "lock": false } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "pinNeeded" } }] } }
正しくない PIN
以下の例は、challengeFailedPinNeeded チャレンジを使用したリクエストとレスポンスを示しています。このチャレンジは、最初の pinNeeded チャレンジが失敗した後に使用する必要があります。
challengeFailedPinNeeded タイプのレスポンスが返されると、
Assistant はセキュリティコードを再度要求します。ユーザーが失敗を繰り返した場合は、tooManyFailedAttempts エラー
レスポンスを返すことができます。エラー レスポンスをご覧ください。
| ユーザー | 333222 |
| Google Assistant | セキュリティ コードが正しくありません。 セキュリティ コードを教えてください。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.LockUnlock", "params": { "lock": false }, "challenge": { "pin": "333222" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "challengeFailedPinNeeded" } }] } }
有効な PIN
以下の例は、有効な PIN が提供された場合のリクエストとレスポンスを示します。
| ユーザー | 333444 |
| Google Assistant | ドアのロックを解除します。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.LockUnlock", "params": { "lock": false }, "challenge": { "pin": "333444" } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "SUCCESS", "states": { "isLocked": false, "isJammed": false } }] } }
| ユーザー | リビングの照明を暗くして。 |
| Google Assistant | セキュリティ コードを教えてください。 |
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "inputs": [{ "intent": "action.devices.EXECUTE", "payload": { "commands": [{ "devices": [{ "id": "123" }], "execution": [{ "command": "action.devices.commands.BrightnessAbsolute", "params": { "brightness": 12 } }] }] } }] }
{ "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf", "payload": { "commands": [{ "ids": ["123"], "status": "ERROR", "errorCode": "challengeNeeded", "challengeNeeded": { "type": "pinNeeded" } }] } }
エラー レスポンス
以下は、レスポンスで返される可能性があるエラーコードです。
- tooManyFailedAttempts - 失敗回数が多すぎます。 デバイスのアプリに移動して、アクションを完了してください。
- pinIncorrect - セキュリティ コードが正しくありません。
- userCancelled - わかりました。