Push-Benachrichtigungen

In diesem Dokument wird beschrieben, wie Sie Push-Benachrichtigungen verwenden, um Ihre 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 Ihre Anwendung. So lassen sich die zusätzlichen Netzwerk- und Rechenkosten vermeiden, die durch das Abfragen von Ressourcen entstehen, 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:

  • Empfangs-URL oder Webhook einrichten des Rückrufempfängers.

    Dieses ist ein HTTPS-Server, der API-Benachrichtigungen verarbeitet, die wird ausgelöst, wenn sich eine Ressource ändert.

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

    Ein Kanal gibt Routinginformationen für Benachrichtigungen an. Nachrichten. 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 bei Änderungen an der Aktivitätsressource.

Benachrichtigungskanäle erstellen

Um Push-Benachrichtigungen anzufordern, musst du einen Benachrichtigungskanal einrichten für jede Ressource, die Sie überwachen möchten. Nachdem Sie Ihre Benachrichtigungskanäle eingerichtet haben, informiert die Admin SDK API Ihre Anwendung, wenn sich eine beobachtete Ressource ändert.

Wiedergabeanfragen stellen

Jede zu beobachtende Admin SDK API-Ressource hat eine zugehörige watch-Methode mit einer URI vom folgenden Format:

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

So richten Sie einen Benachrichtigungskanal für Benachrichtigungen über Änderungen an einer bestimmten Ressource, senden Sie eine POST-Anfrage an den Die Methode watch für die Ressource.

Jeder Benachrichtigungskanal ist sowohl einem bestimmten Nutzer als auch eine bestimmte Ressource (oder eine Gruppe von Ressourcen) Eine watch-Anfrage ist nur erfolgreich, wenn der aktuelle Nutzer oder Dienstkonto besitzt oder hat die Berechtigung, auf diese Ressource zuzugreifen.

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.
}

Mit den Parametern userKey, applicationName, eventName und filters können Sie festlegen, dass Sie nur Benachrichtigungen für bestimmte Ereignisse, Nutzer oder Anwendungen erhalten.

Hinweis: In den folgenden Beispielen wird der Anfragetext zur besseren Verständlichkeit weggelassen.

Achten Sie auf alle Administratoraktivitäten:

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

Sie können sich alle Aktivitäten in Google Docs ansehen:

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

Achten Sie auf ein bestimmtes Ereignis, z. B. bei der Änderung 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 die folgenden Felder angegeben werden:

  • Ein id-Attributstring, der dieses Objekt eindeutig identifiziert in Ihrem Projekt zu erstellen. 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 Benachrichtigung die du für diesen Kanal erhältst.

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

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

    Die Admin SDK API kann Benachrichtigungen nur 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 auch die folgenden optionalen Felder in Ihrer watch-Anfrage angeben:

  • Eine token-Property, 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 prüfen, ob jede eingehende Nachricht für einen Kanal bestimmt ist, den Ihre Anwendung erstellt hat, um sicherzustellen, dass die Benachrichtigung nicht gefälscht wird, oder um die Nachricht basierend auf dem Zweck dieses Kanals an das richtige Ziel innerhalb Ihrer Anwendung weiterzuleiten. Maximale Länge: 256 Zeichen.

    Das Token ist im X-Goog-Channel-Token-HTTP-Header in jeder Benachrichtigung Nachricht, die deine Anwendung für diesen Kanal erhält.

    Wenn Sie Tokens für Benachrichtigungskanäle verwenden, empfehlen wir Folgendes:

    • Verwenden Sie ein erweiterbares Codierungsformat, z. B. URL-Suchanfrage. Parameter. 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) für das Datum und die Uhrzeit, zu der die Admin SDK API keine weiteren Nachrichten mehr für diesen Benachrichtigungskanal senden.

    Wenn ein Channel eine Ablaufzeit hat, wird dieser als Wert des HTTP-Headers X-Goog-Channel-Expiration (für Menschen lesbar) Format) in jeder Benachrichtigung, die Ihr Anwendung für diesen Kanal erhält.

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

Antwort ansehen

Wenn mit der watch-Anfrage ein Benachrichtigungskanal erstellt wurde, wird der HTTP-Statuscode 200 OK zurückgegeben.

Der Nachrichtentext der Überwachungsantwort enthält Informationen über die den Sie gerade erstellt haben, wie im folgenden Beispiel gezeigt.

