Request Sync отправляет запрос SYNC на выполнение для любого пользователя Google с устройствами, с которыми связан указанный идентификатор agentUserId (который вы отправили в исходном запросе SYNC). Это позволяет обновлять устройства пользователей, не отменяя и не восстанавливая связь с их аккаунтами. Все пользователи, связанные с этим идентификатором, получат запрос SYNC.
Вам необходимо активировать запрос SYNC:
- Если пользователь добавляет новое устройство.
- Если пользователь удаляет существующее устройство.
- Если пользователь переименовывает существующее устройство.
- Если вы добавляете новый тип устройства, признак или функцию.
Начать
Чтобы реализовать Request Sync, выполните следующие действия:
Включите Google HomeGraph API
-
В Google Cloud Console перейдите на страницу HomeGraph API.
Перейти на страницу HomeGraph API - Выберите проект, соответствующий идентификатору проекта smart home.
- Нажмите Включить.
Как создать ключ сервисного аккаунта
Чтобы создать ключ сервисного аккаунта в Google Cloud Console, выполните следующие действия:
-
В Google Cloud Console перейдите на страницу Service accounts (Сервисные аккаунты).
Откройте страницу Сервисные аккаунты.Возможно, вам потребуется выбрать проект, прежде чем вы перейдете на страницу "Сервисные аккаунты".
Нажмите Create service account (Создать сервисный аккаунт).
В поле Service account name (Название сервисного аккаунта) введите название.
В поле Service account ID (Идентификатор сервисного аккаунта) введите идентификатор.
В поле Service account description (Описание сервисного аккаунта) введите описание.
Нажмите кнопку Создать и продолжить.
В раскрывающемся списке Роль выберите Сервисные аккаунты > Создатель токенов идентификации OpenID Connect для сервисных аккаунтов.
Нажмите Продолжить.
Нажмите Готово.
Выберите только что созданный сервисный аккаунт из списка и в меню Действия нажмите Управление ключами.
Нажмите Add key (Добавить ключ) > Create new key (Создать ключ).
В поле Key type (Тип ключа) выберите JSON.
Нажмите Создать. На ваш компьютер будет скачан JSON-файл с ключом.
Вызов API
HTTP
Home Graph API предоставляет конечную точку HTTP,
- Используйте скачанный JSON-файл сервисного аккаунта, чтобы создать веб-токен JSON (JWT). Подробнее об аутентификации с помощью сервисного аккаунта…
- Получите токен доступа OAuth 2.0 с областью действия
https://www.googleapis.com/auth/homegraph, используя oauth2l: - Создайте запрос JSON с помощью
agentUserId. Вот пример запроса JSON для Request Sync: - Объедините JSON-код запроса на синхронизацию и токен в 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
Home Graph API предоставляет конечную точку gRPC.
- Получите определение сервиса буферов протокола для Home Graph API.
- Следуйте инструкциям в документации для разработчиков gRPC, чтобы создать заглушки клиента для одного из поддерживаемых языков.
- Вызовите метод RequestSync.
Node.js
Клиент Google API Node.js предоставляет привязки для Home Graph API.
- Инициализируйте сервис
google.homegraph, используя Application Default Credentials. - Вызовите метод
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 предоставляет привязки для Home Graph API.
- Инициализируйте
HomeGraphApiServiceс помощью Application Default Credentials. - Вызовите метод
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.