Вторичная верификация пользователя позволяет добавить двухфакторную защиту к голосовым командам. Это позволяет повысить безопасность определенных действий, таких как выключение камеры видеонаблюдения или открытие двери. Вторичная верификация пользователя не привязана к конкретной характеристике устройства, что позволяет вам решать, когда Google Assistant будет отправлять запрос. Например, вы можете выбрать отправку запроса для характеристики « OnOff » для камеры видеонаблюдения, но не отправлять запрос для характеристики OnOff для освещения. Вы также можете настроить Assistant на отправку запросов в определенных ситуациях для одного и того же действия. Например, вы можете попросить Assistant отправить запрос на открытие двери, если NFC-брелок отсутствует рядом с этой дверью, но не отправлять запрос, если брелок находится рядом.
Assistant может отправлять запросы двух типов: явное подтверждение или персональный идентификационный номер (PIN-код). Это добавляет блок запроса к намерениям QUERY
и EXECUTE
, отправляемым Assistant обратно вашему действию, и принимает ответ об ошибке challengeNeeded
. Затем Assistant отправляет запрос намерения обратно вашему действию с данными запроса в блоке запроса. Затем вы можете проверить данные запроса, чтобы определить, дал ли пользователь правильный ответ безопасности.
Assistant использует диалог для подачи запроса, но если вы используете Assistant на неголосовых поверхностях, PIN-код и подтверждения выполняются на экране.
Поддерживаемые типы устройств
Вторичная верификация пользователя поддерживается на всех типах устройств.
Поддерживаемые характеристики устройства
Вторичная верификация пользователя поддерживается для всех характеристик устройства.
Поддерживаемые типы задач
Поддерживаются следующие типы вторичных проверок пользователя:
- Без проверки — запрос и ответ, не использующие вторичную проверку пользователя.
- ackNeeded — вторичная проверка пользователя, требующая явного подтверждения (да или нет) и также могущая использовать состояния признаков в качестве обратной связи. Этот тип проверки не рекомендуется для устройств безопасности и признаков.
- pinNeeded — вторичная проверка пользователя, требующая персонального идентификационного номера (ПИН-кода), который идеально подходит для устройств и характеристик безопасности.
Никаких проблем
В этом примере показан успешный запрос EXECUTE
и ответ без запроса на включение света.
Пользователь | Включите свет. |
Google Assistant | Хорошо, включаю три лампы. |
{ "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
-
currentArmLevel
-
currentStatusReport
- Fill
- LockUnlock
- OnOff
-
on
- OpenClose
- Scene
- TemperatureSetting
-
thermostatMode
-
thermostatTemperatureSetpoint
-
thermostatTemperatureSetpointHigh
-
thermostatTemperatureSetpointLow
В этом примере показаны запрос и ответ с вызовом ackNeeded
, использующим состояние-характеристику. Он переключает кондиционер в режим обогрева и устанавливает температуру 28 градусов. Затем Assistant запрашивает у пользователей подтверждение на включение обогрева и установку температуры 28 градусов, поскольку в ответе в качестве состояния возвращается значение thermostatTemperatureSetpoint
равное 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-код.
Пример запроса и ответа на неправильный или действительный ПИН-код:
Пользователь | Отоприте дверь. |
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 - Извините, код безопасности неверный.
- пользовательОтменено - Ок
Полный список ошибок и исключений см.