Дополнительная проверка пользователя позволяет добавить двухфакторную аутентификацию к голосовым командам. Это позволяет повысить безопасность определенных действий, таких как выключение камеры видеонаблюдения или открытие двери. Дополнительная проверка пользователя не привязана к конкретным характеристикам устройства, что позволяет вам решать, когда Google Assistant должен запрашивать подтверждение. Например, вы можете запросить подтверждение для функции OnOff для камеры видеонаблюдения, но не запрашивать подтверждение для функции OnOff для светильника. Вы также можете настроить Assistant на отправку запросов в определенных ситуациях для того же действия. Например, вы можете запросить у Assistant запрос на открытие двери, если NFC-брелок находится вне зоны досягаемости двери, но не запрашивать подтверждение, если брелок присутствует.
Assistant может отправлять два типа запросов на подтверждение — явное подтверждение или персональный идентификационный номер (PIN). Это добавляет блок запроса к намерениям QUERY и EXECUTE , отправляемым Assistant обратно в ваше действие, и принимает ответ об ошибке challengeNeeded . Затем Assistant отправляет запрос на намерение обратно в ваше действие с данными запроса в блоке запроса. После этого вы можете проверить данные запроса, чтобы определить, предоставил ли пользователь правильный ответ безопасности.
Assistant использует диалоговое окно для отправки запроса, но если вы используете Assistant на устройствах, не поддерживающих голосовое управление, ввод PIN-кода и подтверждение выполняются на экране.
Поддерживаемые типы устройств
Дополнительная проверка пользователя поддерживается на всех типах устройств.
Поддерживаемые характеристики устройства
Для всех характеристик устройства поддерживается дополнительная проверка пользователя.
Поддерживаемые типы задач
Ниже перечислены поддерживаемые типы запросов на дополнительную проверку пользователя:
- Без проверки подлинности — запрос и ответ, в которых не используется вторичная проверка подлинности пользователя.
- 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 :
ackNeded simple
В этом примере показан простой запрос и ответ с запросом 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 with trait states
Дополнительная аутентификация пользователя, которая может использовать состояния для параметра. Например, если вы работаете с параметром 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-кода:
| Пользователь | Откройте дверь. |
| 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-кода.
| Пользователь | 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 - Извините, код безопасности неверный.
- Пользователь отменил - Ок
См. полный список ошибок и исключений .