Общий
В: Где и на каком языке нам следует реализовать нашу инфраструктуру обработки заказов «из облака в облако»?
A: При условии поддержки современных протоколов SSL (TLS) и OAuth 2.0 вы можете реализовать свою инфраструктуру на любой платформе и на любом языке по вашему выбору. Мы рекомендуем развернуть её как можно ближе к остальной инфраструктуре, чтобы повысить надёжность и сократить задержку выполнения на реальных пользовательских устройствах.
В: Должны ли идентификаторы устройств быть уникальными?
О: Идентификаторы должны быть уникальными. Если в вашем сервисе нет уникальных идентификаторов, они должны быть уникальными хотя бы на уровне пользователя. Представьте себе пользователя с несколькими домами, и оба дома интегрированы с одним и тем же пользователем. Запрос на включение света в одном доме не должен включать свет с тем же идентификатором в другом доме.
В: Должны ли имена устройств быть уникальными?
A: Имена не обязательно должны быть уникальными, хотя со временем мы можем призвать людей исправить неудачные имена после настройки для улучшения пользовательского опыта.
Вот краткое руководство по именованию:
- Имена должны быть такими, которые люди действительно могут произнести.
- Мы распознаем подмножества строк, поэтому если у вас есть «acme color light», мы также ответим на «acme light».
- Мы приветствуем как описательное название продукта, так и одно или несколько имен, определяемых пользователем.
- Пользователям не нужно давать названия комнатам со светильниками, потому что у нас для этого есть комнаты; у них должны быть уникальные названия для каждой комнаты, но они всегда могут использовать множественное число для управления всем (например, две лампочки в офисных бра — «северный свет» и «восточный свет», но их можно называть просто «светильники»).
В: Как часто обновляется состояние устройства?
A: Эфемерное состояние извлекается по запросу QUERY или EXECUTE, которые инициируются пользователем. Если пользователь спрашивает: «Включен ли свет?» или хочет сделать свет ярче, нам потребуется выполнить запрос, чтобы определить текущее состояние.
В: Можно ли обновить Home Graph напрямую, указав текущее состояние устройства?
A: Да, используйте вызов API Report State .
Привязка аккаунтов и OAuth
В: Нужно ли нам привязывать аккаунты?
A: Да, для подключения устройств пользователя к облачным сервисам провайдера требуется привязка учетной записи.
В: Для OAuth срок действия токенов доступа истекает каждые 15,213 часов. Это нормально?
О: Да, но, пожалуйста, протестируйте с достаточно коротким сроком действия, например, 10–20 минут. Наш OAuth-клиент должен обновлять токены по мере необходимости, и тестирование с коротким сроком действия подтвердит работоспособность этого подхода.
Намерения
В: Когда происходит SYNC?
A: SYNC происходит сразу после завершения OAuth и после выполнения вызова Request Sync .
В: Почему не работает SYNC
?
A: Существует ряд распространенных причин, по которым это может не сработать.
Вы отправляете неправильные типы устройств.
- Например, мы ожидаем
action.devices.types.LIGHT
, но вы отправляетеaction.devices.types.Light
.
- Например, мы ожидаем
Вы отправляете неподдерживаемые типы устройств.
- Например, вы отправляете
action.devices.types.FLASHLIGHT
— мы не поддерживаем такую возможность.
- Например, вы отправляете
Вы отправляете недопустимые/неподдерживаемые поля.
- Например, у вас есть поле, которого нет в нашей спецификации.
В вашем ответе SYNC обнаружена другая проблема форматирования.
- Проверьте скобки!
У вас возникла проблема с привязкой аккаунта.
- Убедитесь, что вы получаете действительный токен доступа в заголовке Auth запроса SYNC.
Вы слишком долго отвечаете на запрос SYNC.
- Пожалуйста, убедитесь, что вы отвечаете на запрос SYNC в течение 5 секунд.
В: Допустим ли ответ «в ожидании»?
О: Мы настоятельно рекомендуем использовать ответ «успешно/неуспешно», а не «ожидание», если ваши устройства доступны в режиме реального времени. Свяжитесь с нами, если вам нужен ответ «ожидание» — мы понимаем, что некоторым маломощным устройствам, не работающим в режиме реального времени, может потребоваться ответ «ожидание» и асинхронная модель выполнения.
Тестирование и отправка
В: Можно ли настроить облачную среду разработки?
A: Да, вы можете протестировать незапущенную облачную среду и конфигурацию.
В: Моё действие не отображается в разделе «Управление домом» приложения Google Home. Что происходит?
A: Подтвердите, что вы являетесь разработчиком этого проекта.
Отчет о состоянии
В: Существуют ли предпосылки для внедрения Report State?
A: Проект должен использовать API умного дома, поддерживать OAuth2 и иметь признаки, имеющие состояния, которые необходимо сообщать.
В: Как часто нам нужно отправлять отчет о состоянии устройства?
О: Google интересуют переходное и конечное состояние. Однако, если за короткий промежуток времени происходит много изменений состояния (например, пользователь три раза открывает и закрывает холодильник в течение минуты или переключает диммер), нам нужно сообщить только конечное состояние.
В: Нужно ли отправлять полную информацию о состоянии устройства при выполнении вызовов «Отчет о состоянии»?
A: Частичные обновления состояния не поддерживаются, поэтому вызовы Report State всегда должны включать все данные по конкретному обновлённому признаку. Если два признака приводят к несоответствию, их следует сообщать вместе.
В: Может ли Google отправлять запросы моему устройству, чтобы узнать его состояние (то есть опрашивать устройство)?
О: Это резервный механизм, который мы не рекомендуем использовать. Если нам потребуется часто опрашивать устройство для этих пользователей, мы не можем гарантировать, какой будет дополнительная нагрузка. Необходимость обусловлена новыми визуальными поверхностями. Помимо проблемы с неизвестной нагрузкой, это ухудшит пользовательский опыт. Мы считаем, что Report State критически важна для платформы.
В: Какие характеристики поддерживают Report State прямо сейчас?
A: Поддерживаются все публичные характеристики, с которыми связаны состояния. Также следует сообщать о любых изменениях в состоянии «Онлайн» устройства.
Обратите внимание, что сцены не имеют состояний. Однако они могут приводить к изменению состояния устройств. Если какое-либо устройство в Google Home Graph изменило состояние, об этом необходимо сообщить.
В: Требуется ли для отчета о состоянии отправлять временную метку?
A: Нам не требуется временная метка; последнее отправленное состояние переопределит предыдущие вызовы.
В: Нужно ли мне отдельно сообщать состояние, если я уже отправляю состояние в запросе и/или выполнении?
A: Home Graph сохраняет только состояние, отправленное через Report State . Состояние, возвращаемое в ответ на намерения EXECUTE и QUERY, используется только для речевых ответов пользователю и не сохраняется. Поэтому Report State следует вызывать, даже если новое состояние устройства уже было возвращено в ответ на намерение EXECUTE или QUERY.
В: Каковы последствия, если Report State не будет полностью реализован в установленные сроки?
О: Это приведёт к ухудшению пользовательского опыта, например, в Google Home app (GHA) и на визуальных поверхностях. Это означает, что будет отправлено много запросов на определение состояния, и мы не можем гарантировать, что это повлияет на дополнительную нагрузку на облако партнёра.
В: Как я могу протестировать реализацию нашей функции «Состояние отчета»?
A: Используйте Home Graph Viewer — инструмент самостоятельного тестирования, который показывает текущие состояния вашего устройства, сохраненные в Home Graph .
В: Можно ли использовать случайный requestId для отчета о состоянии?
A: Мы рекомендуем партнерам использовать тот же requestId, который они получили из запроса EXECUTE, если Report State инициировано запросом EXECUTE, в противном случае вы можете просто использовать случайный requestId.
В: Если у пользователя несколько устройств и состояние одного из них изменилось, должны ли мы сообщать последнее состояние всех устройств?
О: Нет. Вам нужно сообщить только состояние конкретного устройства.
Лучшие практики
В: Какая задержка приемлема?
О: Менее 200 мс — идеальный вариант, от 2 до 5 с — приемлемый вариант. Если задержка составляет около 5 секунд, свяжитесь с нами.
В: Как сделать так, чтобы голосовое управление моего динамика корректно реагировало, когда он не в сети?
A: Возвращаем состояние «офлайн» для устройств, не подключенных к сети. Для этой ошибки мы возвращаем «недоступно сейчас» в качестве текста в формате TTS. Подробнее см. в разделе «Ошибки и исключения» .