Запросить синхронизацию

Запрос Sync вызывает запрос SYNC к вашему сервису выполнения для любого пользователя Google, у которого есть устройства, связанные с указанным agentUserId (который вы отправили в исходном запросе SYNC). Это позволит вам обновлять устройства пользователей, не отменяя связь с их аккаунтами и не устанавливая ее заново. Все пользователи, связанные с этим идентификатором, получат запрос SYNC.

Вы должны активировать запрос SYNC:

  • Если пользователь добавит новое устройство.
  • Если пользователь удалит существующее устройство.
  • Если пользователь переименовал существующее устройство.
  • Если вы добавили новый тип устройства, признак или функцию.

Начать

Чтобы реализовать функцию "Запрос синхронизации", выполните следующие действия:

Как включить Google HomeGraph API

  1. В Google Cloud Console перейдите на страницу HomeGraph API.

    Перейти на страницу HomeGraph API
  2. Выберите проект, соответствующий идентификатору проекта smart home.
  3. Нажмите Включить.

Как создать ключ сервисного аккаунта

Чтобы создать ключ сервисного аккаунта в Google Cloud Console, выполните следующие действия:

Примечание. При выполнении этих действий убедитесь, что вы используете правильный проект GCP. Это проект, соответствующий идентификатору проекта smart home.
  1. В Google Cloud Console перейдите на страницу Сервисные аккаунты.

    Перейдите на страницу "Сервисные аккаунты".

    Возможно, вам потребуется выбрать проект, прежде чем вы перейдете на страницу "Сервисные аккаунты".

  2. Нажмите Создать сервисный аккаунт.

  3. В поле Название сервисного аккаунта введите название.

  4. В поле Идентификатор сервисного аккаунта введите идентификатор.

  5. В поле Описание сервисного аккаунта введите описание.

  6. Нажмите кнопку Создать и продолжить.

  7. В раскрывающемся списке Роль выберите Сервисные аккаунты > Создатель токена идентификации OpenID Connect сервисного аккаунта.

  8. Нажмите Продолжить.

  9. Нажмите Готово.

  10. Выберите созданный сервисный аккаунт из списка и нажмите Управление ключами в меню Действия.

  11. Нажмите Добавить ключ > Создать ключ.

  12. В поле Key type (Тип ключа) выберите JSON.

  13. Нажмите Создать. На ваш компьютер будет скачан JSON-файл с ключом.

Подробные инструкции и информацию о создании ключей сервисных аккаунтов можно найти в статье Как создавать и удалять ключи сервисных аккаунтов на сайте Справочного центра консоли Google Cloud.

Вызов API

HTTP

Home Graph API предоставляет конечную точку HTTP

  1. Используйте скачанный JSON-файл сервисного аккаунта, чтобы создать токен доступа, использующий стандарт JSON Web Token (JWT). Подробнее об аутентификации с помощью сервисного аккаунта…
  2. Получите токен доступа OAuth 2.0 с областью действия https://www.googleapis.com/auth/homegraph, используя oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Создайте запрос JSON с помощью agentUserId. Ниже приведен пример запроса JSON для функции "Запрос синхронизации".
  5. {
      "agentUserId": "user-123"
    }
  6. Объедините JSON-код запроса синхронизации и токен в HTTP-запросе POST к конечной точке Google Home Graph. Вот пример того, как сделать запрос в командной строке с помощью curl в качестве теста:
  7. 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.

  1. Получите определение сервиса Protocol Buffers для Home Graph API.
  2. Следуйте инструкциям в документации для разработчиков gRPC, чтобы создать заглушки клиента для одного из поддерживаемых языков.
  3. Вызовите метод RequestSync.

Node.js

Клиент API Google для Node.js предоставляет привязки для Home Graph API.

  1. Инициализируйте сервис google.homegraph, используя Application Default Credentials.
  2. Вызовите метод 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.

  1. Инициализируйте HomeGraphApiService, используя Application Default Credentials.
  2. Вызовите метод 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.