> ## 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.

# Personnaliser avec les propriétés

> Personnalisez les messages OneSignal en utilisant des propriétés prédéfinies et des Tags de données personnalisés. Accédez aux données au niveau utilisateur, abonnement, Journey, message, template, application et organisation avec la syntaxe Liquid dans les e-mails, les notifications push, les SMS et les webhooks.

Utilisez les propriétés (telles que les Tags utilisateur et les identifiants comme l'External ID) pour personnaliser les messages et les charges utiles de livraison avec la [syntaxe Liquid](./using-liquid-syntax).

OneSignal résout les espaces réservés Liquid **au moment de l'envoi**, en utilisant les données déjà stockées sur l'utilisateur, la Subscription, le Journey, le message, le template, l'application ou l'organisation. Vous pouvez utiliser ces données pour personnaliser les messages, les [webhooks de Journey](./journeys-webhook) et les [Event Streams](./event-streams).

***

## Quand utiliser la personnalisation par propriétés

Utilisez la personnalisation par propriétés pour générer le contenu au moment de l'envoi en utilisant des données déjà existantes dans OneSignal — le plus souvent les Tags utilisateur, l'External ID et les champs d'abonnement comme l'adresse e-mail ou le numéro de téléphone.

Cette approche est adaptée lorsque :

* Les données sont déjà stockées dans OneSignal
* Vous souhaitez que les espaces réservés Liquid soient automatiquement remplacés lors de l'envoi du message
* Vous n'avez pas besoin de récupérer ou de calculer des données fraîches au moment de la livraison

<Note>
  Si la valeur doit être récupérée ou calculée au moment de l'envoi (par exemple, des prix en temps réel ou un état de stock), utilisez les [Data Feeds](./data-feeds) ou notre [API avec `custom_data`](./personalization-api-custom-data).

  Si la valeur provient de l'événement qui a fait entrer ou progresser un utilisateur dans un Journey, utilisez la [personnalisation par Custom Events](./personalization-custom-event).
</Note>

### Prise en charge des canaux

Chaque canal prend en charge des types de propriétés et des champs spécifiques.

<Tabs>
  <Tab title="E-mail">
    Prend en charge les [propriétés utilisateur et d'abonnement](#user-&-subscription-properties) dans :

    * Objet, Répondre à et Pré-en-tête
    * Corps du message
    * Attributs HTML (par exemple : `<img src="{{ image_url }}" />`)
    * Actions des boutons (URL, mailto, etc.)
  </Tab>

  <Tab title="Push">
    Prend en charge les [propriétés utilisateur et d'abonnement](#user-&-subscription-properties) dans :

    * Titre (`headings`), Sous-titre, Corps (`contents`)
    * URL de l'image
    * URL de lancement : `https://example.com/{{last_category_viewed}}`

    <Warning>
      Le champ `data` (données supplémentaires) ne prend pas en charge la syntaxe Liquid.
    </Warning>
  </Tab>

  <Tab title="SMS">
    Prend en charge les [propriétés utilisateur et d'abonnement](#user-&-subscription-properties) dans :

    * Corps du message (`contents`)
  </Tab>

  <Tab title="Messages in-app">
    Seule la substitution de Tags est prise en charge. Les propriétés, les Custom Events et les autres sources de données ne sont pas disponibles pour le moment.

    * Les Tags doivent être définis avant que l'utilisateur ne démarre une nouvelle session de l'application.
    * La substitution de Tags peut ne pas apparaître lors de l'utilisation des flux d'envoi test.

    **Éditeur de blocs :** Blocs Texte, Bouton et Image
    **Éditeur HTML :** Éléments texte et attributs (`src`, `href`, `action`, `data`)
  </Tab>

  <Tab title="Live Activities">
    Prend en charge les [propriétés utilisateur et d'abonnement](#user-&-subscription-properties) dans :

    * `event_updates`
    * `contents`
    * `headings`
  </Tab>
</Tabs>

***

## Fonctionnement de la personnalisation par propriétés

OneSignal remplace les espaces réservés Liquid par les valeurs de propriété correspondantes pour l'utilisateur et la Subscription auxquels le message est envoyé.

```liquid Liquid theme={null}
Hi {{ first_name | default: "friend" }}!
Congrats on reaching level {{ level | default: "1" }}!
```

Si un utilisateur a les Tags `first_name: Jon` et `level: 5`, il verra :

```liquid Text theme={null}
Hi Jon!
Congrats on reaching level 5!
```

## Si un utilisateur n'a aucun tag défini, il verra les valeurs par défaut à la place.

## Référence des objets Liquid de propriétés

Utilisez cette section pour consulter les noms exacts des objets et des champs disponibles en Liquid.

### Propriétés utilisateur et d'abonnement

Utilisez `user` pour les données au niveau utilisateur. Utilisez `subscription` lorsque vous avez besoin de valeurs spécifiques au canal, comme l'adresse e-mail ou le numéro de téléphone.

<ParamField body="user.tags">
  Les [Tags](./add-user-data-tags) de l'utilisateur. Vous pouvez référencer les Tags de plusieurs manières :

  * Utilisez la `key` directement ou placez la clé après `tags`
  * Exemple de Tags définis : `first_name: Jon, level: 5`

  ```liquid Liquid theme={null}
  Your first name is {{ first_name }}.
  Your first name is {{ user.tags.first_name }}.
  Your level is {{ level }}.
  Your level is {{ user.tags.level }}.
  ```

  * Itérez sur les Tags avec la syntaxe de boucle for. Cet exemple affiche les paires clé:valeur séparées par des virgules.

  ```liquid Liquid theme={null}
  {% for tag in user.tags %}
  {{ tag[0] }}: {{ tag[1] }}
  {% unless forloop.last %},
  {% endunless %}{% endfor %}
  ```
</ParamField>

<ParamField body="user.external_id">
  L'[External ID](./users#external-id) de l'utilisateur.

  ```liquid Liquid theme={null}
  Your user ID is {{ user.external_id }}.
  Your user ID is {{ subscription.external_id }}.
  ```
</ParamField>

<ParamField body="user.onesignal_id">
  L'[identifiant OneSignal](./users) de l'utilisateur.

  ```liquid Liquid theme={null}
  Your OneSignal user ID is {{ user.onesignal_id }}.
  ```
</ParamField>

<ParamField body="subscription.email">
  L'adresse e-mail de la Subscription e-mail à laquelle le message est envoyé.

  ```liquid Liquid theme={null}
  Thanks for subscribing with email {{ subscription.email }}.
  ```
</ParamField>

<ParamField body="subscription.phone_number">
  Le numéro de téléphone de la Subscription SMS à laquelle le message est envoyé.

  ```liquid Liquid theme={null}
  Thanks for subscribing with phone number {{ subscription.phone_number }}.
  ```
</ParamField>

<ParamField body="user.language">
  Le code de langue de l'utilisateur.

  ```liquid Liquid theme={null}
  Preferred language: {{ user.language }}
  Preferred language: {{ subscription.language }}
  ```
</ParamField>

<ParamField body="user.subscriptions">
  Les [Subscriptions](./subscriptions) de l'utilisateur.

  * Itérez sur les Subscriptions avec la syntaxe de boucle for.
  * Cet exemple affiche le token et l'identifiant de chaque Subscription, séparés par des virgules.

  ```json JSON theme={null}
  {
    "subscriptions": "{% for subscription in user.subscriptions %}{% if subscription.subscription_token %}{{ subscription.subscription_token }}: {{ subscription.id }}{% unless forloop.last %}, {% endunless %}{% endif %}{% endfor %}"
  }
  ```
</ParamField>

<ParamField body="subscription.unsubscribe_token">
  Le token utilisé avec l'[API de désabonnement par e-mail avec token](/reference/unsubscribe-with-token).

  ```liquid theme={null}
  Unsubscribe: https://your-domain.com/unsubscribe?token={{ subscription.unsubscribe_token }}
  ```
</ParamField>

### Propriétés de Journey

L'objet `journey` vous permet de référencer le nom du Journey ou d'accéder à la [personnalisation par Custom Events](./personalization-custom-event) pour le Journey.

<ParamField body="journey.name">
  Le nom du Journey.

  ```json JSON theme={null}
  {
    "journey_name": "{{ journey.name }}"
  }
  ```
</ParamField>

### Propriétés de message

L'objet `message` donne accès à l'identifiant du message, au nom et à l'identifiant du template, ce qui peut être utile pour les [Event Streams](./event-streams), ainsi qu'à l'accès aux [custom\_data](./personalization-api-custom-data) pour personnaliser les messages envoyés depuis votre backend.

<ParamField body="message.id">
  L'identifiant du message défini par OneSignal.

  ```json theme={null}
  {
    "message_id": "{{ message.id }}"
  }
  ```
</ParamField>

<ParamField body="message.name">
  Le nom du message défini par vous, l'expéditeur.

  ```json theme={null}
  {
    "message_name": "{{ message.name }}"
  }
  ```
</ParamField>

<ParamField body="message.template_id">
  L'identifiant du template défini par OneSignal.

  ```json theme={null}
  {
    "template_id": "{{ message.template_id }}"
  }
  ```
</ParamField>

### Propriétés de template

L'objet `template` donne accès à l'identifiant et au nom du [Template](./templates) utilisé pour envoyer le message. Cela peut être utile pour les [Event Streams](./event-streams).

<ParamField body="template.id">
  L'identifiant du template défini par OneSignal.

  ```json theme={null}
  {
    "template_id": "{{ template.id }}"
  }
  ```
</ParamField>

<ParamField body="template.name">
  Le nom du template défini par vous, l'expéditeur.

  ```json theme={null}
  {
    "template_name": "{{ template.name }}"
  }
  ```
</ParamField>

***

### Propriétés d'application et d'organisation

Les objets `app` et `org` fournissent des détails sur l'[application et l'organisation](./apps-organizations) qui ont envoyé le message. Cela peut être utile pour les [Event Streams](./event-streams).

<ParamField body="app.id">
  L'identifiant de l'application défini par OneSignal.

  ```json theme={null}
  {
    "app_id": "{{ app.id }}"
  }
  ```
</ParamField>

<ParamField body="app.name">
  Le nom de l'application défini par vous, le propriétaire de l'application.

  ```json theme={null}
  {
    "app_name": "{{ app.name }}"
  }
  ```
</ParamField>

<ParamField body="org.id">
  L'identifiant de l'organisation défini par OneSignal.

  ```json theme={null}
  {
    "org_id": "{{ org.id }}"
  }
  ```
</ParamField>

<ParamField body="org.name">
  Le nom de l'organisation défini par vous, le propriétaire de l'organisation.

  ```json theme={null}
  {
    "org_name": "{{ org.name }}"
  }
  ```
</ParamField>

***

## Exemple : Panier abandonné avec des Tags

Cet exemple montre comment personnaliser les messages de panier abandonné en utilisant les Tags utilisateur. Il s'appuie sur le tutoriel [Panier abandonné](./abandoned-cart).

**Exemple de Tags définis :**

```json JSON theme={null}
{
  "cart_updated": "unix_timestamp_seconds",
  "product_image": "https://i.imgur.com/ssPCfbC.png",
  "product_name": "24 Pack of Acorns",
  "product_quantity": "1",
  "product_price": "$12.99",
  "cart_items_count": "4",
  "cart_url": "https://yourdomain.com/cart"
}
```

### Template e-mail

<Steps>
  <Step title="Créer un nouveau template e-mail">
    Naviguez vers **Messages > Templates > New Email Template** et ouvrez l'éditeur glisser-déposer.
  </Step>

  <Step title="Ajouter la structure de mise en page">
    Créez cinq lignes :

    * Lignes 1, 2 et 4 : une colonne avec un bloc **Paragraphe**
    * Ligne 3 : quatre colonnes avec **HTML | Paragraphe | Paragraphe | Paragraphe**
    * Ligne 5 : une colonne avec un bloc **Bouton**

    <Frame caption="Template e-mail de départ pour panier abandonné">
      <img src="https://mintcdn.com/onesignal/v-hm59YoewwF90UX/images/email/starter-template-abandoned-cart.png?fit=max&auto=format&n=v-hm59YoewwF90UX&q=85&s=551e9ec4618f64fdc0b6ab610a537c48" width="2968" height="2124" data-path="images/email/starter-template-abandoned-cart.png" />
    </Frame>
  </Step>

  <Step title="Ajouter du Liquid aux blocs de paragraphe">
    Dans la ligne 1, ajoutez :

    ```liquid Liquid theme={null}
    We're holding onto {{cart_items_count}} items in your cart, but don't wait too long, other squirrels are getting ahead!
    ```

    Dans la ligne 2, ajoutez une description de ce que l'utilisateur regarde :

    ```liquid Text theme={null}
    Currently in your cart:
    ```

    Dans la ligne 4, ajoutez un autre appel à l'action :

    ```liquid Text theme={null}
    Checkout now while supplies last!
    ```
  </Step>

  <Step title="Afficher l'article le plus récent">
    Dans la ligne 3, configurez les quatre colonnes :

    **Colonne 1 (bloc HTML) :**

    ```html HTML theme={null}
    <img src="{{product_image}}" alt="Image" style="max-width:100%;" />
    ```

    **Colonnes 2 à 4 (blocs Texte) :**

    * Colonne 2 : `{{product_name}}`
    * Colonne 3 : `{{product_quantity}}`
    * Colonne 4 : `{{product_price}}`
  </Step>

  <Step title="Ajouter l'URL du panier au bouton">
    Dans le bloc **Bouton** de la ligne 5, définissez l'URL d'action sur :

    ```liquid theme={null}
    {{cart_url}}
    ```

    <Frame caption="Template e-mail de base terminé pour panier abandonné sans mise en forme">
      <img src="https://mintcdn.com/onesignal/v-hm59YoewwF90UX/images/email/finished-template-abandoned-cart-tags.png?fit=max&auto=format&n=v-hm59YoewwF90UX&q=85&s=a46cb86b4725c27c360b9f7cd96ab305" width="2968" height="2124" data-path="images/email/finished-template-abandoned-cart-tags.png" />
    </Frame>
  </Step>

  <Step title="Tester et prévisualiser le template">
    Envoyez un e-mail test à vous-même en utilisant le bouton **Test & preview**.

    * Assurez-vous que les Tags sont définis sur votre Subscription e-mail.

    <Frame caption="Prévisualisation de l'e-mail avec les Tags">
      <img src="https://mintcdn.com/onesignal/v-hm59YoewwF90UX/images/email/test-email-with-tags.png?fit=max&auto=format&n=v-hm59YoewwF90UX&q=85&s=307a846a3fec6676658ac4c653590110" width="2968" height="2124" data-path="images/email/test-email-with-tags.png" />
    </Frame>
  </Step>

  <Step title="Styliser le template">
    <Check>Succès ! Vous pouvez maintenant appliquer votre propre mise en forme au template. Consultez [Concevoir des e-mails avec le glisser-déposer](./design-emails-with-drag-and-drop).</Check>
  </Step>
</Steps>

### Template 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](./using-liquid-syntax#if-elsif-else).

```liquid Liquid theme={null}
{% assign item_count = cart_items_count | plus: 0 %}
{% if item_count == 1 %}
You left {{product_name}} in your cart.
{% endif %}
{% if item_count == 2 %}
You left {{product_name}} and {{item_count | minus: 1}} more item in your cart.
{% endif %}
{% if item_count > 2 %}
You left {{product_name}} and {{item_count | minus: 1}} more items in your cart.
{% endif %}
```

**Champ de l'image :**

```liquid Liquid theme={null}
{{product_image | default: "https://i.imgur.com/ssPCfbC.png"}}
```

**Champ de l'URL de lancement :**

```liquid theme={null}
{{cart_url | default: "https://yourdomain.com/cart"}}
```

<Frame caption="Prévisualisation de la personnalisation du template push avec Test & preview">
  <img src="https://mintcdn.com/onesignal/Up-pAJT_jbhthm6E/images/push/preview-push-template-personalization-with-test-preview.png?fit=max&auto=format&n=Up-pAJT_jbhthm6E&q=85&s=97db90a05acdf4ed30f54a76b1d63b98" width="2880" height="2036" data-path="images/push/preview-push-template-personalization-with-test-preview.png" />
</Frame>

<Check>Succès ! Vous pouvez maintenant créer d'autres templates et les utiliser dans le [Journey de panier abandonné](./abandoned-cart).</Check>

***

## Exemple : Personnaliser un message in-app avec des Tags

Cet exemple montre un message in-app de récompense personnalisé avec des Tags. Le message in-app substitue les valeurs de Tag dans plusieurs types de blocs.

Dans le message configuré :

* **Bloc de texte** — affiche le niveau complété et la récompense pour ce niveau
* **Bloc d'image** — affiche l'image pour cette récompense, avec une image par défaut comme repli
* **Texte du bouton 2** — affiche la valeur de la récompense, avec une valeur par défaut de `100`
* **Image d'arrière-plan** — définie à partir d'une valeur de Tag

<Frame caption="Éditeur de message in-app avec substitution de Tags configurée dans les blocs de texte, d'image et de bouton">
  <img src="https://mintcdn.com/onesignal/56ctKxZSV4m5VEkn/images/docs/b697ab5-config1.png?fit=max&auto=format&n=56ctKxZSV4m5VEkn&q=85&s=c40e541c296b138a7f04ac561b3b0c64" alt="" width="872" height="968" data-path="images/docs/b697ab5-config1.png" />
</Frame>

Le message s'affiche au début de la session en utilisant les valeurs de Tag actuelles de l'utilisateur :

<Frame caption="Message in-app affiché à l'utilisateur avec les valeurs substituées depuis les Tags">
  <img src="https://mintcdn.com/onesignal/tc0EvmtSSX56SX0c/images/docs/973f097-JustTheIAMTagSub.png?fit=max&auto=format&n=tc0EvmtSSX56SX0c&q=85&s=0626ef7b31dfbfece633e74b072fbff5" style={{ width:"100%" }} width="338" height="607" data-path="images/docs/973f097-JustTheIAMTagSub.png" />
</Frame>

<Note>
  Consultez l'onglet **Messages in-app** dans [Prise en charge des canaux](#prise-en-charge-des-canaux) ci-dessus pour les blocs, attributs et règles de timing pris en charge. Deux rappels qui méritent d'être soulignés :

  * **Les Tags doivent être définis avant que l'utilisateur ne démarre une nouvelle session de l'application.** Les Tags mis à jour en cours de session ne sont pas rendus dans les messages in-app affichés pendant cette session.
  * **La substitution de Tags n'est pas rendue dans les envois "Envoyer un message de test".** Déclenchez le message depuis une session réelle pour vérifier la substitution.
  * [La substitution de propriétés](./using-liquid-syntax#property-include) n'est pas prise en charge dans les messages in-app.
</Note>

***

## Pages associées

<Columns cols={2}>
  <Card title="Personnalisation des messages" href="./message-personalization" icon="sparkles">
    Aperçu de toutes les options de personnalisation dans OneSignal, y compris quand utiliser les Custom Events par rapport aux autres méthodes.
  </Card>

  <Card title="Tags" href="./add-user-data-tags" icon="tag">
    Découvrez comment définir des Tags sur les utilisateurs via le SDK, l'API ou l'import CSV.
  </Card>

  <Card title="Utiliser la syntaxe Liquid" href="./using-liquid-syntax" icon="droplet">
    Référence complète de Liquid avec les filtres, les conditions, les boucles et la manipulation de chaînes.
  </Card>

  <Card title="Templates" href="./templates" icon="file">
    Créez et gérez des Templates de messages réutilisables pour les utiliser dans les Journeys.
  </Card>

  <Card title="Tutoriel panier abandonné" href="./abandoned-cart" icon="cart-shopping">
    Construisez un Journey de panier abandonné en utilisant les Tags et les propriétés.
  </Card>
</Columns>

<Info>
  Besoin d'aide ?

  Discutez avec notre équipe d'assistance ou envoyez un e-mail à `support@onesignal.com`

  Veuillez 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](/docs/en/capturing-a-debug-log) pertinents

  Nous serons ravis de vous aider !
</Info>

***
