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.
175

Synchronizacja żądań wyzwala żądanie SYNC na realizację u wszystkich użytkowników Google, których urządzenia mają określony powiązany agentUserId (wysłany przez Ciebie w pierwotnym żądaniu SYNC). W ten sposób możesz aktualizować urządzenia użytkowników bez odłączania i ponownego łączenia ich kont. Wszyscy użytkownicy połączeni z tym identyfikatorem otrzymają żądanie SYNC.

Musisz wywołać żądanie SYNC:

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

Pierwsze kroki

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

Włącz interfejs Google HomeGraph API

  1. W konsoli Google Cloud Platform otwórz stronę HomeGraph API.

    Wejdź na stronę HomeGraph API
  2. Wybierz projekt, który pasuje do identyfikatora Twojego projektu inteligentnego domu.
  3. Kliknij WŁĄCZ.

Tworzenie klucza konta usługi

Aby wygenerować klucz konta usługi z konsoli GCP, wykonaj te czynności:

Uwaga: podczas wykonywania tych czynności upewnij się, że używasz odpowiedniego projektu GCP. To jest projekt zgodny z identyfikatorem Twojego inteligentnego domu.
  1. W konsoli GCP 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 konta usługi.

  6. W polu Typ klucza wybierz opcję JSON.

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

Wywoływanie interfejsu API

HTTP

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

  1. Użyj tokena JSON pobranego konta usługi, aby utworzyć token sieciowy JSON (JWT). Więcej informacji znajdziesz w artykule Uwierzytelnianie za pomocą 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 za pomocą agentUserId. Oto przykładowe żądanie JSON synchronizacji żądań:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Połącz kod JSON żądania synchronizacji i token w żądaniu HTTP POST z punktem końcowym Google Home Graph. Ten przykład pokazuje, jak wysłać żądanie w wierszu poleceń przy użyciu 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 buforów protokołu dla interfejsu Home Graph API.
  2. Wykonaj instrukcje podane w dokumentacji dla deweloperów gRPC, aby wygenerować klucze klienta dla jednego z obsługiwanych języków.
  3. Wywołaj metodę RequestSync.

Node.js

Klient Node.js interfejsów API Google zapewnia powiązania z interfejsem Home Graph API.

  1. zainicjuj usługę google.homegraph przy użyciu domyślnych danych logowania aplikacji.
  2. Wywołaj metodę requestSync za pomocą RequestSyncDevicesRequest. Zwraca Promise z pustym RequestRequestDevicesResponse.
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 zapewnia powiązania z Home Graph API.

  1. Zainicjuj interfejs 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ą są nieprawidłowy format JSON lub użycie ciągu null zamiast „” jako wartości ciągu.
  • 403 Forbidden – serwer nie mógł przetworzyć żądania dla agentUserId z powodu błędu podczas odświeżania tokena. Sprawdź, czy punkt końcowy OAuth prawidłowo odpowiada na prośby o token, aby odświeżyć żądania dotyczące tokenów, i sprawdź stan połączenia konta 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 kontem Google lub otrzymaliśmy nieprawidłową wartość agentUserId. Upewnij się, że agentUserId odpowiada wartości podanej w odpowiedzi SYNC i że obsługujesz intencje DISCONNECT.
  • 429 Too Many Requests – maksymalna liczba równoczesnych żądań synchronizacji dla określonego zasobu agentUserId została przekroczona. Rozmówca może wysłać tylko jedno żądanie synchronizacji, chyba że flaga async ma wartość Prawda.