Push-Benachrichtigungen

In diesem Dokument wird beschrieben, wie Sie Push-Benachrichtigungen verwenden, die Ihre Anwendung informieren, wenn sich eine Ressource ändert.

Übersicht

Die Admin SDK API bietet Push-Benachrichtigungen, mit denen Sie Änderungen an Ressourcen im Blick behalten können. Mit dieser Funktion können Sie die Leistung Ihrer Anwendung verbessern. Sie eliminieren zusätzliche Netzwerk- und Rechenkosten, die mit dem Abfragen von Ressourcen verbunden sind, um festzustellen, ob sie sich geändert haben. Sobald sich eine beobachtete Ressource ändert, wird Ihre Anwendung über die Admin SDK API benachrichtigt.

Damit Sie Push-Benachrichtigungen verwenden können, müssen Sie zwei Dinge tun:

  • Richten Sie die Empfänger-URL oder den Callback-Empfänger „Webhook“ ein.

    Dies ist ein HTTPS-Server, der die API-Benachrichtigungsnachrichten verarbeitet, die bei einer Ressourcenänderung ausgelöst werden.

  • Richten Sie einen (Benachrichtigungskanal) für jeden Ressourcenendpunkt ein, den Sie beobachten möchten.

    Ein Kanal gibt Routinginformationen für Benachrichtigungsnachrichten an. Im Rahmen der Kanaleinrichtung müssen Sie die URL angeben, unter der Sie Benachrichtigungen erhalten möchten. Jedes Mal, wenn sich die Ressource eines Kanals ändert, sendet die Admin SDK API eine Benachrichtigungsnachricht als POST-Anfrage an diese URL.

Derzeit unterstützt die Admin SDK API Benachrichtigungen über Änderungen an der Ressource Aktivitäten.

Benachrichtigungskanäle erstellen

Wenn Sie Push-Benachrichtigungen anfordern möchten, müssen Sie für jede Ressource, die Sie überwachen möchten, einen Benachrichtigungskanal einrichten. Nach der Einrichtung der Benachrichtigungskanäle informiert die Admin SDK API Ihre Anwendung über Änderungen an beobachteten Ressourcen.

Wiedergabeanfragen stellen

Jeder Watchable Admin SDK API-Ressource ist eine watch-Methode bei einem URI im folgenden Format zugeordnet:

https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch

Wenn Sie einen Benachrichtigungskanal für Nachrichten zu Änderungen an einer bestimmten Ressource einrichten möchten, senden Sie eine POST-Anfrage an die watch-Methode für die Ressource.

Jeder Benachrichtigungskanal ist sowohl mit einem bestimmten Nutzer als auch mit einer bestimmten Ressource (oder einer Gruppe von Ressourcen) verknüpft. Eine watch-Anfrage ist nur dann erfolgreich, wenn der aktuelle Nutzer oder das aktuelle Dienstkonto Eigentümer der Ressource ist oder die Berechtigung zum Zugriff darauf hat.

Beispiele

Alle Überwachungsanfragen für die Aktivitätsressource haben das folgende allgemeine Format:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/userKey or all/applications/applicationName/watch
Authorization: Bearer auth_token_for_current_user
Content-Type: application/json

{
  "id": "01234567-89ab-cdef-0123456789ab", // Your channel ID.
  "type": "web_hook",
  "address": "https://mydomain.com/notifications", // Your receiving URL.
  ...
  "token": "target=myApp-myFilesChannelDest", // (Optional) Your channel token.
  "payload": true, // (Optional) Whether to include the payload (message body) in notifications.
  "expiration": 3600 // (Optional) Your requested channel expiration time.
}

Sie können die Parameter userKey, applicationName, eventName und filters verwenden, um nur Benachrichtigungen zu bestimmten Ereignissen, Nutzern oder Anwendungen zu erhalten.

Hinweis:In den folgenden Beispielen wird der Anfragetext zur Verdeutlichung weggelassen.

Behalten Sie alle Administratoraktivitäten im Blick:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch

Achten Sie auf alle Docs-Aktivitäten:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch

Administratoraktivitäten eines bestimmten Nutzers beobachten:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch

Sie können nach einem bestimmten Ereignis suchen, z. B. nach dem Ändern des Passworts eines Nutzers:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD

So verfolgen Sie Änderungen an einem bestimmten Dokument:

POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch?eventName=EDIT&filters==doc_id=123456abcdef

Erforderliche Properties

