Synchronisierung anfordern

„Request Sync“ löst eine SYNC-Anfrage an deine Auslieferung für alle Google-Nutzer mit Geräten aus, die mit der angegebenen agentUserId verknüpft sind, die du in der ursprünglichen SYNC-Anfrage gesendet hast. So können Sie die Geräte der Nutzer aktualisieren, ohne die Verknüpfung mit ihrem Konto aufzuheben und wieder herzustellen. Alle Nutzer, die mit dieser Kennung verknüpft sind, erhalten eine SYNC-Anfrage.

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

  • Wenn der Nutzer ein neues Gerät hinzufügt.
  • Wenn der Nutzer ein vorhandenes Gerät entfernt.
  • Wenn der Nutzer ein vorhandenes Gerät umbenennt.
  • Wenn Sie einen neuen Gerätetyp oder eine neue Eigenschaft implementieren oder eine neue Gerätefunktion hinzufügen.

Jetzt starten

So implementierst du die Anfragesynchronisierung:

Google HomeGraph API aktivieren

  1. Rufen Sie in der 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

So generieren Sie einen Dienstkontoschlüssel aus der Google Cloud Console:

Hinweis: Achten Sie darauf, dass Sie bei diesen Schritten das richtige GCP-Projekt verwenden. Das ist das Projekt, das mit Ihrer Projekt-ID smart home übereinstimmt.
  1. Rufen Sie in der 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 bietet einen HTTP-Endpunkt.

  1. Verwenden Sie die heruntergeladene JSON-Datei für das Dienstkonto, um ein JSON Web Token (JWT) zu erstellen. Weitere Informationen finden Sie unter Authentifizierung mit einem Dienstkonto.
  2. Rufen Sie mit oauth2l ein OAuth 2.0-Zugriffstoken mit dem 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 ist ein Beispiel für eine JSON-Anfrage für die Synchronisierungsanfrage:
  5. {
      "agentUserId": "user-123"
    }
  6. Kombiniere das JSON-Objekt „Request Sync“ und das Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Hier ein Beispiel für die Anfrage in der Befehlszeile mit curl als Test:
  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 bietet einen gRPC-Endpunkt.

  1. Rufen Sie die Protocol Buffers-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 Node.js-Client für Google APIs bietet Bindungen für die Home Graph API.

  1. Initialisieren Sie den Dienst google.homegraph mit Standardanmeldedaten für Anwendungen.
  2. Rufen Sie die Methode requestSync mit der RequestSyncDevicesRequest auf. Es gibt eine Promise mit einer 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 Home Graph API-Clientbibliothek für Java bietet Bindungen für die Home Graph API.

  1. Initialisieren Sie die HomeGraphApiService mit Standardanmeldedaten für Anwendungen.
  2. Rufen Sie die Methode requestSync mit dem RequestSyncDevicesRequest auf. Es wird eine leere 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

Wenn Sie „Synchronisierung anfordern“ aufrufen, erhalten Sie möglicherweise eine der folgenden Fehlerantworten. Diese Antworten haben die Form von HTTP-Statuscodes.

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