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

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

Необходимо инициировать запрос SYNC :

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

Начать

Для реализации синхронизации запросов выполните следующие шаги:

Включите API Google HomeGraph

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

    Перейдите на страницу API HomeGraph.
  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. В поле « Тип ключа» выберите вариант JSON .

  13. Нажмите «Создать». Будет создан JSON-файл, содержащий ключи, которые можно загрузить на ваш компьютер.

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

Вызовите API

HTTP

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

  1. Используйте загруженный JSON-файл учетной записи службы для создания JSON-токена (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-запроса для Request Sync:
  5. {
      "agentUserId": "user-123"
    }
  6. Объедините JSON-запрос Request Sync и токен в вашем 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

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

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

Node.js

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

  1. Инициализируйте службу google.homegraph , используя учетные данные приложения по умолчанию .
  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 предоставляет привязки для HomeGraph API.

  1. Инициализируйте HomeGraphApiService , используя учетные данные приложения по умолчанию .
  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.