Bei jeder watch-Anfrage müssen Sie die folgenden Felder angeben:

  • Ein id-Attributstring, der diesen neuen Benachrichtigungskanal innerhalb Ihres Projekts eindeutig identifiziert. Wir empfehlen die Verwendung einer Universally Unique Identifier (UUID) oder eines ähnlichen eindeutigen Strings. Maximale Länge: 64 Zeichen.

    Der von Ihnen festgelegte ID-Wert wird im X-Goog-Channel-Id-HTTP-Header jeder Benachrichtigungsnachricht, die Sie für diesen Kanal erhalten, zurückgegeben.

  • Ein type-Attribut-String, der auf den Wert web_hook festgelegt ist.

  • Ein address-Property-String, der auf die URL festgelegt ist, die Benachrichtigungen für diesen Benachrichtigungskanal überwacht und darauf reagiert. Dies ist Ihre Webhook-Callback-URL und sie muss HTTPS verwenden.

    Die Admin SDK API kann nur dann Benachrichtigungen an diese HTTPS-Adresse senden, wenn auf Ihrem Webserver ein gültiges SSL-Zertifikat installiert ist. Folgende Zertifikate sind nicht gültig:

    • selbst signierte Zertifikate.
    • von einer nicht vertrauenswürdigen Quelle signierte Zertifikate
    • gesperrte Zertifikate
    • Zertifikate, deren Inhaber nicht mit dem Zielhostnamen übereinstimmt.

Optionale Attribute

Sie können diese optionalen Felder auch in der watch-Anfrage angeben:

  • Eine token-Eigenschaft, die einen beliebigen Stringwert angibt, der als Kanaltoken verwendet werden soll. Sie können Benachrichtigungskanal-Tokens für verschiedene Zwecke verwenden. Sie können das Token beispielsweise verwenden, um zu überprüfen, ob alle eingehenden Nachrichten zu einem Kanal gehören, den Ihre Anwendung erstellt hat, um sicherzustellen, dass die Benachrichtigung nicht gefälscht wird, oder um die Nachricht basierend auf diesem Kanal an das richtige Ziel innerhalb Ihrer Anwendung weiterzuleiten. Maximale Länge: 256 Zeichen.

    Das Token ist in jedem X-Goog-Channel-Token-HTTP-Header in jeder Benachrichtigungsnachricht enthalten, die Ihre Anwendung für diesen Kanal empfängt.

    Wenn Sie Benachrichtigungskanal-Tokens verwenden, empfehlen wir Folgendes:

    • Verwenden Sie ein erweiterbares Codierungsformat, z. B. URL-Suchparameter. Beispiel: forwardTo=hr&createdBy=mobile

    • Fügen Sie keine vertraulichen Daten wie OAuth-Tokens hinzu.

  • Ein expiration-Attributstring, der auf einen Unix-Zeitstempel (in Millisekunden) des Datums und der Uhrzeit festgelegt ist, ab dem die Admin SDK API keine Nachrichten mehr für diesen Benachrichtigungskanal senden soll.

    Wenn ein Kanal ein Ablaufdatum hat, wird es in jeder Benachrichtigungsnachricht, die Ihre Anwendung für diesen Kanal empfängt, als Wert des X-Goog-Channel-Expiration-HTTP-Headers (in einem visuell lesbaren Format) angegeben.

Weitere Informationen zur Anfrage finden Sie in der API-Referenz in der Methode watch für die Ressource Aktivitäten.

Antwort auf Smartwatch

Wenn die watch-Anfrage erfolgreich einen Benachrichtigungskanal erstellt, wird der HTTP-Statuscode 200 OK zurückgegeben.

Der Nachrichtentext der Smartwatch-Antwort enthält Informationen zum gerade erstellten Benachrichtigungskanal, wie im Beispiel unten dargestellt.

{
  "kind": "api#channel",
  "id": "reportsApiId", // ID you specified for this channel.
  "resourceId": "o3hgv1538sdjfh", // ID of the watched resource.
  "resourceUri": "https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName", // Version-specific ID of the watched resource.
  "token": "target=myApp-myFilesChannelDest", // Present only if one was provided.
  "expiration": 3600, // Actual expiration time as Unix timestamp (in ms), if applicable.
}

Zusätzlich zu den Eigenschaften, die du im Rahmen deiner Anfrage gesendet hast, enthalten die zurückgegebenen Informationen auch resourceId und resourceUri, um die Ressource zu identifizieren, die auf diesem Benachrichtigungskanal angesehen wird.

Sie können die zurückgegebenen Informationen an andere Vorgänge des Benachrichtigungskanals übergeben, z. B. wenn Sie keine Benachrichtigungen mehr erhalten möchten.

Weitere Informationen zur Antwort finden Sie in der API-Referenz in der Methode watch für die Ressource Aktivitäten.

