Дополнительная проверка пользователя

Вторичная проверка пользователя позволяет добавить к голосовым командам второй фактор безопасности. Это позволяет вам добавить дополнительную безопасность для определенных действий, таких как выключение камеры наблюдения или открытие двери. Вторичная проверка пользователя не привязана к конкретной характеристике устройства, что позволяет вам решить, когда 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 Приглушение света в гостиной.
Запрос 1
{
  "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
          }
        }]
      }]
    }
  }]
}
Ответ 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Запрос 2
{
  "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
          }
        }]
      }]
    }
  }]
}
Ответ 2
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "SUCCESS"
    }]
  }
}

ackNeeded с состояниями признаков

Аутентификация с подтверждением вторичного пользователя, которая может использовать состояния для признака. Например, если вы работаете с признаком TemperatureSetting и заданы как thermostatMode , так и thermostatTemperatureSetpoint , Assistant может спросить: «Вы уверены, что хотите установить нагрев кондиционера на 28 градусов?»

Вы также можете включить состояние в ответ, чтобы Assistant выполнил определенное действие на основе данного запроса.

Следующие черты и состояния поддерживают ackNeeded с состояниями черт. Перечисление определенного признака указывает на то, что поддерживаются все его состояния.

В этом примере показаны запрос и ответ с вызовом ackNeeded , использующим состояние типажа. Он меняет режим кондиционера на обогрев и устанавливает температуру 28 градусов. Затем Assistant запрашивает у пользователей подтверждение на включение обогрева и установку температуры на 28 градусов, поскольку в ответе в качестве состояния возвращается значение thermostatTemperatureSetpoint , равное 28 .

Пользователь Установите режим переменного тока на обогрев.
Google Assistant Вы уверены, что хотите установить температуру кондиционера на 28 градусов?
Пользователь Да.
Google Assistant Выставил нагрев кондиционера на 28 градусов.
Запрос 1
{
  "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"
          }
        }]
      }]
    }
  }]
}
Ответ 1
{
  "requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
  "payload": {
    "commands": [{
      "ids": ["123"],
      "status": "ERROR",
      "states": {
        "thermostatMode": "heat",
        "thermostatTemperatureSetpoint": 28
      },
      "errorCode": "challengeNeeded",
      "challengeNeeded": {
        "type": "ackNeeded"
      }
    }]
  }
}
Запрос 2
{
  "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
          }
        }]
      }]
    }
  }]
}
Ответ 2
{
  "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 — ОК

Полный список ошибок и исключений смотрите .