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