Synchronisierung anfordern

Klasse

Die Anfragesynchronisierung löst für jeden Google-Nutzer mit Geräten, auf denen die angegebene agentUserId (die Sie in der ursprünglichen SYNC-Anfrage gesendet haben) eine SYNC-Anfrage an Ihre Auftragsausführung aus. So können Sie die Geräte der Nutzer aktualisieren, ohne die Verknüpfung des Kontos aufzuheben oder es wieder zu verknüpfen. Alle Nutzer, die mit dieser ID verknüpft sind, erhalten eine SYNC-Anfrage.

Sie müssen eine SYNC-Anfrage auslösen:

  • Der Nutzer fügt ein neues Gerät hinzu.
  • Wenn der Nutzer ein vorhandenes Gerät entfernt.
  • Wenn der Nutzer ein vorhandenes Gerät umbenennt.
  • Wenn du einen neuen Gerätetyp oder eine neue Trait implementierst oder eine neue Gerätefunktion hinzufügst.

Erste Schritte

Führen Sie die folgenden Schritte aus, um die Anfragesynchronisierung zu implementieren:

Google HomeGraph API aktivieren

  1. Rufen Sie in Google Cloud Console die Seite HomeGraph API auf.

    Zur Seite „HomeGraph API“
  2. Wählen Sie das Projekt aus, das Ihrer smart home-Projekt-ID entspricht.
  3. Klicken Sie auf AKTIVIEREN.

Dienstkontoschlüssel erstellen

Folgen Sie dieser Anleitung, um einen Dienstkontoschlüssel aus Google Cloud Console zu generieren:

Hinweis: Achten Sie darauf, dass Sie das richtige GCP-Projekt verwenden, wenn Sie diese Schritte ausführen. Dies ist das Projekt, das Ihrer smart home-Projekt-ID entspricht.
  1. Rufen Sie in Google Cloud Console die Seite Dienstkontoschlüssel erstellen auf.

    Zur Seite Dienstkontoschlüssel erstellen
  2. Wählen Sie in der Liste Dienstkonto die Option Neues Dienstkonto aus.
  3. Geben Sie im Feld Dienstkontoname einen Namen ein.
  4. Geben Sie im Feld Dienstkonto-ID eine ID ein.
  5. Wählen Sie in der Liste Rolle die Option Dienstkonten > Ersteller von Dienstkonto-Tokens aus.

  6. Wählen Sie als Schlüsseltyp die Option JSON aus.

  7. Klicken Sie auf Erstellen. Eine JSON-Datei mit Ihrem Schlüssel wird auf Ihren Computer heruntergeladen.

API aufrufen

HTTP

Die Home Graph API stellt einen HTTP-Endpunkt bereit.

  1. Verwenden Sie die heruntergeladene JSON-Datei des Dienstkontos, um ein JSON Web Token (JWT) zu erstellen. Weitere Informationen findest du unter Authentifizierung mit einem Dienstkonto.
  2. Rufen Sie mit oauth2l ein OAuth 2.0-Zugriffstoken im Bereich https://www.googleapis.com/auth/homegraph ab:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Erstellen Sie die JSON-Anfrage mit der agentUserId. Hier sehen Sie eine Beispiel-JSON-Anfrage für die Anfragesynchronisierung:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Kombinieren Sie „Request Sync JSON“ mit dem Token in Ihrer HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Hier sehen Sie ein Beispiel dafür, wie Sie die Anfrage mit curl in der Befehlszeile als Test stellen:
  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

Die Home Graph API stellt einen gRPC-Endpunkt bereit.

  1. Rufen Sie die Protokollzwischenspeicher-Dienstdefinition für die Home Graph API ab.
  2. Folgen Sie der gRPC-Entwicklerdokumentation, um Client-Stubs für eine der unterstützten Sprachen zu generieren.
  3. Rufen Sie die Methode RequestSync auf.

Node.js

Der Google APIs-Node.js-Client stellt Bindungen für die Home Graph API bereit.

  1. Initialisieren Sie den google.homegraph-Dienst mit den Standardanmeldedaten für Anwendungen.
  2. Rufen Sie die Methode requestSync mit der RequestSyncDevicesRequest auf. Sie gibt ein Promise mit einem leeren RequestSyncDevicesResponse zurück.
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

Die HomeGraph API-Clientbibliothek für Java enthält Bindungen für die Home Graph API.

  1. Initialisieren Sie HomeGraphApiService mit den Standardanmeldedaten für Anwendungen.
  2. Rufen Sie die Methode requestSync mit RequestSyncDevicesRequest auf. Es wird ein leeres ReportStateAndNotificationResponse zurückgegeben.
// 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);
    

Fehlerantworten

Beim Aufrufen von "Request Sync" kann eine der folgenden Fehlerantworten angezeigt werden. Diese Antworten werden in Form von HTTP-Statuscodes ausgegeben.

  • 400 Bad Request: Der Server konnte die vom Client gesendete Anfrage aufgrund einer ungültigen Syntax nicht verarbeiten. Häufige Ursachen sind fehlerhafte JSON-Daten oder die Verwendung von null anstelle von „“ für einen Stringwert.
  • 403 Forbidden: Der Server konnte die Anfrage für den angegebenen agentUserId aufgrund eines Fehlers beim Aktualisieren des Tokens nicht verarbeiten. Achten Sie darauf, dass Ihr OAuth-Endpunkt korrekt auf Aktualisierungstokenanfragen reagiert und prüfen Sie den Kontoverknüpfungsstatus des Nutzers.
  • 404 Not Found: Die angeforderte Ressource wurde nicht gefunden, ist aber möglicherweise in Zukunft verfügbar. In der Regel bedeutet dies, dass das Nutzerkonto nicht mit Google verknüpft ist oder wir eine ungültige agentUserId erhalten haben. Prüfen Sie, ob agentUserId mit dem Wert in der SYNC-Antwort übereinstimmt und DISCONNECT-Intents ordnungsgemäß verarbeiten.
  • 429 Too Many Requests: Die maximale Anzahl gleichzeitiger Synchronisierungsanfragen wurde für die angegebene agentUserId überschritten. Ein Aufrufer darf nur eine einzige Synchronisierungsanfrage gleichzeitig senden, es sei denn, das Flag async ist auf „true“ gesetzt.