Passer au contenu principal
Les Custom Events vous permettent de personnaliser les messages Journey en utilisant les propriétés d’événement (noms de produits, prix, URLs, tableaux, etc.). Les propriétés d’événement ne sont disponibles dans les modèles que si l’événement :
  • Déclenche l’entrée dans le Journey, ou
  • Correspond à une condition Wait Until à l’intérieur du Journey
Les propriétés d’événement stockées sont accessibles via la syntaxe Liquid.

Comment fonctionne la personnalisation avec les Custom Events

Ajoutez des propriétés d’événement à vos messages Journey en suivant ces étapes :
1

Envoyer un Custom Event avec des propriétés

Exemple de payload Custom Events :
JSON
{
  "name": "purchase",
  "properties": {
    "item": "Blue Sweater",
    "price": "29.99",
    "order status": "pending",
    "details": [
      {
        "manufacturer": "Company A",
        "model": "1234567890"
      },
      {
        "manufacturer": "Company B",
        "model": "9876543210"
      }
    ]
  },
  "external_id": "user_12345",
  "timestamp": "2025-10-21T19:09:32.263Z",
}
2

Référencer les propriétés d'événement dans vos modèles de messages Journey

Utilisez la syntaxe Liquid pour accéder aux propriétés d’événement.

Modèles d’accès Liquid courants

Ce que vous voulezLiquidRésultat
Nom de l’événement{{ journey.first_event.name }}purchase
Propriété{{ journey.first_event.properties.item }}Blue Sweater
Propriétés imbriquées{{ journey.first_event.properties.details.first.manufacturer }}Company A
Propriété avec caractères spéciaux{{ journey.last_event.properties["order status"] }}pending
Horodatage{{ journey.last_event.timestamp | date: "%B %d, %Y at %I:%M %p" }}October 21, 2025 at 07:09 PM

Modèles d’accès Liquid imbriqués

Vous pouvez également accéder aux propriétés imbriquées en utilisant la notation par point et par crochets :
Liquid
{{ journey.first_event.properties.details.first.manufacturer }} = Company A
{{ journey.first_event.properties.details.last.manufacturer }} = Company B
{{ journey.first_event.properties.details[0].manufacturer }} = Company A
{{ journey.first_event.properties.details[1].manufacturer }} = Company B
Un Liquid invalide ou des propriétés manquantes s’affichent comme des chaînes vides. Les messages sont tout de même envoyés. Utilisez les filtres par défaut pour définir une valeur de remplacement.
3

Créer un Journey

Configurez le Journey pour utiliser le Custom Event comme règle d’entrée et/ou condition Wait Until.Ajoutez des nœuds de message avec les modèles.

Règles de stockage des propriétés d’événement

  • Vous pouvez utiliser plusieurs événements dans votre Journey en combinant les règles d’entrée et les étapes Wait Until.
  • Maximum : 100 propriétés d’événement stockées par utilisateur et par instance de Journey (les plus anciennes sont supprimées).
  • Les propriétés d’événement sont stockées par utilisateur, par instance de Journey.
  • Les événements envoyés avant l’entrée ne sont pas accessibles.
  • Les propriétés d’événement sont effacées lorsque l’utilisateur quitte le Journey.
Les événements stockés dans un Journey ne peuvent pas être accessibles depuis un autre Journey.

Référence Liquid des Custom Events

Utilisez ces objets pour accéder aux événements stockés à l’intérieur du Journey.
journey.first_event
Le premier événement stocké pour cette instance de Journey.
  • Si vous utilisez une règle d’entrée par Custom Event, il s’agit de l’événement qui a déclenché l’entrée dans le Journey.
  • Si vous n’utilisez pas de règle d’entrée par Custom Event, il s’agit du premier événement stocké correspondant à une condition Wait Until.
Liquid
Thanks for purchasing {{ journey.first_event.properties.item | default: "your item" }}!
journey.last_event
L’événement stocké le plus récent pour cette instance de Journey.
  • Si un seul événement est stocké, first_event et last_event renvoient la même chose.
Liquid
Your most recent purchase was {{ journey.last_event.properties.item | default: "made" }}!
journey.event.EVENT_NAME
L’événement stocké le plus récent portant un nom spécifique.
  • Remplacez EVENT_NAME par le nom de votre événement (par exemple, purchase).
  • Si le même nom d’événement est utilisé plusieurs fois, ceci renvoie l’instance la plus récente.
