Ce document explique comment utiliser les notifications push qui informent vos en cas de modification d'une ressource.
Présentation
L'API SDK Admin fournit des notifications push qui vous permettent de surveiller des changements de ressources. Vous pouvez utiliser cette fonctionnalité pour améliorer les performances de votre application. Il vous permet d'éliminer les tâches de réseau et de calcul les coûts liés aux ressources de sondage pour déterminer si elles ont changé. Chaque fois qu'une ressource surveillée est modifiée, l'API SDK Admin en informe application.
Pour utiliser les notifications push, vous devez:
Configurer votre URL de réception ou votre "webhook" destinataire de rappel.
Il s'agit d'un serveur HTTPS qui gère les messages de notification de l'API déclenchés lorsqu'une ressource change.
Configurez un (canal de notification) pour chaque point de terminaison de ressource que vous souhaitez montre.
Un canal spécifie les informations de routage pour les notifications messages. Lors de la configuration du canal, vous devez identifier l'URL spécifique à laquelle vous souhaitez recevoir des notifications. Chaque fois qu'une ressource de chaîne change, l'API Admin SDK envoie un message de notification sous la forme d'une requête
POST
à cette URL.
Actuellement, l'API SDK Admin prend en charge les notifications concernant les modifications la ressource Activities.
Créer des canaux de notification
Pour demander des notifications push, vous devez configurer un canal de notification pour chaque ressource que vous souhaitez surveiller. Une fois vos canaux de notification configurés, l'API Admin SDK informe votre application lorsqu'une ressource surveillée change.
Envoyer des demandes de visionnage
Chaque ressource d'API du SDK Admin pouvant être visionnée est associée à une méthode watch
à un URI de la forme suivante :
https://www.googleapis.com/API_NAME/API_VERSION/RESOURCE_PATH/watch
Pour configurer un canal de notification pour les messages concernant les modifications
ressource spécifique, envoyez une requête POST
au
watch
pour la ressource.
Chaque canal de notification est associé à la fois à un utilisateur particulier et à une ressource (ou un ensemble de ressources) spécifique. Une requête watch
ne sera pas acceptée, sauf si l'utilisateur actuel ou le compte de service est propriétaire de cette ressource ou est autorisé à y accéder.
Exemples
Toutes les requêtes de surveillance de la ressource "Activités" se présentent sous la forme générale suivante :
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. }
Vous pouvez utiliser les paramètres userKey, applicationName, eventName
et filters
pour ne recevoir des notifications que pour des événements, des utilisateurs ou des applications spécifiques.
Remarque:Pour plus de clarté, les exemples suivants omettent le corps de la requête.
Surveillez toutes les activités des administrateurs :
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch
Surveillez toutes les activités liées aux documents :
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch
Surveillez l'activité d'un utilisateur spécifique en tant qu'administrateur :
POST https://admin.googleapis.com/admin/reports/v1/activity/users/liz@example.com/applications/admin/watch
Surveillez un événement spécifique, comme la modification du mot de passe d'un utilisateur :
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/admin/watch?eventName=CHANGE_PASSWORD
Surveillez les modifications apportées à un document spécifique :
POST https://admin.googleapis.com/admin/reports/v1/activity/users/all/applications/docs/watch?eventName=EDIT&filters==doc_id=123456abcdef
Propriétés obligatoires
Vous devez fournir les champs suivants avec chaque requête watch
:
-
Une chaîne de propriété
id
qui l'identifie de manière unique un nouveau canal de notification dans votre projet. Nous vous recommandons d'utiliser un identifiant unique universel (UUID) ou tout autre code similaire chaîne unique. Ne doit pas dépasser 64 caractères.La valeur d'ID que vous définissez est renvoyée dans l'en-tête HTTP
X-Goog-Channel-Id
de chaque message de notification que vous recevez pour ce canal. -
Chaîne de propriété
type
définie sur la valeurweb_hook
. -
Une chaîne de propriété
address
définie sur l'URL qui écoute et répond aux notifications pour ce canal de notification. Il s'agit de l'URL de rappel de votre webhook. Elle doit utiliser HTTPS.Notez que l'API SDK Admin peut envoyer des notifications aux cette adresse HTTPS uniquement si un certificat SSL valide est installé sur votre serveur Web. Les certificats non valides sont :
- les certificats auto-signés ;
- Certificats signés par une source non fiable
- Certificats révoqués
- Certificats dont le sujet ne correspond pas à la cible nom d'hôte.
Propriétés facultatives
Vous pouvez également spécifier ces champs facultatifs avec votre requête watch
:
-
Propriété
token
qui spécifie une valeur de chaîne arbitraire à utiliser comme jeton de canal. Vous pouvez utiliser les jetons de canal de notification à différentes fins. Par exemple, vous pouvez utiliser le jeton pour vérifier que chaque message entrant est destiné à un canal créé par votre application (pour vous assurer que la notification n'est pas falsifiée) ou pour acheminer le message vers la bonne destination dans votre application en fonction de l'objectif de ce canal. Longueur maximale: 256 caractères.Le jeton est inclus dans l'en-tête HTTP
X-Goog-Channel-Token
de chaque message de notification que votre application reçoit pour cette chaîne.Si vous utilisez des jetons de canal de notification, nous vous recommandons de:
Utilisez un format d'encodage extensible, tel que les paramètres de requête d'URL. Exemple :
forwardTo=hr&createdBy=mobile
N'incluez pas de données sensibles, comme des jetons OAuth.
-
Chaîne de propriété
expiration
définie sur un code temporel Unix (en millisecondes) de la date et de l'heure auxquelles vous souhaitez que l'API du SDK administrateur cesse d'envoyer des messages pour ce canal de notification.Si une chaîne a une date d'expiration, elle est incluse en tant que valeur de l'en-tête HTTP
X-Goog-Channel-Expiration
(au format lisible par l'homme) dans chaque message de notification que votre application reçoit pour cette chaîne.
Pour en savoir plus sur la requête, consultez la méthode watch
de la ressource Activities dans la documentation de référence de l'API.
Regarder la réponse
Si la requête watch
crée une notification
canal, elle renvoie un code d'état HTTP 200 OK
.
Le corps du message de la réponse de la montre fournit des informations sur le canal de notification que vous venez de créer, comme illustré dans l'exemple ci-dessous.
{ "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. }
En plus des propriétés que vous avez envoyées dans votre demande, le
les informations renvoyées incluent également les champs resourceId
et
resourceUri
pour identifier la ressource surveillée
canal de notification.
Vous pouvez transmettre les informations renvoyées à un autre canal de notification par exemple lorsque vous voulez arrêter de recevoir notifications.
Pour en savoir plus sur la réponse, consultez la méthode watch
de la ressource Activities dans la documentation de référence de l'API.
Message de synchronisation
Après avoir créé un canal de notification pour surveiller une ressource, l'API du SDK Admin envoie un message sync
pour indiquer que les notifications commencent. La valeur de l'en-tête HTTP X-Goog-Resource-State
pour ces messages est sync
. En raison du réseau
des problèmes de synchronisation, il est possible de recevoir le message sync
avant même de recevoir la réponse de la méthode watch
.
Vous pouvez ignorer la notification sync
, mais vous pouvez également l'utiliser. Par exemple, si vous décidez de ne pas conserver
le canal, vous pouvez utiliser X-Goog-Channel-ID
et
X-Goog-Resource-ID
valeurs dans un appel de
ne plus recevoir de notifications. Vous pouvez également utiliser la notification sync
pour effectuer une initialisation en vue de préparer les événements ultérieurs.
Format des messages sync
envoyés par l'API SDK Admin
votre URL de réception est indiquée ci-dessous.
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
Les messages de synchronisation ont toujours un code HTTP X-Goog-Message-Number
la valeur d'en-tête de 1
. Chaque notification ultérieure pour ce canal a un numéro de message supérieur au précédent, bien que les numéros de message ne soient pas séquentiels.
Renouveler les canaux de notification
Un canal de notification peut avoir un délai d'expiration, avec une valeur
déterminé par votre demande ou par les limites internes de l'API SDK Admin
ou par défaut (la valeur utilisée est la plus restrictive). La date d'expiration de la chaîne
l'heure, le cas échéant, est incluse sous la forme d'un code temporel Unix.
(en millisecondes) dans les informations renvoyées par la méthode watch
. En outre,
la date et l'heure d'expiration sont indiquées (au format intelligible) dans chaque
de notification reçu par votre application pour ce canal dans le
En-tête HTTP X-Goog-Channel-Expiration
.
Actuellement, il n'existe aucun moyen automatique de renouveler un canal de notification. Lorsqu'une chaîne approche de son expiration, vous devez la remplacer par une nouvelle en appelant la méthode watch
. Comme toujours, vous devez utiliser une valeur unique pour la propriété id
du nouveau canal. Notez qu'il est probable qu'il y ait une période de "chevauchement" lorsque les deux canaux de notification de la même ressource sont actifs.
Recevoir des notifications
Chaque fois qu'une ressource surveillée change, votre application reçoit un message de notification décrivant le changement. L'API SDK Admin envoie ces
les messages en tant que requêtes HTTPS POST
vers l'URL que vous avez spécifiée en tant que
Propriété address
pour cette notification
canal.
Interpréter le format du message de notification
Tous les messages de notification incluent un ensemble d'en-têtes HTTP avec des préfixes X-Goog-
.
Certains types de notifications peuvent également inclure
corps du message.
En-têtes
Messages de notification publiés par l'API SDK Admin à votre adresse e-mail L'URL comprend les en-têtes HTTP suivants:
En-tête | Description |
---|---|
Toujours présent | |
|
UUID ou autre chaîne unique que vous avez fournie pour identifier cet élément canal de notification. |
|
Entier qui identifie ce message pour cette notification
canal. La valeur est toujours 1 pour les messages sync . Les numéros de message augmentent pour chaque message ultérieur sur le canal, mais ils ne sont pas séquentiels. |
|
Valeur opaque identifiant la ressource surveillée. Cet ID est stable entre les versions d'API. |
|
Nouvel état de la ressource ayant déclenché la notification.
Valeurs possibles : sync ou un nom d'événement.
|
|
Identifiant spécifique à la version de l'API pour la ressource surveillée. |
Parfois présent | |
|
Date et heure d'expiration du canal de notification, exprimées au format lisible par l'humain. N'est présent que si défini. |
|
Jeton de canal de notification défini par votre application et que vous pouvez utiliser pour vérifier la source de la notification. Présent uniquement si défini. |
Les messages de notification pour les activités contiennent les informations suivantes dans le corps de la requête :
Propriété | Description |
---|---|
kind |
Identifie cette ressource comme une ressource Activity. Valeur: chaîne fixe "admin#reports#activity ". |
id |
Identifiant unique de l'enregistrement d'activité. |
id.time |
Heure à laquelle l'activité s'est produite. La valeur est en Format de date et d'heure ISO 8601. L'heure correspond à la date complète suivie des heures, des minutes et des secondes au format AAAA-MM-JJThh:mm:ssTZD. Par exemple : 2010-04-05T17:30:04+01:00. |
id.uniqueQualifier |
Qualificateur unique si plusieurs événements ont la même heure. |
id.applicationName |
Nom de l'application à laquelle appartient l'événement. Les valeurs possibles sont les suivantes: |
id.customerId |
Identifiant unique d'un compte Google Workspace. |
actor |
Utilisateur effectuant l'action. |
actor.callerType |
Type d'auteur de l'activité listée dans le rapport. Dans cette version de l'API, callerType correspond à la requête USER ou à l'entité OAuth 2LO ayant effectué l'action listée dans le rapport. |
actor.email |
Adresse e-mail principale de l'utilisateur dont les activités sont signalées. |
actor.profileId |
ID de profil Google Workspace unique de l'utilisateur. |
ownerDomain |
Domaine de la console d'administration ou propriétaire du document de l'application Docs. Il s'agit du domaine concerné par l'événement du rapport. |
ipAddress |
Adresse IP de l'utilisateur effectuant l'action. Il s'agit de l'adresse IP (Internet Protocol) de l'utilisateur lorsqu'il se connecte à Google Workspace. La position géographique de l'utilisateur n'est pas forcément indiquée. Par exemple, l'adresse IP peut correspondre à celle du serveur proxy de l'utilisateur ou à celle d'un réseau privé virtuel (VPN). L'API est compatible avec IPv4 et IPv6. |
events[] |
Événements d'activité dans le rapport. |
events[].type |
Type d'événement. La fonctionnalité ou le service Google Workspace modifié par un administrateur est identifié dans la propriété type , qui identifie un événement à l'aide de la propriété eventName . |
events[].name |
Nom de l'événement. Il s'agit du nom spécifique de l'activité signalée par l'API. Chaque eventName est associé à un service ou à une fonctionnalité Google Workspace spécifique que l'API organise en types d'événements.
Pour les paramètres de requête eventName en général :
|
events[].parameters[] |
Paires valeur/paramètre pour diverses applications. |
events[].parameters[].name |
Nom du paramètre. |
events[].parameters[].value |
Valeur de chaîne du paramètre. |
events[].parameters[].intValue |
Valeur entière du paramètre. |
events[].parameters[].boolValue |
Valeur booléenne du paramètre. |
Exemples
Les messages de notification pour les événements de ressource Activité se présentent sous la forme suivante:
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 } ] } ] }
Exemple d'événement d'activité d'administrateur :
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" } ] } ] }
Répondre à des notifications
Pour indiquer une réussite, vous pouvez renvoyer l'un des codes d'état suivants : 200
, 201
, 202
, 204
ou 102
.
Si votre service utilise la bibliothèque cliente des API Google et renvoie 500
, 502
, 503
ou 504
, l'API du SDK Admin effectue une nouvelle tentative avec un temps d'attente exponentiel.
Tout autre code d'état renvoyé est considéré comme un échec de message.
Comprendre les événements de notification de l'API SDK Admin
Cette section fournit des informations sur les messages de notification que vous pouvez recevoir lorsque vous utilisez des notifications push avec l'API Admin SDK.
Les notifications push de l'API Reports contiennent deux types de messages : les messages de synchronisation et les notifications d'événement. Le type de message est indiqué dans l'en-tête HTTP X-Goog-Resource-State
. Les valeurs possibles pour les notifications d'événements sont les mêmes que pour la méthode activities.list
. Chaque application possède des événements uniques :
Arrêter les notifications
La propriété expiration
contrôle le moment où les notifications s'arrêtent automatiquement. Vous pouvez choisir de ne plus recevoir de notifications pour un canal particulier avant son expiration en appelant la méthode stop
à l'URI suivant :
https://www.googleapis.com/admin/reports_v1/channels/stop
Cette méthode nécessite que vous fournissiez au moins les propriétés id
et resourceId
du canal, comme illustré dans l'exemple ci-dessous. Notez que si l'API du SDK Admin comporte plusieurs types de ressources avec des méthodes watch
, il n'existe qu'une seule méthode stop
.
Seuls les utilisateurs disposant de l'autorisation appropriée peuvent arrêter une chaîne. En particulier :
- Si la chaîne a été créée par un compte utilisateur standard, seule la même du même client (identifié par les ID client OAuth 2.0 du jetons d'authentification) qui l'a créée peuvent l'arrêter.
- Si le canal a été créé par un compte de service, tout utilisateur du même le client peut arrêter la chaîne.
L'exemple de code suivant montre comment arrêter de recevoir des notifications:
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" }