Ce document concerne Recommendations AI, Retail Search et la nouvelle console Retail.

Gérer les événements utilisateur

Cette page décrit comment afficher et supprimer des événements utilisateur. Pour savoir comment enregistrer les événements utilisateur en temps réel, consultez Enregistrer des événements utilisateur en temps réel. Pour importer des données d'événements utilisateur à partir des événements passés, consultez Importer des événements utilisateur historiques.

Réassocier des événements utilisateur

Ce tutoriel explique comment rejoindre les événements utilisateur en envoyant une requête POST au point de terminaison userEvents:rejoin.


Pour obtenir des conseils détaillés sur cette tâche directement dans l'éditeur Cloud Shell, cliquez sur Visite guidée :

Visite guidée


La procédure décrite dans les sections suivantes, est la même que si vous cliquez sur Visite guidée.

Tutoriel sur la suppression des événements utilisateur

Ce tutoriel explique comment supprimer définitivement les événements utilisateur.


Pour obtenir des conseils détaillés sur cette tâche directement dans l'éditeur Cloud Shell, cliquez sur Visite guidée :

Visite guidée


La procédure décrite dans les sections suivantes, est la même que si vous cliquez sur Visite guidée.

Afficher les informations agrégées sur les événements utilisateur

Vous pouvez afficher le nombre d'événements utilisateur enregistrés pour votre projet dans l'onglet Événement de la page Données de la console Retail. Les métriques apparaîtront environ 24 heures après la première importation d'événements dans Retail.

Statistiques d'événements utilisateur Retail

Réassocier des événements utilisateur

Vous pouvez réassocier des événements utilisateur en envoyant une requête POST au point de terminaison userEvents:rejoin.

L'opération de réassociation joint les événements spécifiés à la dernière version du catalogue de produits.

Un événement utilisateur est considéré comme non associé si le produit auquel il est associé n'est pas présent dans le catalogue au moment de l'ingestion de l'événement utilisateur. Les événements non associés ne disposent pas d'informations détaillées sur le produit et ne sont pas aussi utiles pour l'entraînement des modèles et la diffusion des résultats.

En plus de traiter les événements non associés, l'opération de réassociation peut servir à pour corriger des événements associés au mauvais catalogue de produits.

Vous devez disposer du rôle IAM Administrateur Retail AI pour appeler cette méthode. Une opération de jointure peut prendre plusieurs heures, voire plusieurs jours.

curl

Définissez userEventRejoinScope en fonction des types d'événements que vous réassociez :

  • USER_EVENT_REJOIN_SCOPE_UNSPECIFIED : valeur par défaut. Déclenche une réassociation pour tous les événements (même ceux bénéficiant déjà d'une association).
  • JOINED_EVENTS : déclenche une réassociation uniquement pour les événements bénéficiant déjà d'une association.
  • UNJOINED_EVENTS : déclenche une réassociation uniquement pour les événements ne bénéficiant pas déjà d'une association.

L'exemple suivant déclenche une réassociation uniquement pour les événements ne bénéficiant pas déjà d'une association :

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
     'userEventRejoinScope': 'UNJOINED_EVENTS'
     }" \
    "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/userEvents:rejoin"

Vous devriez recevoir un objet de réponse ressemblant à ceci :

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID"
}

Vous pouvez vérifier l'état de la réassociation. Remplacez OPERATION_ID par l'ID de l'ID d'opération renvoyé par la méthode de réassociation :

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID"

Une fois l'opération terminée, l'état renvoyé est done :

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.retail.v2.RejoinUserEventsResponse",
    "rejoinedUserEventsCount": "1"
  }
}

Java

public static String rejoinUserEvents(UserEventRejoinScope scope)
    throws IOException, InterruptedException, ExecutionException {
  UserEventServiceClient userEventsClient = getUserEventServiceClient();

  RejoinUserEventsRequest request = RejoinUserEventsRequest.newBuilder()
      .setParent(DEFAULT_CATALOG_NAME)
      .setUserEventRejoinScope(scope)
      .build();

  String operationName = userEventsClient
      .rejoinUserEventsAsync(request).getName();

  userEventsClient.shutdownNow();
  userEventsClient.awaitTermination(2, TimeUnit.SECONDS);

  return operationName;
}

