> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Personnalisation

> Choisissez la bonne méthode de personnalisation dans OneSignal. Comparez les propriétés, les Custom Events, l'API custom_data, les Data Feeds et les imports CSV pour envoyer des messages dynamiques avec la syntaxe Liquid.

<Frame>
  <iframe width="560" height="315" src="https://www.youtube.com/embed/71gtwxKWlN8?si=mlgmP6eE3652r_cX" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen />
</Frame>

La personnalisation vous permet d'envoyer des messages contenant des données dynamiques, telles que le nom d'un utilisateur, les articles du panier, le solde du compte, les détails d'une réservation ou un mot de passe à usage unique.

Ce guide vous aide à choisir la bonne méthode de personnalisation en fonction de :

* L'emplacement de vos données
* Si elles doivent persister ou non
* Comment le message est déclenché

***

## Comment fonctionne la personnalisation

La personnalisation dans OneSignal comporte deux parties :

1. **La syntaxe Liquid** : définit comment les valeurs s'affichent dans votre message
2. **Une source de données** : détermine d'où provient la valeur

Au moment de l'envoi, OneSignal résout vos variables Liquid en utilisant la source de données sélectionnée.

<Info>
  Liquid contrôle le formatage et la logique (variables, boucles, conditions). La source de données détermine quelles valeurs sont disponibles.
</Info>

**Exemple :**

```liquid Liquid theme={null}
Hi {{ user.tags.first_name }},

Your verification code is {{ message.custom_data.otp }}.
```

* `user.tags.first_name` est une propriété stockée
* `message.custom_data.otp` est transmis via le champ API `custom_data`

***

## Champs pris en charge par type de message

<Tabs>
  <Tab title="E-mail">
    * Objet, Répondre à et Pré-en-tête
    * Corps du message
    * Substitution d'image dans les blocs HTML. Exemple : `<img src="{{image_url}}"/>`
    * Actions de bloc de bouton comme les URL, Mail to et d'autres champs.
  </Tab>

  <Tab title="Push">
    * Titre (`headings`), Sous-titre, Corps (`contents`)
    * URL de l'image
    * URL de lancement. Exemple : `https://example.com/{{last_category_viewed}}`
    * Les `data` supplémentaires ne prennent pas en charge la syntaxe Liquid.
  </Tab>

  <Tab title="SMS">
    * Corps du message (`contents`)
  </Tab>

  <Tab title="Messages in-app">
    <Warning>
      Seule la substitution de tags est prise en charge pour le moment.

      Le tag doit être défini avant que l'utilisateur n'ouvre l'application pour démarrer une nouvelle session. Les tags disponibles sont dans la [méthode `getTags`](./mobile-sdk-reference#gettags).
    </Warning>

    **Éditeur de blocs :**

    * La substitution de tags fonctionne dans les blocs Texte, Bouton et Image.

    **Éditeur HTML :**

    * La substitution de tags fonctionne dans :
      * Les balises d'en-tête `<h*>` et `<p>`. Exemple : `<h2>Hello {{first_name}}!</h2>`
      * Attributs d'élément : `["src", "href", "action", "data"]`. Exemple : `<img src="{{image_url}}"/>`

    <Note>
      Consultez [API JavaScript des messages in-app](./in-app-message-api) pour plus de détails et d'exemples.
    </Note>
  </Tab>

  <Tab title="Live Activities">
    * Dans les propriétés `event_updates`, `contents` et `headings`.
  </Tab>
</Tabs>

***

## Sources de données

OneSignal prend en charge cinq sources de données pour la personnalisation. Utilisez le tableau ci-dessous pour identifier la source adaptée à votre cas d'utilisation, puis lisez la section détaillée pour obtenir des conseils d'implémentation.

