Synchronisierung anfordern

„Synchronisierung anfordern“ löst für jeden Google-Nutzer eine SYNC-Anfrage an Ihre Auftragsausführung aus mit Geräten, die die angegebene agentUserId, die mit ihnen verknüpft sind (die Sie in der ursprünglichen SYNC-Anfrage gesendet. So können Sie die Geräte ohne die Verknüpfung des Kontos aufzuheben oder es wieder zu verknüpfen. Alle damit verknüpften Nutzer ID eine SYNC-Anfrage erhält.

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

  • Der Nutzer fügt ein neues Gerät hinzu.
  • Der Nutzer entfernt ein vorhandenes Gerät.
  • Ob der Nutzer ein vorhandenes Gerät umbenennt.
  • Du implementierst einen neuen Gerätetyp oder eine neue Eigenschaft oder fügst eine neue Gerätefunktion hinzu.

Erste Schritte

So implementieren Sie 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

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

Hinweis: Achten Sie darauf, dass Sie bei der Ausführung das richtige GCP-Projekt verwenden. führen Sie diese Schritte aus. Dies ist das Projekt, das Ihrer smart home-Projekt-ID entspricht.
  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 Neues Dienstkonto.
  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 aus. <ph type="x-smartling-placeholder"></ph> Ersteller von Dienstkonto-Token.

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

  7. Klicken Sie auf Erstellen. Eine JSON-Datei, die Ihren Schlüssel enthält auf Ihren Computer herunterladen.

API aufrufen

HTTP

Die Home Graph API stellt einen HTTP-Endpunkt bereit.

  1. Verwenden Sie die heruntergeladene JSON-Datei des Dienstkontos, um eine JSON-Webdatei zu erstellen Token (JWT). Weitere Informationen finden Sie unter <ph type="x-smartling-placeholder"></ph> Authentifizierung mit einem Dienstkonto.
  2. Fordern Sie ein OAuth 2.0-Zugriffstoken mit der https://www.googleapis.com/auth/homegraph Bereich verwendet oauth2l:
  3. oauth2l fetch --credentials service-account.json \
      --scope https://www.googleapis.com/auth/homegraph
    
  4. Erstellen Sie die JSON-Anfrage mit agentUserId. Hier ist ein Beispiel für eine JSON-Anfrage für die Synchronisierungsanfrage:
  5. {
      "agentUserId": "user-123"
    }
    
  6. Kombiniere die JSON-Datei für die Anfragesynchronisierung und das Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt senden. Hier ist ein Beispiel dafür, um die Anfrage in die Befehlszeile mit curl zu stellen, wie 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 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 RequestSyncDevicesRequest auf. Sie gibt ein 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 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 wird möglicherweise eine der folgenden Fehlermeldungen angezeigt. Diese Antworten werden in Form von HTTP-Statuscodes ausgegeben.

  • 400 Bad Request: Der Server konnte die Datei nicht verarbeiten. Die Anfrage, die vom Client aufgrund einer ungültigen Syntax gesendet wurde Häufige Ursachen Fehlerhaftes JSON einschließen oder null anstelle von "" verwenden für einen Stringwert.
  • 403 Forbidden: Der Server konnte Folgendes nicht verarbeiten: die Anfrage für die angegebene agentUserId aufgrund eines Fehlers während Aktualisieren des Tokens Prüfen Sie, ob Ihr OAuth-Endpunkt antwortet um Tokenanfragen zu aktualisieren und die Kontoverknüpfung des Nutzers zu prüfen Status.
  • 404 Not Found – Die angeforderte Ressource konnte nicht erstellt werden. gefunden, aber möglicherweise in Zukunft verfügbar sein. In der Regel bedeutet dies, dass Das Nutzerkonto ist nicht mit Google verknüpft oder wir haben eine ungültige agentUserId Achten Sie darauf, dass agentUserId mit dem Wert in SYNC-Antwort senden und DISCONNECT-Intents verarbeiten.
  • 429 Too Many Requests: Maximale Anzahl gleichzeitiger Synchronisierungen Anfragen wurden für die angegebenen agentUserId überschritten. Einen Anrufer kann nur eine Synchronisierungsanfrage gleichzeitig senden, es sei denn, die async auf "true" gesetzt ist.