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