| Source de données                               | Ce que c'est                                                          | Quand l'utiliser                                                               | Persistante   | Disponible dans les Journeys |
| ----------------------------------------------- | --------------------------------------------------------------------- | ------------------------------------------------------------------------------ | ------------- | ---------------------------- |
| [**Propriétés**](#properties)                   | Tags, External ID, données de Subscription, champs d'application      | Valeurs réutilisables stockées dans OneSignal (nom, plan, préférences)         | Oui           | Oui                          |
| [**Custom Events**](#custom-events)             | Propriétés d'événements capturées à l'entrée du Journey ou Wait Until | Personnalisation comportementale dans les Journeys                             | Par événement | Journey uniquement           |
| [**API `custom_data`**](#api-custom_data)       | Paires clé-valeur transmises dans l'API Create Message                | Valeurs à usage unique ou sensibles (OTP, liens sécurisés, articles du panier) | Non           | Non                          |
| [**Data Feeds**](#data-feeds)                   | Appel API en direct effectué au moment de l'envoi                     | Valeurs qui changent fréquemment (prix, inventaire, solde de compte)           | Non           | Oui                          |
| [**Dynamic Content CSV**](#dynamic-content-csv) | CSV importé dans le tableau de bord                                   | Campagnes en masse avec contenu par destinataire                               | Par envoi     | Non                          |

<Warning>
  **Erreurs courantes à éviter**

  * Utiliser les propriétés (Tags) pour des valeurs à usage unique comme les OTP ou les codes de vérification — utilisez plutôt `custom_data`
  * S'attendre à ce que `custom_data` soit disponible dans les Journeys ou les messages futurs — il n'existe que pour la requête API en cours
  * Supposer que les propriétés des Custom Events sont disponibles en dehors de l'entrée dans le Journey déclenchée par l'événement ou d'une étape Wait Until
  * Utiliser les Data Feeds pour des données statiques qui changent rarement — utilisez plutôt les propriétés
</Warning>

### Propriétés

Les propriétés incluent les Tags utilisateur, l'External ID, les données de Subscription et les champs au niveau de l'application.

Elles sont :

* Persistantes
* Réutilisables
* Disponibles à travers les messages, les Templates, les [Journey Webhooks](./journeys-webhook) et les [Event Streams](./event-streams).

**Utilisez les propriétés quand :**

* La valeur existe dans OneSignal
* La valeur est persistante
* Vous la réutilisez à travers les campagnes

<Card title="Personnaliser avec les propriétés" icon="tag" href="./personalization-properties-and-tags">
  Apprenez à référencer les données de propriétés persistantes stockées.
</Card>

***

### Custom Events

Les [Custom Events](./custom-events) peuvent personnaliser les messages à l'intérieur des [Journeys](./journeys-overview) en utilisant les propriétés d'événements.

Lorsqu'un événement **démarre un Journey** ou **correspond à une condition Wait Until**, OneSignal stocke cet événement afin que ses propriétés puissent être référencées dans les modèles de messages en utilisant Liquid.

**Quand utiliser les Custom Events :**

* Messages déclenchés par événement avec les Journeys
* Le message doit refléter des données spécifiques à l'événement

<Warning> Seuls les événements qui déclenchent l'entrée dans un Journey ou une étape Wait Until sont stockés pour la personnalisation. Les événements envoyés en dehors de ces moments ne sont pas disponibles pour les messages de Journey. </Warning>

<Card title="Personnalisation avec les Custom Events" icon="bolt" href="./personalization-custom-event">
  Guide complet pour utiliser les propriétés d'événements dans les Journeys.
</Card>

***

### API `custom_data`

Le champ `custom_data` dans l'[API Create Message](/reference/create-message) vous permet d'envoyer des valeurs spécifiques au message depuis votre backend.

Ces données :

* N'existent que pour la requête en cours
* Ne sont pas stockées dans OneSignal
* Ne sont pas disponibles dans les Journeys

**Utilisez `custom_data` quand :**

* Vous envoyez des valeurs à usage unique ou sensibles (OTP, liens sécurisés)
* Vous transmettez des tableaux (articles du panier, lignes de commande, classements)
* Vous envoyez des messages transactionnels ou déclenchés par API

<Card title="Personnaliser avec l'API custom_data" icon="code" href="./personalization-api-custom-data">
  Apprenez à transmettre des données de personnalisation transitoires.
</Card>

***

### Data Feeds

Les [Data Feeds](./data-feeds) appellent votre API au moment de l'envoi et injectent la réponse dans votre message.

**Quand utiliser les Data Feeds :**

* Vous avez besoin de la valeur la plus récente à la livraison
* Les données se trouvent dans votre backend
* La valeur peut changer entre les envois

<Card title="Data Feeds" icon="cloud-arrow-up" href="./data-feeds">
  Extrayez des données backend en temps réel dans les messages au moment de l'envoi.
</Card>

***

### Dynamic Content CSV

Téléchargez un fichier CSV dans le tableau de bord OneSignal et référencez ses valeurs en utilisant Liquid.

**Utilisez le CSV quand :**

* Vous personnalisez différentes sections d'une campagne en masse pour chaque destinataire
* Les traductions ou données personnalisées pour chaque destinataire sont exportables dans un fichier CSV
* Vous ne souhaitez pas utiliser l'API

<Card title="Dynamic Content CSV" icon="file-csv" href="./dynamic-content">
  Personnalisez les campagnes depuis le tableau de bord en utilisant des imports CSV.
</Card>

***

## Guides détaillés

Utilisez les guides ci-dessous pour des détails d'implémentation pas à pas et des exemples avancés.

<Columns cols={2}>
  <Card title="Utiliser la syntaxe Liquid" icon="droplet" href="./using-liquid-syntax">
    Apprenez à insérer des données dynamiques dans les messages en utilisant Liquid. Couvre les variables, les conditions, les boucles, les filtres, le formatage et les modèles de personnalisation courants.
  </Card>

  <Card title="Data Feeds" icon="cloud-arrow-up" href="./data-feeds">
    Extrayez des données en temps réel de vos propres API au moment de l'envoi. Utilisez les Data Feeds lorsque le contenu du message dépend de valeurs backend en direct comme les soldes, la disponibilité ou les tarifs.
  </Card>

  <Card title="Personnalisation avec les Custom Events" icon="bolt" href="./personalization-custom-event">
    Personnalisez les messages de Journey en utilisant les propriétés d'événements capturées lorsque les utilisateurs entrent ou progressent dans un Journey. Idéal pour les workflows comportementaux et déclenchés par événement.
  </Card>

  <Card title="Propriétés et Tags" icon="tag" href="./personalization-properties-and-tags">
    Utilisez les propriétés stockées des utilisateurs, des Subscriptions, des messages et des applications pour personnaliser le contenu à travers les messages, les Templates, les Journey Webhooks et les Event Streams.
  </Card>

  <Card title="API custom_data" icon="code" href="./personalization-api-custom-data">
    Transmettez des données par message et transitoires depuis votre backend en utilisant l'API Create Message. Idéal pour les OTP, paniers, tableaux et la personnalisation transactionnelle en masse.
  </Card>

  <Card title="Dynamic Content CSV" icon="file-csv" href="./dynamic-content">
    Téléchargez des fichiers CSV dans le tableau de bord pour personnaliser les campagnes à grande échelle. Chaque ligne correspond à un destinataire et peut être référencée en utilisant Liquid.
  </Card>
</Columns>

### Tutoriels

Ces guides montrent comment implémenter la personnalisation en pratique.

<Columns cols={2}>
  <Card title="Vérification, lien magique et OTP" icon="key" href="./example-verification-magic-link-otp">
    Envoyez des messages de vérification sécurisés en utilisant des mots de passe à usage unique, des liens magiques ou des URL personnalisées avec la personnalisation pilotée par API.
  </Card>

  <Card title="Journey de panier abandonné" icon="cart-shopping" href="./abandoned-cart">
    Construisez un Journey automatisé qui détecte l'activité du panier, attend l'inactivité, envoie un rappel personnalisé et fait sortir les utilisateurs immédiatement après l'achat.
  </Card>

  <Card title="Confirmations de réservation" icon="calendar" href="./booking-confirmations">
    Envoyez des messages de confirmation et de relance de réservation en utilisant les Custom Events, les Journeys et les Data Feeds basés sur le statut de réservation en temps réel.
  </Card>

  <Card title="Messages transactionnels" icon="receipt" href="./transactional-messages">
    Apprenez à envoyer des reçus, des alertes, des confirmations et d'autres messages transactionnels sur tous les canaux en utilisant les API et l'automatisation.
  </Card>

  <Card title="Exemples de personnalisation in-app" icon="mobile" href="./personalization-properties-and-tags">
    Découvrez des exemples pratiques d'utilisation des Tags et des propriétés pour personnaliser les messages in-app pour différents utilisateurs et segments.
  </Card>
</Columns>
