Benachrichtigungen ermöglichen es deiner Cloud-to-cloud-Integration, Google Assistant zu verwenden, um Nutzer über wichtige gerätebezogene Ereignisse oder Änderungen zu informieren. Du kannst Benachrichtigungen implementieren, um Nutzer über zeitnahe Geräteereignisse zu informieren, z. B. wenn jemand an der Tür ist, oder um über eine angeforderte Änderung des Gerätestatus zu berichten, z. B. wenn ein Türschloss erfolgreich verriegelt wurde oder klemmt.
Ihre Cloud-to-cloud-Integration kann die folgenden Arten von Benachrichtigungen an Nutzer senden:
Proaktive Benachrichtigungen: Der Nutzer wird über ein smart home-Geräteereignis benachrichtigt, ohne dass er zuvor eine Anfrage an seine Geräte gestellt hat, z. B. wenn es an der Tür klingelt.
Folgeantworten: Eine Bestätigung, dass eine Gerätebefehlsanfrage erfolgreich war oder fehlgeschlagen ist, z. B. beim Verriegeln einer Tür. Verwenden Sie diese Benachrichtigungen für Gerätebefehle, deren Ausführung einige Zeit in Anspruch nimmt. Folgeantworten werden nur unterstützt, wenn Gerätebefehlsanfragen von Smart Speakern und Smart Displays gesendet werden.
Assistant stellt diese Benachrichtigungen Nutzern als Ansagen auf Smart Speakern und Smart Displays zur Verfügung. Proaktive Benachrichtigungen sind standardmäßig deaktiviert. Nutzer können alle proaktiven Benachrichtigungen über die Google Home app (GHA) aktivieren oder deaktivieren.
Ereignisse, die Benachrichtigungen auslösen
Wenn Geräteereignisse auftreten, sendet deine Auftragsausführung eine Benachrichtigungsanfrage an Google. Die von deiner Cloud-to-cloud-Integration unterstützten Geräteeigenschaften bestimmen, welche Arten von Benachrichtigungsereignissen verfügbar sind und welche Daten du in diese Benachrichtigungen aufnehmen kannst.
Die folgenden Attribute unterstützen proaktive Benachrichtigungen:
| Trait | Ereignisse |
|---|---|
| ObjectDetection | Vom Gerät erkannte Objekte, z. B. wenn ein erkanntes Gesicht an der Tür erkannt wird. Beispiel: „Alice und Bob sind an der Haustür.“ |
| RunCycle | Das Gerät schließt einen Zyklus ab. Beispiel: „Der Waschgang ist beendet.“ |
| SensorState | Das Gerät erkennt einen unterstützten Sensorstatus. Beispiel: „Der Rauchmelder erkennt Rauch.“ |
Die folgenden Eigenschaften unterstützen Folgeantworten:
| Trait | Ereignisse |
|---|---|
| LockUnlock | Abschlussstatus und Statusänderung nach Ausführung des Gerätebefehls action.devices.commands.LockUnlock. Beispiel: „Die Haustür wurde verriegelt“ oder „Die Haustür klemmt“.
|
| NetworkControl | Abschlussstatus und Statusänderung nach Ausführung des Gerätebefehls action.devices.commands.TestNetworkSpeed. Beispiel: „Dein Netzwerkgeschwindigkeitstest ist abgeschlossen. Die Downloadgeschwindigkeit des Routers im Büro beträgt aktuell 80,2 Kbit/s und die Uploadgeschwindigkeit 9,3 Kbit/s.
|
| OpenClose | Abschlussstatus und Statusänderung nach Ausführung des Gerätebefehls action.devices.commands.OpenClose. Beispiel: „Die Haustür wurde geöffnet“ oder „Die Haustür konnte nicht geöffnet werden.“
|
Alle Gerätetypen unterstützen Benachrichtigungen für die entsprechenden Attribute.
Benachrichtigungen für Ihre Cloud-zu-Cloud-Integration erstellen
Fügen Sie Ihrer Cloud-to-cloud-Integration in den folgenden Phasen Benachrichtigungen hinzu:
- Teile Google mit, ob Benachrichtigungen in deiner smart home-Geräte-App aktiviert sind. Wenn Nutzer Benachrichtigungen in deiner App aktivieren oder deaktivieren, sende eine
SYNC-Anfrage, um Google über die Änderung zu informieren. - Wenn ein relevantes Geräteereignis oder eine Statusänderung auftritt, die eine Benachrichtigung auslöst, sende eine Benachrichtigungsanfrage, indem du die Report State
reportStateAndNotificationAPI aufrufst. Wenn sich der Gerätestatus geändert hat, kannst du in deinem Report State- und Benachrichtigungsaufruf sowohl eine Status- als auch eine Benachrichtigungsnutzlast senden.
In den folgenden Abschnitten werden diese Schritte ausführlich beschrieben.
Geben Sie an, ob Benachrichtigungen in Ihrer App aktiviert sind
Nutzer können festlegen, ob sie proaktive Benachrichtigungen erhalten möchten, indem sie diese Funktion in der GHA aktivieren. In der App für dein smart home-Gerät kannst du optional auch die Möglichkeit hinzufügen, dass Nutzer Benachrichtigungen vom Gerät explizit aktivieren oder deaktivieren können, z. B. in den App-Einstellungen.
Teile Google mit, dass Benachrichtigungen für dein Gerät aktiviert sind, indem du einen Request SYNC-Aufruf ausführst, um die Gerätedaten zu aktualisieren. Du solltest immer eine SYNC-Anfrage wie diese senden, wenn Nutzer diese Einstellung in deiner App ändern.
Senden Sie in Ihrer SYNC-Antwort eine der folgenden Aktualisierungen:
- Wenn der Nutzer Benachrichtigungen in deiner Geräte-App explizit aktiviert hat oder du keine Umschaltoption anbietest, setze die Property
devices.notificationSupportedByAgentauftrue. - Wenn der Nutzer Benachrichtigungen in deiner Geräte-App explizit deaktiviert hat, setze die Property
devices.notificationSupportedByAgentauffalse.
Das folgende Snippet zeigt ein Beispiel für die Einrichtung der SYNC-Antwort:
devices: [{
id: 'device123',
...
notificationSupportedByAgent: true,
}]
Benachrichtigungsanfragen an Google senden
Damit Benachrichtigungen auf dem Assistant ausgelöst werden, sendet deine Auftragsausführung über einen Report State- und Notification API-Aufruf eine Benachrichtigungsnutzlast an den Google Home Graph.
Google HomeGraph API aktivieren
-
Rufen Sie in der Google Cloud Console die Seite HomeGraph API auf.
Zur HomeGraph API-Seite - Wählen Sie das Projekt aus, das Ihrer smart home-Projekt-ID entspricht.
- Klicken Sie auf AKTIVIEREN.
Dienstkontoschlüssel erstellen
Folgen Sie dieser Anleitung, um einen Dienstkontoschlüssel über die Google Cloud Console zu generieren:
-
Rufen Sie in der Google Cloud Console die Seite Dienstkonten auf.
Zur Seite „Dienstkonten“Möglicherweise müssen Sie ein Projekt auswählen, bevor Sie zur Seite „Dienstkonten“ weitergeleitet werden.
Klicken Sie auf Dienstkonto erstellen.
Geben Sie im Feld Dienstkontoname einen Namen ein.
Geben Sie im Feld Dienstkonto-ID eine ID ein.
Geben Sie im Feld Dienstkontobeschreibung eine Beschreibung ein.
Klicken Sie auf Erstellen und fortfahren.
Wählen Sie im Drop-down-Menü Rolle die Option Dienstkonten > Ersteller des OpenID Connect-Identitätstokens für das Dienstkonto aus.
Klicken Sie auf Weiter.
Klicken Sie auf Fertig.
Wählen Sie das gerade erstellte Dienstkonto aus der Liste der Dienstkonten aus und wählen Sie im Menü Aktionen die Option Schlüssel verwalten aus.
Wählen Sie Schlüssel hinzufügen > Neuen Schlüssel erstellen aus.
Wählen Sie als Schlüsseltyp die Option JSON aus.
Klicken Sie auf Erstellen. Eine JSON-Datei mit Ihrem Schlüssel wird auf Ihren Computer heruntergeladen.
Benachrichtigung senden
Führen Sie den Aufruf der Benachrichtigungsanfrage mit der devices.reportStateAndNotification API aus.
Ihre JSON-Anfrage muss eine eventId enthalten. Das ist eine eindeutige ID, die von Ihrer Plattform für das Ereignis generiert wird, das die Benachrichtigung auslöst. Die eventId sollte eine Zufallskennung sein, die sich bei jeder Benachrichtigungsanfrage ändert.
Fügen Sie im notifications-Objekt, das Sie in Ihrem API-Aufruf übergeben, einen priority-Wert ein, der definiert, wie die Benachrichtigung dargestellt werden soll. Das notifications-Objekt kann je nach Geräteattribut unterschiedliche Felder enthalten.
Folgen Sie einem dieser Pfade, um die Nutzlast festzulegen und die API aufzurufen:
Nutzlast für proaktive Benachrichtigungen senden
Wählen Sie zum Aufrufen der API eine Option auf einem der folgenden Tabs aus:
HTTP
Die Home Graph API bietet einen HTTP-Endpunkt.
- Verwenden Sie die heruntergeladene JSON-Datei des Dienstkontos, um ein JSON Web Token (JWT) zu erstellen. Weitere Informationen finden Sie unter Authentifizierung mit einem Dienstkonto.
- Rufen Sie mit oauth2l ein OAuth 2.0-Zugriffstoken mit dem Bereich
https://www.googleapis.com/auth/homegraphab: - Erstellen Sie die JSON-Anfrage mit dem
agentUserId. Hier ist eine JSON-Beispielanfrage für Report State und Benachrichtigung: - Kombiniere die Report State- und Benachrichtigungs-JSON-Datei und das Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Hier ein Beispiel für eine Testanfrage in der Befehlszeile mit
curl:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "ObjectDetection": { "priority": 0, "detectionTimestamp": 1534875126750, "objects": { "named": [ "Alice" ], "unclassified": 2 } } } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
Die Home Graph API bietet einen gRPC-Endpunkt.
- Rufen Sie die Protokollzwischenspeicher-Dienstdefinition für die Home Graph API ab.
- Folgen Sie der gRPC-Entwicklerdokumentation, um Client-Stubs für eine der unterstützten Sprachen zu generieren.
- Rufe die Methode ReportStateAndNotification auf.
Node.js
Der Google APIs Node.js-Client bietet Bindungen für die Home Graph API.
- Initialisieren Sie den
google.homegraph-Dienst mit Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
reportStateAndNotificationmit der ReportStateAndNotificationRequest auf. Es wird einPromisemit der ReportStateAndNotificationResponse zurückgegeben.
const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { ObjectDetection: { priority: 0, detectionTimestamp: 1534875126750, objects: { named: ['Alice'], unclassified: 2 } } } } } } } });
Java
Die HomeGraph API-Clientbibliothek für Java bietet Bindungen für die Home Graph API.
- Initialisieren Sie den
HomeGraphApiServicemit Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
reportStateAndNotificationmit demReportStateAndNotificationRequestauf. Es wird einReportStateAndNotificationResponsezurü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(); // Build device notification payload. Map<?, ?> notifications = Map.of( "ObjectDetection", Map.of( "priority", 0, "detectionTimestamp", 1534875126, "objects", Map.of("named", List.of("Alice"), "unclassifed", 2))); // Send notification. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", notifications)))); homegraphService.devices().reportStateAndNotification(request);
Nutzlast für eine Folgeantwort senden
Die Nutzlast für eine Folgeantwort enthält den Status der Anfrage, Fehlercodes für Ereignisfehler (falls zutreffend) und die gültige followUpToken, die während der Intent-Anfrage EXECUTE angegeben wurde. Die followUpToken muss innerhalb von fünf Minuten verwendet werden, damit sie gültig bleibt und die Antwort der ursprünglichen Anfrage richtig zugeordnet werden kann.
Das folgende Snippet zeigt ein Beispiel für eine EXECUTE-Anfragenutzlast mit einem followUpToken-Feld.
{
"requestId": "ff36a3cc-ec34-11e6-b1a0-64510650abcf",
"inputs": [{
"intent": "action.devices.EXECUTE",
"payload": {
"commands": [{
"devices": [{
"id": "123",
}],
"execution": [{
"command": "action.devices.commands.TestNetworkSpeed",
"params": {
"testDownloadSpeed": true,
"testUploadSpeed": false,
"followUpToken": "PLACEHOLDER"
}
}]
}]
}
}]
};
Google verwendet die followUpToken, um die Benachrichtigung nur auf dem Gerät auszugeben, mit dem der Nutzer ursprünglich interagiert hat, und nicht auf allen Geräten des Nutzers.
Wählen Sie zum Aufrufen der API eine Option auf einem der folgenden Tabs aus:
HTTP
Die Home Graph API bietet einen HTTP-Endpunkt.
- Verwenden Sie die heruntergeladene JSON-Datei des Dienstkontos, um ein JSON Web Token (JWT) zu erstellen. Weitere Informationen finden Sie unter Authentifizierung mit einem Dienstkonto.
- Rufen Sie mit oauth2l ein OAuth 2.0-Zugriffstoken mit dem Bereich
https://www.googleapis.com/auth/homegraphab: - Erstellen Sie die JSON-Anfrage mit dem
agentUserId. Hier ist eine JSON-Beispielanfrage für Report State und Benachrichtigung: - Kombiniere die Report State- und Benachrichtigungs-JSON-Datei und das Token in deiner HTTP-POST-Anfrage an den Google Home Graph-Endpunkt. Hier ein Beispiel für eine Testanfrage in der Befehlszeile mit
curl:
oauth2l fetch --credentials service-account.json \ --scope https://www.googleapis.com/auth/homegraph
{ "agentUserId": "PLACEHOLDER-USER-ID", "eventId": "PLACEHOLDER-EVENT-ID", "requestId": "PLACEHOLDER-REQUEST-ID", "payload": { "devices": { "notifications": { "PLACEHOLDER-DEVICE-ID": { "NetworkControl": { "priority": 0, "followUpResponse": { "status": "SUCCESS", "followUpToken": "PLACEHOLDER", "networkDownloadSpeedMbps": 23.3, "networkUploadSpeedMbps": 10.2 } } } } } } }
curl -X POST -H "Authorization: Bearer ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d @request-body.json \ "https://homegraph.googleapis.com/v1/devices:reportStateAndNotification"
gRPC
Die Home Graph API bietet einen gRPC-Endpunkt.
- Rufen Sie die Dienstdefinition für Protokollzwischenspeicher für die Home Graph API ab.
- Folgen Sie der gRPC-Entwicklerdokumentation, um Client-Stubs für eine der unterstützten Sprachen zu generieren.
- Rufe die Methode ReportStateAndNotification auf.
Node.js
Der Google APIs Node.js-Client bietet Bindungen für die Home Graph API.
- Initialisieren Sie den
google.homegraph-Dienst mit Standardanmeldedaten für Anwendungen. - Rufen Sie die Methode
reportStateAndNotificationmit der ReportStateAndNotificationRequest auf. Es wird einPromisemit der ReportStateAndNotificationResponse zurückgegeben.
const followUpToken = executionRequest.inputs[0].payload.commands[0].execution[0].params.followUpToken; const homegraphClient = homegraph({ version: 'v1', auth: new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/homegraph' }) }); const res = await homegraphClient.devices.reportStateAndNotification({ requestBody: { agentUserId: 'PLACEHOLDER-USER-ID', eventId: 'PLACEHOLDER-EVENT-ID', requestId: 'PLACEHOLDER-REQUEST-ID', payload: { devices: { notifications: { 'PLACEHOLDER-DEVICE-ID': { NetworkControl: { priority: 0, followUpResponse: { status: 'SUCCESS', followUpToken, networkDownloadSpeedMbps: 23.3, networkUploadSpeedMbps: 10.2, } } } } } } } });
Java
Die HomeGraph API-Clientbibliothek für Java bietet Bindungen für die Home Graph API.
-
HomeGraphApiServicemit Standardanmeldedaten für Anwendungen initialisieren - Rufen Sie die Methode
reportStateAndNotificationmit demReportStateAndNotificationRequestauf. Es wird einReportStateAndNotificationResponsezurü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(); // Extract follow-up token. ExecuteRequest.Inputs executeInputs = (Inputs) executeRequest.getInputs()[0]; String followUpToken = (String) executeInputs .getPayload() .getCommands()[0] .getExecution()[0] .getParams() .get("followUpToken"); // Build device follow-up response payload. Map<?, ?> followUpResponse = Map.of( "NetworkControl", Map.of( "priority", 0, "followUpResponse", Map.of( "status", "SUCCESS", "followUpToken", followUpToken, "networkDownloadSpeedMbps", 23.3, "networkUploadSpeedMbps", 10.2))); // Send follow-up response. ReportStateAndNotificationRequest request = new ReportStateAndNotificationRequest() .setRequestId("PLACEHOLDER-REQUEST-ID") .setAgentUserId("PLACEHOLDER-USER-ID") .setEventId("PLACEHOLDER-EVENT-ID") .setPayload( new StateAndNotificationPayload() .setDevices( new ReportStateAndNotificationDevice() .setNotifications(Map.of("PLACEHOLDER-DEVICE-ID", followUpResponse)))); homegraphService.devices().reportStateAndNotification(request);
Logging
Benachrichtigungen unterstützen das Ereignis-Logging, wie unter Cloud-Logging für Cloud-zu-Cloud beschrieben. Diese Logs sind nützlich, um die Qualität der Benachrichtigungen in Ihrer Aktion zu testen und aufrechtzuerhalten.
Das folgende Schema zeigt einen notificationLog-Eintrag:
| Attribut | Beschreibung |
|---|---|
requestId |
ID der Benachrichtigungsanfrage. |
structName |
Name der Benachrichtigungsstruktur, z. B. „ObjectDetection“. |
status |
Gibt den Status der Benachrichtigung an. |
Das Feld status enthält verschiedene Status, die auf Fehler in der Benachrichtigungsnutzlast hinweisen können. Einige davon sind möglicherweise nur für Aktionen verfügbar, die noch nicht in der Produktion eingeführt wurden.
Beispiele für Status:
| Status | Beschreibung |
|---|---|
EVENT_ID_MISSING |
Gibt an, dass das erforderliche Feld eventId fehlt.
|
PRIORITY_MISSING |
Gibt an, dass ein priority-Feld fehlt.
|
NOTIFICATION_SUPPORTED_BY_AGENT_FALSE |
Gibt an, dass das Attribut notificationSupportedByAgent des benachrichtigenden Geräts, das in SYNC angegeben ist, „false“ ist.
|
NOTIFICATION_ENABLED_BY_USER_FALSE |
Gibt an, dass der Nutzer keine Benachrichtigungen auf dem benachrichtigenden Gerät in der GHA aktiviert hat. Dieser Status ist nur für Integrationen verfügbar, die noch nicht in der Produktion eingeführt wurden. |
NOTIFYING_DEVICE_NOT_IN_STRUCTURE |
Gibt an, dass der Nutzer das benachrichtigende Gerät keinem Zuhause/Gebäude zugewiesen hat. Dieser Status ist nur für Integrationen verfügbar, die noch nicht in der Produktion eingeführt wurden. |
Zusätzlich zu diesen allgemeinen Status, die für alle Benachrichtigungen gelten können, kann das Feld status gegebenenfalls auch eigenschaftsspezifische Status enthalten (z. B. OBJECT_DETECTION_DETECTION_TIMESTAMP_MISSING).