Supprimer les événements utilisateur

En règle générale, vous devez conserver les événements utilisateur après leur enregistrement. Il n'est pas recommandé de purger les événements.

L'opération de purge des événements peut prendre plusieurs jours. Si vous prévoyez de réinitialiser entièrement les événements utilisateur, envisagez plutôt de créer un nouveau projet.

Si certains de vos événements utilisateur n'ont pas été enregistrés correctement et que vous devez les supprimer, vous pouvez utiliser la méthode userEvents.purge.

Spécifiez les événements que vous souhaitez supprimer à l'aide d'une chaîne de filtre. Cela permet de supprimer de manière sélective les événements utilisateur en filtrant sur les champs eventTime, eventType, visitorID et userID.

La suppression ne pouvant pas être annulée, testez votre chaîne de filtre en effectuant une simulation avant de supprimer les événements utilisateur. Le champ force est défini sur false par défaut. Ce paramètre permet de renvoyer le nombre d'événements à supprimer sans les supprimer. Lorsque vous êtes prêt à supprimer les événements utilisateur, définissez le champ force sur true.

curl

Cet exemple permet de filtrer une période spécifique, qui doit être spécifiée au format date/heure Zulu. Le champ force est défini sur false.

curl -X POST \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token)"" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data '{
    "filter":"eventTime > \"2019-12-23T18:25:43.511Z\" eventTime < \"2019-12-23T18:30:43.511Z\"",
    "force":"false"
  }' \
  "https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/userEvents:purge"

Vous devez recevoir un objet de réponse qui ressemble à ceci, où purge-user-events-54321 est l'ID de l'opération :

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/purge-user-events-54321"
}

Cet exemple demande l'état de l'opération :

curl -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID"

Exemple d'état d'opération :

{
  "name": "projects/PROJECT_ID/locations/global/catalogs/default_catalog/operations/OPERATION_ID",
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.retail.v2.PurgeUserEventsResponse",
    "purgedEventsCount": "1"
  }
}

La définition du champ force sur true force la suppression.

curl -X POST \
  -H "Authorization: Bearer "$(gcloud auth application-default print-access-token)"" \
  -H "Content-Type: application/json; charset=utf-8" \
  --data '{
    "filter":"eventTime > \"2019-12-23T18:25:43.511Z\" eventTime < \"2019-12-23T18:30:43.511Z\"",
    "force":"true"
  }' \
"https://retail.googleapis.com/v2/projects/PROJECT_ID/locations/global/catalogs/default_catalog/userEvents:purge"

Java

public static String purgeUserEvents(
    String filter)
    throws IOException, InterruptedException, ExecutionException {
  UserEventServiceClient userEventsClient = getUserEventServiceClient();

  PurgeUserEventsRequest request = PurgeUserEventsRequest.newBuilder()
      .setParent(DEFAULT_CATALOG_NAME)
      .setFilter(filter)
      .setForce(true)
      .build();

  String operationName = userEventsClient
      .purgeUserEventsAsync(request).getName();

  userEventsClient.shutdownNow();
  userEventsClient.awaitTermination(2, TimeUnit.SECONDS);

  return operationName;
}

Utiliser le filtre d'événement utilisateur

Vous pouvez filtrer les événements utilisateur à supprimer.

Le filtre est une chaîne qui contient une ou plusieurs des restrictions suivantes :

  • eventTime

    Fournit un horodatage pour restreindre les événements à supprimer. Ce filtre peut être spécifié une ou deux fois, accompagné d'un symbole supérieur à (>) ou inférieur à (<). La période spécifiée doit être un bloc unique contigu.

  • eventType

    Restreint les événements à supprimer à un seul type d'événement.

  • visitorID

    Restreint les événements à supprimer à un seul ID de visiteur.

  • userID

    Restreint les événements à supprimer à un seul ID d'utilisateur.

Seuls les événements utilisateur qui satisfont toutes les restrictions sont supprimés.

Pour supprimer tous les événements utilisateur de type add-to-cart qui ont été enregistrés le 1er février 2019 ou après cette date, vous devez fournir la chaîne de filtre suivante :

eventTime > "2019-02-01T00:00:00Z" eventType = add-to-cart