Passer au contenu principal

Comment fonctionne la personnalisation

Vous pouvez ajouter des données personnalisées dans les messages, les modèles, les Journey Webhooks et les Event Streams en utilisant la syntaxe Liquid. Les données peuvent provenir de :
  • Flux de données : Données en temps réel provenant de vos API.
  • Événements personnalisés : Événements utilisateur en temps réel pour personnaliser les messages de Journey.
  • Propriétés et balises : Valeurs intégrées d’utilisateur, de journey, de message, de modèle, d’application ou d’organisation.
  • API : custom_data : Données personnalisées que vous transmettez directement dans notre API Créer un message.
  • Contenu dynamique : Personnalisation basée sur CSV via les téléchargements du tableau de bord.

Considérations clés

La personnalisation aide les utilisateurs à se connecter plus profondément avec votre application, augmentant potentiellement l’engagement et les revenus. Les exemples courants sont le nom de la personne ou des informations spécifiques (comme les articles de panier abandonné) dans un message, mais les cas d’utilisation sont infinis. Quel est l’objectif ? Que souhaitez-vous envoyer dans le message ? Exemples :
  • Ajouter une propriété utilisateur comme le nom ou l’ID
  • Afficher une facture ou un OTP
  • Envoyer du contenu dynamique à partir d’un CSV
Où se trouvent les données ?
  • Les données sont-elles stockées dans OneSignal comme une propriété ou une balise ?
  • Les données sont-elles stockées dans votre propre base de données ?
  • Devez-vous transmettre des données depuis votre backend vers OneSignal ?
Comment souhaitez-vous envoyer le message ?
  • Messages ponctuels : Envoyer le message depuis votre serveur ou via le tableau de bord OneSignal ?
  • Messages récurrents : Utiliser Journeys ou d’autres flux de travail automatisés ?
Exemple :
  • Objectif : Envoyer un code à usage unique pour aider un utilisateur à se connecter.
  • Données :
    • OTP stocké sur votre backend.
    • Nom d’utilisateur stocké dans OneSignal comme une balise.
    • ID externe stocké dans OneSignal comme une propriété.
  • Envoi :
    • Depuis votre serveur en utilisant notre API REST.
    • Depuis un flux de travail automatisé utilisant Journeys.
Une présentation détaillée de cet exemple est disponible dans le tutoriel d’exemple Vérification, lien magique et OTP.Voir plus d’exemples de tutoriels ci-dessous.

Sources de données

Options disponibles pour la personnalisation.

Contenu dynamique

Ce guide actuel sur la personnalisation explique comment ajouter du contenu dynamique à vos messages, modèles, Journeys et Event Streams. OneSignal fournit également un moyen de télécharger un CSV de données pour personnaliser les messages en fonction des données de votre propre base de données. Consultez Contenu dynamique pour plus de détails.

Flux de données

Les flux de données sont un moyen de récupérer des données en temps réel depuis vos API directement dans les messages au moment de l’envoi. Connectez simplement un modèle à votre source de données et nous récupérerons les données de votre serveur et les injecterons dans le message.

Événements personnalisés

Référencez les événements personnalisés dans les modèles utilisés dans les Journeys. Selon la configuration du Journey, il peut stocker un ou plusieurs événements personnalisés au nom de l’utilisateur. Vous pouvez utiliser la syntaxe Liquid pour afficher les propriétés de ces événements stockés, ou pour afficher conditionnellement des parties de votre message en fonction des événements.
  • Propriétés d'événements personnalisés
  • Example Custom Event Structure
  • Utilisation d'événements dans les modèles
journey.first_event
For Event-triggered Journeys, this will always be the event that caused the user to enter the Journey.If the Journey’s entry rule is not event-triggered, then this will be the first event matched by a Wait Until condition.
{% assign event = journey.first_event %}
journey.last_event
The most recent Custom Event stored. If there is only one stored custom event, then first_event and last_event will return the same thing.
{% assign event = journey.last_event %}
journey.event.most_recent_event_name
The most recent event with a given name (replace most_recent_event_name with the name of the event you want to reference). If the same event is used multiple times, this will return the most recent instance. Example: purchase.
{% assign event = journey.event.purchase %}
For special characters (e.g. spaces), use hash notation if the event name contains non-alphanumeric characters. For example, if the event name is “order status”, you can reference it with journey.event["order status"].
{% assign event = journey.event["order status"] %}
journey.all_events
Provides an array of all events stored for this Journey for the user, in the order they were received. You can use for loops to iterate over them.
{% for event in journey.all_events %}
  {{ event.name }}
{% endfor %}
first_event and last_event are shorthand for all_events[0] and all_events[-1], respectively.

Propriétés