Synchronisierungsnachricht

Nachdem du einen Benachrichtigungskanal zum Überwachen einer Ressource erstellt hast, sendet die Admin SDK API eine sync-Nachricht, um anzuzeigen, dass Benachrichtigungen gestartet werden. Der Wert des X-Goog-Resource-State-HTTP-Headers für diese Nachrichten ist sync. Aufgrund von Netzwerkzeitproblemen ist es möglich, dass Sie die sync-Nachricht erhalten, bevor Sie die Antwort der watch-Methode erhalten.

Sie können die sync-Benachrichtigung ignorieren, sie aber auch verwenden. Wenn du beispielsweise den Kanal nicht behalten möchtest, kannst du die Werte X-Goog-Channel-ID und X-Goog-Resource-ID in einem Aufruf verwenden, um keine Benachrichtigungen mehr zu erhalten. Sie können die Benachrichtigung sync auch verwenden, um eine Initialisierung durchzuführen und sich auf spätere Ereignisse vorzubereiten.

Unten sehen Sie das Format der sync-Nachrichten, die die Admin SDK API an Ihre Empfänger-URL sendet.

POST https://mydomain.com/notifications // Your receiving URL.
X-Goog-Channel-ID: channel-ID-value
X-Goog-Channel-Token: channel-token-value
X-Goog-Channel-Expiration: expiration-date-and-time // In human-readable format. Present only if the channel expires.
X-Goog-Resource-ID: identifier-for-the-watched-resource
X-Goog-Resource-URI: version-specific-URI-of-the-watched-resource
X-Goog-Resource-State: sync
X-Goog-Message-Number: 1

Synchronisationsnachrichten haben immer den Wert 1 für den X-Goog-Message-Number-HTTP-Header. Jede nachfolgende Benachrichtigung für diesen Channel hat eine Nachrichtennummer, die höher als die vorherige ist. Die Nachrichtennummern sind jedoch nicht fortlaufend.

Benachrichtigungskanäle verlängern

Ein Benachrichtigungskanal kann eine Ablaufzeit haben. Der Wert wird entweder durch Ihre Anfrage oder durch interne Limits oder Standardwerte der Admin SDK API bestimmt. Dabei wird der restriktivere Wert verwendet. Das Ablaufdatum des Kanals (falls vorhanden) ist in den Informationen, die von der watch-Methode zurückgegeben werden, als Unix-Zeitstempel (in Millisekunden) enthalten. Darüber hinaus ist das Ablaufdatum und die Ablaufzeit (in visuell lesbarem Format) in jeder Benachrichtigungsnachricht enthalten, die Ihre Anwendung für diesen Kanal im HTTP-Header X-Goog-Channel-Expiration erhält.

Derzeit gibt es keine Möglichkeit, einen Benachrichtigungskanal automatisch zu verlängern. Wenn ein Kanal kurz vor seinem Ablauf steht, müssen Sie ihn durch einen neuen ersetzen. Rufen Sie dazu die Methode watch auf. Wie immer müssen Sie für die Property id des neuen Kanals einen eindeutigen Wert verwenden. Beachten Sie, dass es wahrscheinlich zu einer „Überschneidung“ kommt, wenn die beiden Benachrichtigungskanäle für dieselbe Ressource aktiv sind.

Benachrichtigungen erhalten

Jedes Mal, wenn sich eine beobachtete Ressource ändert, erhält Ihre Anwendung eine Benachrichtigung mit einer Beschreibung der Änderung. Die Admin SDK API sendet diese Nachrichten als HTTPS-POST-Anfragen an die URL, die Sie als address-Property für diesen Benachrichtigungskanal angegeben haben.

Nachrichtenformat für Benachrichtigungen interpretieren

Alle Benachrichtigungsnachrichten enthalten eine Reihe von HTTP-Headern mit X-Goog--Präfixen. Einige Benachrichtigungstypen können auch einen Nachrichtentext enthalten.

Header

Benachrichtigungsnachrichten, die von der Admin SDK API an Ihre Empfänger-URL gesendet werden, enthalten die folgenden HTTP-Header:

