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

Вторичная проверка пользователя позволяет вам добавлять безопасность второго фактора к голосовым командам. Это позволяет вам добавлять дополнительную безопасность для определенных действий, таких как выключение камеры безопасности или открытие двери. Вторичная проверка пользователя не привязана к определенной характеристике устройства, что позволяет вам решать, когда 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 Приглушаю свет в гостиной.
Запрос 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 запрашивает пин-код. На этом этапе пользователь может предоставить неправильный или действительный пин-код.

Пример запроса и ответа на неправильный или действительный ПИН-код:

Пользователь Отоприте дверь.
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 - Извините, код безопасности неверный.
  • пользовательОтменено - ОК

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