Вторичная проверка пользователя позволяет добавить второй фактор безопасности к голосовым командам. Это позволяет вам добавить дополнительную безопасность для определенных действий, таких как отключение камеры наблюдения или открытие двери. Вторичная проверка пользователя не привязана к конкретной характеристике устройства, что позволяет вам решать, когда 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
с трейт-состояниями. Список определенного признака указывает на то, что все его состояния поддерживаются.
- Постановка на охрану
-
currentArmLevel
-
currentStatusReport
- Наполнять
- ЗаблокироватьРазблокировать
- Вкл выкл
-
on
- Открыто закрыто
- Сцена
- Настройка температуры
-
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-кода:
Пользователь | Откройте дверь. |
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" } }] } }
Ответы на ошибки
Вот некоторые коды ошибок, которые могут быть возвращены вместе с вашими ответами:
-
challengeFailedNotSetup
— для этого действия требуется код безопасности, но он не настроен в приложении вашего устройства. -
tooManyFailedAttempts
— Извините, слишком много неудачных попыток. Пожалуйста, перейдите в приложение вашего устройства, чтобы выполнить это действие. -
pinIncorrect
- К сожалению, код безопасности неверен. -
userCancelled
- Хорошо.
См. полный список ошибок и исключений .