Header Beschreibung
Immer einblenden
X-Goog-Channel-ID UUID oder anderer eindeutiger String, den Sie zur Identifizierung dieses Benachrichtigungskanals angegeben haben.
X-Goog-Message-Number Ganzzahl, die diese Nachricht für diesen Benachrichtigungskanal identifiziert. Der Wert ist für sync-Nachrichten immer 1. Die Nachrichtennummern werden mit jeder nachfolgenden Nachricht auf dem Kanal erhöht, sind aber nicht fortlaufend.
X-Goog-Resource-ID Ein intransparenter Wert, der die beobachtete Ressource identifiziert. Diese ID ist unabhängig von API-Versionen stabil.
X-Goog-Resource-State Der neue Ressourcenstatus, der die Benachrichtigung ausgelöst hat. Mögliche Werte: sync oder ein Ereignisname.
X-Goog-Resource-URI Eine API-versionsspezifische Kennung für die überwachte Ressource.
Manchmal vorhanden
X-Goog-Channel-Expiration Datum und Uhrzeit des Ablaufs des Benachrichtigungskanals in einem für Menschen lesbaren Format. Nur vorhanden, wenn definiert.
X-Goog-Channel-Token Benachrichtigungskanal-Token, das von Ihrer Anwendung festgelegt wurde und mit dem Sie die Benachrichtigungsquelle verifizieren können. Nur vorhanden, wenn definiert.

Benachrichtigungsnachrichten für Aktivitäten enthalten im Anfragetext die folgenden Informationen:

Attribut Beschreibung
kind Hiermit wird angegeben, dass es sich um eine Aktivitätsressource handelt. Wert: der feste String „admin#reports#activity“.
id Eindeutige Kennung des Aktivitätseintrags.
id.time Zeitpunkt der Aktivität. Der Wert ist im Datums- und Zeitformat ISO 8601. Die Uhrzeit ist das vollständige Datum plus Stunden, Minuten und Sekunden im Format JJJJ-MM-TTThh:mm:ssZZZ. Beispiel: 2010-04-05T17:30:04+01:00.
id.uniqueQualifier Eindeutiger Qualifier, wenn mehrere Ereignisse zur selben Zeit stattfinden.
id.applicationName Name der Anwendung, zu der das Ereignis gehört. Folgende Werte sind möglich:
id.customerId Die eindeutige Kennung für ein Google Workspace-Konto.
actor Der Nutzer, der die Aktion ausführt.
actor.callerType Die Art des Autors, der die im Bericht aufgeführte Aktivität ausgeführt hat. In dieser Version der API ist callerType die USER- oder OAuth 2LO-Entitätsanfrage, die die im Bericht aufgeführte Aktion ausgeführt hat .
actor.email Die primäre E-Mail-Adresse des Nutzers, dessen Aktivitäten gemeldet werden.
actor.profileId Die eindeutige Google Workspace-Profil-ID des Nutzers.
ownerDomain Domain der Admin-Konsole oder des Dokumentinhabers der Docs-Anwendung. Das ist die Domain, die vom Ereignis im Bericht betroffen ist.
ipAddress IP-Adresse des Nutzers, der die Aktion ausführt. Das ist die IP-Adresse (Internet Protocol) des Nutzers bei der Anmeldung in Google Workspace, die den physischen Standort des Nutzers widerspiegeln kann oder nicht. Die IP-Adresse kann beispielsweise die Adresse des Proxyservers des Nutzers oder die Adresse eines virtuellen privaten Netzwerks (VPN) sein. Die API unterstützt IPv4 und IPv6.
events[] Aktivitätsereignisse im Bericht
events[].type Ereignistyp. Der Google Workspace-Dienst oder die Google Workspace-Funktion, die ein Administrator ändert, wird in der Property type angegeben, die ein Ereignis mithilfe der Property eventName identifiziert.
events[].name Name des Ereignisses. Dies ist der spezifische Name der Aktivität, die von der API gemeldet wird. Und jede eventName bezieht sich auf einen bestimmten Google Workspace-Dienst oder eine Google Workspace-Funktion, die von der API in Arten von Ereignissen organisiert wird.
Allgemeine Hinweise zu eventName-Anfrageparametern:
  • Wenn kein eventName angegeben ist, gibt der Bericht alle möglichen Instanzen einer eventName zurück.
  • Wenn Sie eine eventName anfordern, gibt die API-Antwort alle Aktivitäten zurück, die diese eventName enthalten. Es ist möglich, dass die zurückgegebenen Aktivitäten neben der angeforderten auch andere eventName-Properties enthalten.
events[].parameters[] Parameterwerte für verschiedene Anwendungen.
events[].parameters[].name Name des Parameters.
events[].parameters[].value Stringwert des Parameters.
events[].parameters[].intValue Ganzzahlwert des Parameters.
events[].parameters[].boolValue Boolescher Wert des Parameters.

Beispiele

Benachrichtigungsnachrichten für Aktivitätsressourcenereignisse haben im Allgemeinen folgendes Format:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 0
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 398348u3tu83ut8uu38
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret08u3rv24htgh289g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/userKey/applications/applicationName
X-Goog-Resource-State:  eventName
X-Goog-Message-Number: 10