Liquid
{% assign event = journey.event.purchase %}
Si le nom de votre événement contient des espaces ou des caractères spéciaux, utilisez la notation par crochets.Exemple d’événement : "name": "order status"
Liquid
{% assign event = journey.event["order status"] %}
journey.all_events
array
Tous les événements stockés pour cette instance de Journey, dans l’ordre où ils ont été stockés.
Liquid
{% for event in journey.all_events %}
{{ event.properties.item | default: "Item" }} — ${{ event.properties.price | default: "0.00" }}
{% endfor %}
  • journey.first_event est un raccourci pour journey.all_events[0].
  • journey.last_event est un raccourci pour l’événement le plus récent du tableau.

Exemple : Modèles de panier abandonné utilisant les Custom Events

Cet exemple montre comment personnaliser les messages de panier abandonné en utilisant les Custom Events. Il s’appuie sur le tutoriel Panier abandonné. Exemple de jeu de Custom Events :
JSON
{
  "events": [
    {
      "name": "cart_abandoned",
      "properties": {
        "cart_url": "https://yourdomain.com/username/cart",
        "cart": [
          {
            "product_name": "24 Pack of Acorns",
            "product_image": "https://i.imgur.com/ssPCfbC.png",
            "product_price": "$12.99",
            "product_quantity": "1"
          },
          {
            "product_name": "Fancy Sweater",
            "product_image": "https://i.imgur.com/8QWTfV4.png",
            "product_price": "$9.99",
            "product_quantity": "1"
          }
        ]
      },
      "external_id": "ID_OF_THE_USER"
    }
  ]
}

Modèle d’e-mail

Cet exemple montre comment créer un modèle d’e-mail qui affiche :
  • Le nombre d’articles dans le panier
  • Chaque produit avec son image, son nom, sa quantité et son prix à l’aide d’une boucle for
  • Un bouton qui renvoie vers l’URL unique du panier du client
1

Créer le modèle d'e-mail

Accédez à Messages > Templates > New Email Template et ouvrez l’éditeur glisser-déposer.
2

Ajouter la structure de mise en page

Créez cinq lignes :
  • Lignes 1, 2 et 4 : une colonne avec un bloc Paragraph
  • Ligne 3 : quatre colonnes avec HTML | Paragraph | Paragraph | Paragraph
  • Ligne 5 : une colonne avec un bloc Button
3

Afficher le nombre d'articles

Dans la ligne 1, ajoutez :
Liquid
We're holding onto {{journey.first_event.properties.cart.size}} items in your cart, but don't wait too long!
Pour une meilleure grammaire, vous pourriez utiliser une condition pour dire « 1 article » vs « 2 articles », mais pour les e-mails de panier abandonné, le pluriel est généralement acceptable.
Liquid
{% assign cart = message.custom_data.cart %}
{% assign item_count = cart.size | plus: 0 %}
{% if item_count == 1 %}
We're holding onto {{item_count}} item in your cart, but don't wait too long, other squirrels are getting ahead!
{% endif %}
{% if item_count > 1 %}
We're holding onto {{item_count}} items in your cart, but don't wait too long, other squirrels are getting ahead!
{% endif %}
4

Démarrer la boucle for

Utilisez une boucle for pour répéter la ligne d’affichage du produit pour chaque article du panier.Dans la ligne 2 (début de la boucle), ajoutez :
Liquid
{% for product in journey.first_event.properties.cart %}
Ce que cela fait :
  • Commence une boucle qui parcourt chaque objet dans le tableau cart
  • Crée une variable temporaire product représentant l’article courant
  • Tout ce qui se trouve entre {% for %} et {% endfor %} se répète une fois par article du panier
  • Vous pouvez nommer product comme vous le souhaitez (par exemple, item, cartItem) — restez simplement cohérent
Placement de la boucle for : Assurez-vous que la syntaxe {% for %} se trouve dans sa propre ligne de bloc Text. Ne la placez pas à l’intérieur d’une ligne multi-colonnes avec d’autre contenu, car cela peut casser le rendu de l’e-mail dans certains clients.
5

Afficher les détails du produit

