Witamy w Google Home Developer Center – nowym miejscu, z którego dowiesz się, jak tworzyć inteligentne działania domowe. Uwaga: nadal będziesz tworzyć działania w konsoli Actions.

Poproś o synchronizację

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Kliknij, aby dodać

Synchronizacja żądań uruchamia żądanie SYNC dla Twojej realizacji zamówień w przypadku każdego użytkownika Google z urządzeniami, które mają określone konto agentUserId (wysyłane przez Ciebie w pierwotnym żądaniu SYNC). Dzięki temu możesz aktualizować urządzenia użytkowników bez rozłączania i ponownego łączenia ich kont. Wszyscy użytkownicy powiązani z tym identyfikatorem otrzymają żądanie SYNC.

Musisz wysłać żądanie SYNC:

  • Jeśli użytkownik doda nowe urządzenie
  • Usuwając dotychczasowe urządzenie.
  • Jeśli użytkownik zmieni nazwę istniejącego urządzenia.
  • Jeśli implementujesz nowy typ urządzenia, przypisujesz mu typ lub dodajesz nową funkcję.

Pierwsze kroki

Aby wdrożyć synchronizację żądań, wykonaj te czynności:

Włącz Google HomeGraph API

  1. W Google Cloud Platform Console przejdź na stronę HomeGraph API.

    Otwórz stronę HomeGraph API
  2. Wybierz projekt zgodny z identyfikatorem projektu smart home.
  3. Kliknij WŁĄCZ.

Tworzenie klucza konta usługi

Aby wygenerować klucz konta usługi z GCP Console:

Uwaga: podczas wykonywania tych czynności upewnij się, że używasz właściwego projektu GCP. To jest projekt zgodny z Twoim identyfikatorem projektu smart home.
  1. W aplikacji GCP Console otwórz stronę Utwórz klucz konta usługi.

    Otwórz stronę tworzenia klucza konta usługi
  2. Z listy Konto usługi wybierz Nowe konto usługi.
  3. W polu Nazwa konta usługi wpisz nazwę.
  4. W polu Identyfikator konta usługi wpisz identyfikator.
  5. Z listy Rola wybierz Konta usługi > Twórca tokenów kont usługi.

  6. W polu Typ klucza wybierz opcję JSON.

  7. Kliknij Utwórz. Plik JSON zawierający klucz pobrany na Twój komputer.

Wywoływanie interfejsu API

HTTP

Home Graph API udostępnia punkt końcowy HTTP.

  1. Za pomocą pobranego pliku JSON konta usługi utwórz token sieciowy JSON (JWT). Więcej informacji znajdziesz w artykule Uwierzytelnianie przy użyciu konta usługi.
  2. Uzyskaj token dostępu OAuth 2.0 z zakresem https://www.googleapis.com/auth/homegraph za pomocą oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Utwórz żądanie JSON z agentUserId. Oto przykładowe żądanie JSON do synchronizacji żądań:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Połącz JSON żądania synchronizacji i token w żądaniu HTTP POST z punktem końcowym Google Home Graph. Oto przykład, jak wykonać żądanie z poziomu wiersza poleceń 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 udostępnia punkt końcowy gRPC.

  1. Pobierz definicję usługi buforowania protokołu dla interfejsu Home Graph API.
  2. Postępuj zgodnie z dokumentacją dla deweloperów gRPC, aby wygenerować namiastki klienta dla jednego z obsługiwanych języków.
  3. Wywołaj metodę RequestSync.

Node.js

Klient Node.js interfejsu API Google API udostępnia powiązania interfejsu Home Graph API.

  1. Zainicjuj usługę google.homegraph przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę requestSync za pomocą żądania RequestSyncDevicesRequest. Zwraca Promise z pustym elementem 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

Biblioteka klienta interfejsu HomeGraph API dla języka Java udostępnia powiązania interfejsu Home Graph API.

  1. Zainicjuj aplikację HomeGraphApiService przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę requestSync za pomocą metody RequestSyncDevicesRequest. Zwraca pusty element 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);
    

Odpowiedzi na błędy

Podczas wywoływania żądania synchronizacji możesz zobaczyć jedną z poniższych odpowiedzi na błędy. Odpowiedzi te mają postać kodów stanu HTTP.

  • 400 Bad Request – serwer nie może przetworzyć żądania wysłanego przez klienta z powodu nieprawidłowej składni. Częstą przyczyną jest zniekształcony kod JSON lub użycie wartości null zamiast „” w przypadku wartości ciągu znaków.
  • 403 Forbidden – serwer nie może przetworzyć żądania dla podanego agentUserId z powodu błędu podczas odświeżania tokena. Sprawdź, czy punkt końcowy OAuth odpowiada prawidłowo, aby odświeżać żądania tokenów i sprawdzać stan połączenia kont użytkownika.
  • 404 Not Found – nie udało się znaleźć żądanego zasobu, ale może on być dostępny w przyszłości. Zwykle oznacza to, że konto użytkownika nie jest połączone z Google lub otrzymaliśmy nieprawidłowe żądanie agentUserId. Sprawdź, czy agentUserId pasuje do wartości w odpowiedzi SYNC i czy obsługujesz intencje DISCONNECT.
  • 429 Too Many Requests – maksymalna liczba równoczesnych żądań synchronizacji dla danego zasobu agentUserId została przekroczona. Element wywołujący może wysłać tylko jedno żądanie synchronizacji jednocześnie, chyba że flaga async ma wartość Prawda.