{
  "kind": "admin#reports#activity",
  "id": {
    "time": datetime,
    "uniqueQualifier": long,
    "applicationName": string,
    "customerId": string
  },
  "actor": {
    "callerType": string,
    "email": string,
    "profileId": long
  },
  "ownerDomain": string,
  "ipAddress": string,
  "events": [
    {
      "type": string,
      "name": string,
      "parameters": [
        {
          "name": string,
          "value": string,
          "intValue": long,
          "boolValue": boolean
        }
      ]
    }
  ]
}

Beispiel für ein Ereignis für Administratoraktivitäten:

POST https://mydomain.com/notifications // Your receiving URL.
Content-Type: application/json; utf-8
Content-Length: 596
X-Goog-Channel-ID: reportsApiId
X-Goog-Channel-Token: 245t1234tt83trrt333
X-Goog-Channel-Expiration: Tue, 29 Oct 2013 20:32:02 GMT
X-Goog-Resource-ID:  ret987df98743md8g
X-Goog-Resource-URI: https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin?alt=json
X-Goog-Resource-State:  CREATE_USER
X-Goog-Message-Number: 23

{
  "kind": "admin#reports#activity",
  "id": {
    "time": "2013-09-10T18:23:35.808Z",
    "uniqueQualifier": "-0987654321",
    "applicationName": "admin",
    "customerId": "ABCD012345"
  },
  "actor": {
    "callerType": "USER",
    "email": "admin@example.com",
    "profileId": "0123456789987654321"
  },
  "ownerDomain": "apps-reporting.example.com",
  "ipAddress": "192.0.2.0",
  "events": [
    {
      "type": "USER_SETTINGS",
      "name": "CREATE_USER",
      "parameters": [
        {
          "name": "USER_EMAIL",
          "value": "liz@example.com"
        }
      ]
    }
  ]
}

Auf Benachrichtigungen reagieren

Als Erfolg können Sie einen der folgenden Statuscodes zurückgeben: 200, 201, 202, 204 oder 102.

Wenn der Dienst die API-Clientbibliothek von Google verwendet und 500,502, 503 oder 504 zurückgibt, versucht die Admin SDK API, diese mit einem exponentiellen Backoff zu wiederholen. Alle anderen Rückgabestatuscodes gelten als Fehler.

Benachrichtigungsereignisse der Admin SDK API

In diesem Abschnitt finden Sie Details zu den Benachrichtigungsnachrichten, die Sie bei Verwendung von Push-Benachrichtigungen mit der Admin SDK API erhalten können.

Push-Benachrichtigungen der Reports API enthalten zwei Arten von Nachrichten: Synchronisierungsnachrichten und Ereignisbenachrichtigungen. Der Nachrichtentyp wird im X-Goog-Resource-State-HTTP-Header angegeben. Die möglichen Werte für Ereignisbenachrichtigungen sind die gleichen wie für die Methode activities.list. Jede Anwendung hat spezifische Ereignisse:

Benachrichtigungen deaktivieren

Mit der Property expiration wird festgelegt, wann die Benachrichtigungen automatisch beendet werden. Du kannst festlegen, dass du keine Benachrichtigungen mehr für einen bestimmten Kanal erhältst, bevor er abläuft. Rufe dazu die Methode stop unter dem folgenden URI auf:

https://www.googleapis.com/admin/reports_v1/channels/stop

Für diese Methode müssen Sie mindestens die id- und die resourceId-Properties des Kanals angeben, wie im Beispiel unten gezeigt. Wenn die Admin SDK API mehrere Ressourcentypen mit watch-Methoden hat, gibt es nur eine watch-Methode.stop

Nur Nutzer mit der entsprechenden Berechtigung können einen Kanal beenden. Wichtig ist insbesondere:

  • Wenn der Kanal über ein reguläres Nutzerkonto erstellt wurde, kann nur derselbe Nutzer vom Client, der den Kanal erstellt hat, den Kanal beenden. Er wird durch die OAuth 2.0-Client-IDs der Authentifizierungstokens identifiziert.
  • Wenn der Kanal von einem Dienstkonto erstellt wurde, kann jeder Nutzer desselben Clients den Kanal beenden.

Das folgende Codebeispiel zeigt, wie Sie keine Benachrichtigungen mehr erhalten:

POST https://www.googleapis.com/admin/reports_v1/channels/stop
  
Authorization: Bearer CURRENT_USER_AUTH_TOKEN
Content-Type: application/json

{
  "id": "4ba78bf0-6a47-11e2-bcfd-0800200c9a66",
  "resourceId": "ret08u3rv24htgh289g"
}