Cette ligne à 4 colonnes affiche l’image, le nom, la quantité et le prix. Comme elle se trouve à l’intérieur de la boucle, elle se répète pour chaque article du panier.Dans la ligne 3 (détails du produit), configurez :Colonne 1 - Bloc HTML (image du produit) :
<img src="{{product.product_image}}" alt="Product image" style="max-width:100%;" />
Colonnes 2 à 4 - Blocs texte (nom du produit, quantité, prix) :
  • Colonne 2 : {{product.product_name}}
  • Colonne 3 : {{product.product_quantity}}
  • Colonne 4 : {{product.product_price}}
Comment fonctionne la boucle :
  • À la première itération, product = premier objet du tableau cart
  • {{product.product_image}} récupère l’image du premier article
  • À la deuxième itération, product = deuxième objet
  • La ligne se répète automatiquement pour tous les articles du panier
Correspondance des noms de champs : Les clés comme product_image doivent correspondre exactement à votre payload d’événement (sensible à la casse). Les non-correspondances s’affichent comme des chaînes vides.
6

Terminer la boucle for

Fermez la boucle pour marquer l’endroit où la répétition s’arrête.Dans la ligne 4 (fin de la boucle), ajoutez :
Liquid
{% endfor %}
Chaque {% for %} doit avoir un {% endfor %} correspondant. L’absence de celui-ci cassera le rendu de l’e-mail.
7

Ajouter le bouton d'URL du panier

Dans le bloc Button de la ligne 5, définissez l’URL d’action sur :
Liquid
{{journey.first_event.properties.cart_url}}
8

Tester le modèle

  • Ajoutez le modèle à un Journey vierge et définissez la règle d’entrée sur un Custom Event.
  • Activez le Journey et entrez-y vous-même via l’API Custom Event.
  • Vérifiez que les données s’affichent correctement.
Terminé ! Vous pouvez maintenant appliquer votre propre mise en forme au modèle. Consultez Concevoir des e-mails avec le glisser-déposer.

Modèle push

Les notifications push ont un espace limité, affichez donc un seul article et mentionnez le nombre total. Champ du message : Affichez l’article et le nombre avec une grammaire correcte en utilisant les instructions conditionnelles.
Liquid
{% assign cart = journey.first_event.properties.cart %}
{% assign item_count = cart.size | plus: 0 %}
{% if item_count == 1 %}
You left {{cart.first.product_name}} in your cart.
{% endif %}
{% if item_count == 2 %}
You left {{cart.first.product_name}} and {{item_count | minus: 1}} more item in your cart.
{% endif %}
{% if item_count > 2 %}
You left {{cart.first.product_name}} and {{item_count | minus: 1}} more items in your cart.
{% endif %}
Champ de l’image :
Liquid
{{journey.first_event.properties.cart.first.product_image | default: "https://i.imgur.com/ssPCfbC.png"}}
Champ de l’URL de lancement :
Liquid
{{journey.first_event.properties.cart_url | default: "https://yourdomain.com/cart"}}
Envoyez-vous une notification push de test en l’ajoutant au Journey de test et en y entrant vous-même via un autre appel à l’API Custom Event. Vous devriez voir apparaître une notification similaire à celle-ci :
Terminé ! Vous pouvez maintenant créer d’autres modèles et les utiliser dans le Journey de panier abandonné.

Dépannage et bonnes pratiques

Erreurs courantes :
ErreurPourquoi cela échoueSyntaxe correcte
{{ journey.first_event.item }}.properties manquant{{ journey.first_event.properties.item }}
{{ journey.event.purchase.item }}.properties manquant{{ journey.event.purchase.properties.item }}
{{ journey.first_event.properties.Item }}Mauvaise casse (devrait être item){{ journey.first_event.properties.item }}
{{ event.properties.item }}Préfixe journey. manquant{{ journey.first_event.properties.item }}
Bonnes pratiques :
  • Testez toujours les modèles avant la mise en production
  • Utilisez les filtres par défaut pour les propriétés optionnelles
  • Validez que le schéma de l’événement correspond aux attentes du modèle

Pages associées

Besoin d’aide ?Discutez avec notre équipe d’assistance ou envoyez un e-mail à support@onesignal.comVeuillez inclure :
  • Les détails du problème que vous rencontrez et les étapes de reproduction si disponibles
  • Votre OneSignal App ID
  • L’External ID ou le Subscription ID le cas échéant
  • L’URL du message que vous avez testé dans le OneSignal Dashboard le cas échéant
  • Tous les journaux ou messages d’erreur pertinents
Nous serons ravis de vous aider !