Добро пожаловать в Центр разработчиков Google Home, новое место, где можно научиться разрабатывать действия для умного дома. Примечание. Вы продолжите создавать действия в консоли действий.

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

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

Пользователь Откройте дверь.
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 - ​​Хорошо.

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