{
  "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 Sie im Rahmen Ihrer Anfrage gesendet haben, enthält der die zurückgegebenen Informationen auch die resourceId und resourceUri, um die dafür zu überwachende Ressource zu identifizieren Benachrichtigungskanal.

Sie können die zurückgegebenen Informationen an einen anderen Benachrichtigungskanal weitergeben. z. B. wenn Sie den Erhalt von E-Mails nicht mehr Benachrichtigungen.

Weitere Informationen zur Antwort finden Sie in den watch. für die Ressource Activities in der API-Referenz.

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 des Netzwerks Probleme mit dem Zeitplan haben, ist es möglich, dass die sync-Nachricht noch bevor Sie die Antwort der Methode watch erhalten.

Du kannst die sync-Benachrichtigung ignorieren, aber du kannst verwenden. Wenn Sie den Kanal beispielsweise nicht mehr verwenden möchten, können Sie die Werte X-Goog-Channel-ID und X-Goog-Resource-ID in einem Anruf 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.

Das Format der sync-Nachrichten, an die die Admin SDK API sendet Ihre Empfangs-URL wird unten angezeigt.

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 weitere Benachrichtigung für diesen Kanal hat die größer als die vorherige ist, auch wenn die Meldung nicht fortlaufend sind.

Benachrichtigungskanäle verlängern

Ein Benachrichtigungskanal kann eine Ablaufzeit haben, mit einem Wert wird entweder durch Ihre Anfrage oder durch interne Limits der Admin SDK API bestimmt oder Standardwerte (der restriktivere Wert wird 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. Außerdem sind das Ablaufdatum und die Ablaufzeit (in einem für Menschen lesbaren Format) in jeder Benachrichtigungsnachricht, die deine Anwendung für diesen Kanal im X-Goog-Channel-Expiration-HTTP-Header empfängt, enthalten.

Derzeit gibt es keine Möglichkeit, einen Benachrichtigungskanal automatisch zu verlängern. Wann? ein Kanal bald abläuft, musst du ihn durch einen neuen ersetzen. Rufe dazu folgenden Link auf: die Methode watch. 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

Immer wenn sich eine beobachtete Ressource ändert, erhält Ihre Anwendung eine 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

Benachrichtigungen, die von der Admin SDK API an Ihren Empfänger gesendet werden Die URL enthält die folgenden HTTP-Header:

Header Beschreibung
Immer einblenden
X-Goog-Channel-ID UUID oder ein anderer eindeutiger String, den Sie zur Identifizierung angegeben haben Benachrichtigungskanal.
X-Goog-Message-Number Ganzzahl, die diese Nachricht für diese Benachrichtigung identifiziert Kanal. Der Wert für sync-Nachrichten ist 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 anwesend
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 des Auftretens 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 Nutzer, der die Aktion ausführt.
actor.callerType Der Typ des Autors, der die im Bericht angegebene 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 Eigentümers des Dokuments in der Google Docs-Anwendung Das ist die Domain, die vom Ereignis im Bericht betroffen ist.
ipAddress IP-Adresse des Nutzers, der die Aktion ausführt. Dies ist die IP-Adresse (Internet Protocol) des Nutzers bei der Anmeldung in Google Workspace. Sie kann mit dem physischen Standort des Nutzers übereinstimmen 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, ist in der type-Property angegeben. Diese kennzeichnet ein Ereignis mithilfe der eventName-Property.
events[].name Name des Ereignisses. Dies ist der spezifische Name der Aktivität, die von der API erfasst wurde. 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.
Für eventName-Anfrageparameter im Allgemeinen:
  • Wenn kein eventName angegeben ist, gibt der Bericht alle möglichen Instanzen einer eventName zurück.
  • Wenn Sie ein 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[] Parameter/Wert-Paare 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 einer Administratoraktivität:

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 Ihr Dienst die API-Clientbibliothek von Google verwendet und gibt 500,502, 503 oder 504, die Admin SDK API, zurück. Wiederholungsversuche mit exponentiellem Backoff. Jeder andere Rückgabestatuscode wird als Nachrichtenfehler betrachtet.

Informationen zu Admin SDK API-Benachrichtigungsereignissen

Dieser Abschnitt enthält Details zu den Benachrichtigungen, die Sie erhalten, wenn Push-Benachrichtigungen mit der Admin SDK API verwendet werden.

Push-Benachrichtigungen der Reports API enthalten zwei Arten von Nachrichten: Synchronisierungsnachrichten und Ereignisbenachrichtigungen. Der Nachrichtentyp wird im HTTP-Header X-Goog-Resource-State 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 Eigenschaft 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 folgendem URI auf:

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

Bei dieser Methode müssen Sie mindestens den Typ id- und resourceId-Eigenschaften, wie in den Beispiel unten. Wenn die Admin SDK API mehrere Ressourcentypen mit watch-Methoden hat, gibt es nur eine watch-Methode.

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

  • Wurde der Kanal über ein reguläres Nutzerkonto erstellt, werden nur dieselben Nutzer aus dem gleichen Client (identifiziert durch OAuth 2.0-Client-IDs aus der Authentifizierungstokens), die den Kanal erstellt haben, können ihn beenden.
  • 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"
}