Функция Request Sync инициирует запрос на SYNC для любого пользователя Google, устройства которого имеют указанный agentUserId (который вы отправили в исходном запросе на синхронизацию). Это позволяет обновлять устройства пользователей без отмены и повторной привязки их учетных записей. Все пользователи, связанные с этим идентификатором, получат запрос SYNC .
Необходимо инициировать запрос SYNC :
- Если пользователь добавляет новое устройство.
- Если пользователь удаляет существующее устройство.
- Если пользователь переименовывает существующее устройство.
- Если вы внедряете новый тип устройства, характеристику или добавляете новую функцию устройства.
Начать
Для реализации синхронизации запросов выполните следующие шаги:
Включите API Google HomeGraph
В Google Cloud Console перейдите на страницу API HomeGraph .
Перейдите на страницу API HomeGraph.- Выберите проект, соответствующий идентификатору вашего проекта smart home .
- Нажмите ВКЛЮЧИТЬ .
Создать ключ учетной записи службы
Следуйте этим инструкциям, чтобы сгенерировать ключ учетной записи службы в Google Cloud Console :
В Google Cloud Console перейдите на страницу «Учетные записи служб» .
Перейдите на страницу «Учетные записи служб» .Возможно, вам потребуется выбрать проект, прежде чем вы перейдете на страницу «Учетные записи служб».
Нажмите . Создайте учетную запись службы .
В поле « Имя учетной записи службы» введите имя.
В поле «Идентификатор учетной записи службы» введите идентификатор.
В поле «Описание учетной записи службы» введите описание.
Нажмите «Создать и продолжить» .
В раскрывающемся списке «Роль» выберите «Учетные записи служб» > «Создание токенов идентификации OpenID Connect для учетных записей служб» .
Нажмите «Продолжить» .
Нажмите «Готово» .
Выберите созданную вами учетную запись службы из списка учетных записей служб и выберите «Управление ключами» в меню «Действия .
Выберите «Добавить ключ» > «Создать новый ключ» .
В поле « Тип ключа» выберите вариант JSON .
Нажмите «Создать». Будет создан JSON-файл, содержащий ключи, которые можно загрузить на ваш компьютер.
Вызовите API
HTTP
API Home Graph предоставляет HTTP-конечную точку.
- Используйте загруженный JSON-файл учетной записи службы для создания JSON-токена (JWT). Дополнительную информацию см. в разделе «Аутентификация с использованием учетной записи службы» .
- Получите токен доступа OAuth 2.0 с областью действия
https://www.googleapis.com/auth/homegraph, используя oauth2l : - Создайте JSON-запрос, используя
agentUserId. Вот пример JSON-запроса для Request Sync: - Объедините JSON-запрос Request Sync и токен в вашем HTTP POST-запросе к конечной точке Google Home Graph. Вот пример того, как выполнить запрос в командной строке с помощью
curl, в качестве теста:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "user-123" }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:requestSync"
gRPC
API Home Graph предоставляет конечную точку gRPC.
- Получите определение службы Protocol Buffers для API Home Graph.
- Для генерации клиентских заглушек для одного из поддерживаемых языков следуйте документации для разработчиков gRPC.
- Вызовите метод RequestSync .
Node.js
Клиент Google API для Node.js предоставляет привязки для API Home Graph.
- Инициализируйте службу
google.homegraph, используя учетные данные приложения по умолчанию . - Вызовите метод
requestSyncс объектом RequestSyncDevicesRequest . Он вернетPromiseс пустым объектом RequestSyncDevicesResponse .
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.requestSync({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', async: false } });
Java
Клиентская библиотека HomeGraph API для Java предоставляет привязки для HomeGraph API.
- Инициализируйте
HomeGraphApiService, используя учетные данные приложения по умолчанию . - Вызовите метод
requestSyncс объектомRequestSyncDevicesRequest. Он вернет пустой объектReportStateAndNotificationResponse.
// Get Application Default credentials. GoogleCredentials credentials = GoogleCredentials.getApplicationDefault() .createScoped(List.of("https://www.googleapis.com/auth/homegraph")); // Create Home Graph service client. HomeGraphService homegraphService = new HomeGraphService.Builder( GoogleNetHttpTransport.newTrustedTransport(), GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) .setApplicationName("HomeGraphExample/1.0") .build(); // Request sync. RequestSyncDevicesRequest request = new RequestSyncDevicesRequest().setAgentUserId("PLACEHOLDER-USER-ID").setAsync(false); homegraphService.devices().requestSync(request);
Ответы об ошибках
При вызове функции Request Sync вы можете получить один из следующих ответов об ошибке. Эти ответы поступают в виде кодов состояния HTTP.
-
400 Bad Request— Сервер не смог обработать запрос, отправленный клиентом, из-за неверного синтаксиса . Распространенные причины включают некорректный JSON или использованиеnullвместо "" для строкового значения. -
403 Forbidden— Сервер не смог обработать запрос для указанногоagentUserIdиз-за ошибки при обновлении токена. Убедитесь, что ваша конечная точка OAuth корректно отвечает на запросы обновления токена, и проверьте статус привязки учетной записи пользователя. -
404 Not Found— Запрошенный ресурс не найден, но может стать доступен в будущем. Как правило, это означает, что учетная запись пользователя не связана с Google или мы получили недействительныйagentUserId. Убедитесь, чтоagentUserIdсовпадает со значением, указанным в ответе SYNC , и что вы правильно обрабатываете намерения DISCONNECT . -
429 Too Many Requests— Превышено максимальное количество одновременных запросов синхронизации для заданногоagentUserId. Вызывающая сторона может отправить только один одновременный запрос синхронизации, если флагasyncне установлен в значение true.