Predefined fields saved in OneSignal.
Properties are not available to substitute within In-App Messages or Live Activities.

User & Subscription properties

Follow the provided steps based on where you need to access the data.
  • Properties available in messages & templates
  • Properties available in Journey Webhooks & Event Streams
Use the subscription object to access properties at the Subscription level in messages and templates. Tags can also be accessed directly via the key name. For example:
Hi {{ first_name | default: "friend" }}!
Congrats on reaching level {{ level | default: "1" }}!
If you have tags first_name: Jon and level: 5 for User A and first_name: Jeff and level: 100 for User B, each will see their name and level in the message. Otherwise, they’ll see the default values.
subscription.external_id
The External ID associated with the Subscription.
Your user ID is {{ subscription.external_id }}.
subscription.email
The email address of the email Subscription being sent the message.
Thanks for subscribing with email {{ subscription.email }}.
subscription.phone_number
The phone number of the SMS Subscription being sent the message.
Thanks for subscribing with phone number {{ subscription.phone_number }}.
subscription.language
The language code of the user.
Preferred language: {{ subscription.language }}
subscription.unsubscribe_token
The token used with the Unsubscribe email with token API.
liquid
Unsubscribe: https://your-domain.com/unsubscribe?token={{ subscription.unsubscribe_token }}

Journey properties

The journey object is helpful for tracking the Journey name or referencing Custom Events within Templates used in Journeys.
journey.name
The name of the Journey.
JSON
{
  "journey.name": "{{ journey.name }}"
}

Message properties

The message object is helpful for accessing custom_data sent from your backend or for tracking properties of the message with Event Streams.
message.id
The OneSignal message ID.
JSON
{
  "message.id": "{{ message.id }}"
}
message.name
The name of the message.
JSON
{
  "message.name": "{{ message.name }}"
}
message.template_id
The OneSignal template ID.
JSON
{
  "message.template_id": "{{ message.template_id }}"
}

Template properties

The template object is helpful for accessing details about the Template used to send the message.
template.id
The OneSignal template ID.
JSON
{
  "template.id": "{{ template.id }}"
}
template.name
The name of the template.
JSON
{
  "template.name": "{{ template.name }}"
}

OneSignal properties

The app and org objects are helpful for accessing details about the App and Organization that sent the message.
app.id
The OneSignal App ID.
JSON
{
  "app.id": "{{ app.id }}"
}
app.name
The name of the OneSignal App.
JSON
{
  "app.name": "{{ app.name }}"
}
org.id
The OneSignal Organization ID.
JSON
{
  "org.id": "{{ org.id }}"
}
org.name
The name of the OneSignal Organization.
JSON
{
  "org.name": "{{ org.name }}"
}

API custom_data

Add personalization directly from your backend using custom_data and our Create message API. Steps:
  1. Create a template
  2. Use Liquid Syntax with format {{ message.custom_data.key }}
  3. Send API request with the custom_data object and template_id

Example: Flat JSON

Template
Your invoice for {{message.custom_data.product_name}} is ready.
URL: https://your-domain.com/invoice={{message.custom_data.invoice_id}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "invoice_id": "463246732",
    "product_name": "Widget"
  }
}
Customer sees:
  • “Your invoice for Widget is ready.”
  • The final URL: https://your-domain.com/invoice=463246732

Example: Array data

Template
Your {{message.custom_data.cart_items[0].item_name}} is waiting for you!
Image: {{message.custom_data.cart_items[0].image_url}}
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_email_tokens": ["THE_USER_EMAIL"],
  "custom_data": {
    "cart_items": [
      {
        "item_name": "sweater",
        "img_url": "https://.../sweater.png"
      },{
        "item_name": "socks",
        "img_url": "https://.../socks.png"
      }
    ]
  }
}
Customer sees:
  • “Your sweater is waiting for you!”
  • The image: https://.../sweater.png

Example: Bulk personalization

To personalize a single message for many users in one request:
Template
{% assign eid = message.custom_data.users[subscription.external_id] %}
Hi {{ eid.first_name }}, you have {{ eid.points }} points. Your level is {{ eid.level }}.
API Request
{
  "app_id": "YOUR_APP_ID",
  "template_id": "YOUR_TEMPLATE_ID",
  "include_aliases": {
    "external_id": ["user123", "user456"]
  },
  "custom_data": {
    "users": {
      "user123": { "first_name": "John", "points": "150", "level": "Gold" },
      "user456": { "first_name": "Sarah", "points": "200", "level": "Platinum" }
    }
  }
}
Customer sees:
  • “Hi John, you have 150 points. Your level is Gold.”
  • “Hi Sarah, you have 200 points. Your level is Platinum.”

Tutorials