# Utilisation des modèles Liquid

Les modèles Liquid élargissent considérablement les capacités de personnalisation de Pushwoosh en mettant en œuvre une logique sophistiquée en plus de l'utilisation habituelle du [Contenu Dynamique](/fr/developer/guides/personalization/dynamic-content/).

La personnalisation des messages dans Pushwoosh est basée sur les [Tags (données utilisateur)](/fr/developer/guides/audience-and-segmentation/tags/). Pushwoosh offre une variété de [Tags par défaut](/fr/developer/guides/audience-and-segmentation/tags/#default-tags) et de [Tags personnalisés](/fr/developer/guides/audience-and-segmentation/tags/#custom-tags). En les utilisant, vous pouvez spécifier le prénom de l'utilisateur, sa ville, son historique d'achat, etc. pour envoyer un message plus personnalisé, par exemple : Bonjour `{First_name}`, merci d'avoir commandé `{item}`.

Les modèles Liquid ajoutent plus de logique au contenu dynamique. Par exemple, si le tag d'abonnement d'un utilisateur contient « gratuit », vous pouvez lui envoyer un message : « Profitez de votre réduction de 10 % ».

Modifier le contenu du message en fonction des identifiants, des comportements et des préférences des utilisateurs est le moyen le plus efficace d'augmenter la pertinence et d'obtenir des résultats plus impressionnants de vos campagnes marketing.

## Syntaxe

Les modèles de contenu basés sur [Liquid de Shopify](https://shopify.github.io/liquid/) utilisent une combinaison de [**tags**](/fr/developer/guides/personalization/liquid-templates/#tags), d'[**objets**](/fr/developer/guides/personalization/liquid-templates/#objects) et de [**filtres**](/fr/developer/guides/personalization/liquid-templates/#filters) pour charger du contenu dynamique. Les modèles de contenu vous permettent d'accéder à certaines variables depuis un modèle et d'afficher leurs données sans avoir à connaître quoi que ce soit sur les données elles-mêmes.

<Aside type="note">
Pour en savoir plus sur la syntaxe, veuillez vous référer à la [documentation de Liquid](https://shopify.github.io/liquid/basics/introduction/).
</Aside>

### Objets

Les `objets` définissent le contenu qui sera affiché à un utilisateur. Les `objets` doivent être entourés de doubles accolades : `{{ }}`

Par exemple, lors de la personnalisation d'un message, envoyez `{{Name}}` dans son corps pour ajouter les noms des utilisateurs au contenu du message. Le nom de l'utilisateur (valeur du tag Name) remplacera l'objet Liquid dans le message que l'utilisateur verra.

<Tabs>
  <TabItem label="Entrée">

```

Bonjour {{Name}} ! Nous sommes ravis de vous revoir !

```

  </TabItem>

  <TabItem label="Sortie">
    Bonjour Anna ! Nous sommes ravis de vous revoir !
  </TabItem>
</Tabs>

### Tags

Les `tags` créent la logique et le flux de contrôle pour les modèles. Les délimiteurs pourcentage-accolade `{%` et `%}` et le texte qu'ils entourent ne produisent aucune sortie visible lorsque le modèle est rendu. Cela vous permet d'assigner des variables et de créer des conditions ou des boucles sans montrer aucune de la logique Liquid à un utilisateur.

Par exemple, en utilisant le tag `if`, vous pouvez varier la langue du message en fonction de la langue définie sur l'appareil de l'utilisateur :

<Tabs>
  <TabItem label="Entrée">

```liquid
{% if Language == 'fr' %}
Salut!
{% else %}
Hello!
{% endif %}
````

  </TabItem>

  <TabItem label="Sortie (fr)">
    Salut!
  </TabItem>

  <TabItem label="Sortie (es)">
    Hello!
  </TabItem>
</Tabs>

### Opérateurs de tags

<table data-header-hidden><thead><tr><th width="189.5" align="center">Opérateur</th><th>Description</th></tr></thead><tbody><tr><td align="center"><code>==</code></td><td>égal à</td></tr><tr><td align="center"><code>!=</code></td><td>différent de</td></tr><tr><td align="center"><code>></code></td><td>supérieur à</td></tr><tr><td align="center"><code>&#x3C;</code></td><td>inférieur à</td></tr><tr><td align="center"><code>>=</code></td><td>supérieur ou égal à</td></tr><tr><td align="center"><code>&#x3C;=</code></td><td>inférieur ou égal à</td></tr><tr><td align="center"><code>or</code></td><td>ou logique</td></tr><tr><td align="center"><code>and</code></td><td>et logique</td></tr><tr><td align="center"><code>contains</code></td><td>vérifie la présence d'une sous-chaîne dans une chaîne de caractères ou un tableau de chaînes de caractères</td></tr></tbody></table>

<Aside type="note">
Dans les tags avec plus d'un opérateur `and` ou `or`, les opérateurs sont vérifiés dans l'ordre _de droite à gauche_. Vous ne pouvez pas changer l'ordre des opérations en utilisant des parenthèses — les parenthèses sont des caractères invalides dans Liquid et empêcheront vos tags de fonctionner.
</Aside>

### Filtres

Les `filtres` modifient la sortie d'un objet ou d'une variable Liquid. Ils sont utilisés à l'intérieur des doubles accolades `{{ }}` et de l'assignation de variables, et sont séparés par un caractère pipe `|`. Plusieurs filtres peuvent être utilisés sur une seule sortie, et sont appliqués de gauche à droite.

<Tabs>
<TabItem label="Entrée">

```

{{ Name | capitalize | prepend:"Hello " }}

```

</TabItem>

<TabItem label="Sortie">

Hello Anna

</TabItem>
</Tabs>

## Utilisation des modèles Liquid dans les messages envoyés via l'API

Utilisez la syntaxe Liquid dans vos requêtes [`createMessage`](/fr/developer/api-reference/messages-api/#createmessage) pour implémenter les modèles Liquid. Les modèles sont disponibles pour le paramètre "content" de la requête `createMessage`, ainsi que pour tout autre paramètre supportant le Contenu Dynamique, en particulier les paramètres spécifiques à la plateforme "title", "subtitle" et "image".

En utilisant des modèles de contenu, vous pouvez soit spécifier les données dans vos requêtes API (en passant le paramètre "template\_bindings") soit obtenir les données à partir des valeurs de Tag stockées sur les appareils des utilisateurs (en n'utilisant pas le paramètre "template\_bindings"). De cette façon, vous êtes en mesure de construire des campagnes push basées sur l'utilisateur contenant un contenu extrêmement pertinent.

<Aside type="note">
Veuillez noter que, contrairement au Contenu Dynamique, les variables dans les modèles doivent être entourées de doubles accolades comme suit : `{{myVariable}}`.
</Aside>

Pour définir la logique du modèle en utilisant les Tags avec des espaces dans leurs noms, utilisez la technique suivante :

**Exemple**

```
{% capture my_tag %}{{My Tag}}{% endcapture %}
{% if my_tag == 'value' %}
Contenu à envoyer dans ce cas
{% else %}
Contenu à envoyer sinon
{% endif %}
```

## Cas d'utilisation des modèles Liquid

Vous trouverez ici plusieurs cas d'utilisation où les modèles Liquid sont utiles.

### Push multilingue

Les modèles Liquid permettent de spécifier précisément dans quelle langue les utilisateurs doivent recevoir vos messages push. Regardez l'exemple simple de la requête API et du message reçu en fonction des liaisons de modèle utilisées dans la requête.

<Tabs>
<TabItem label="Entrée Liquid">

```

{% if Language == 'es' %}
¡Hola!
{% else %}
Hello!
{% endif %}

````

</TabItem>

<TabItem label="Requête API">

```javascript
{
  "request": {
    "application": "XXXXX-XXXXX", // Code d'application Pushwoosh
    "auth": "yxoPUlw.....IyEX4H", // Jeton d'accès API du Panneau de Contrôle Pushwoosh
    "notifications" : [ // paramètres du message push
      {
       "content": "{% raw %}
{% if language == 'es' %}¡Hola!{% else %}hello!{% endif %}
{% endraw %}",
        "template_bindings": { // optionnel. Lorsque aucun template_bindings n'est passé dans une requête, les valeurs de Tag de l'appareil sont utilisées.
         "language" : "es"
        }
      }
    ]
  }
}
````

</TabItem>

<TabItem label="Sortie">

**La langue est 'es'** :
¡Hola!

**La langue est 'en'** :
Hello!

</TabItem>
</Tabs>

### Incitation à la mise à niveau de l'abonnement

Encouragez vos clients à mettre à niveau leur abonnement en fonction de leur plan actuel.

<Tabs>
  <TabItem label="Entrée Liquid">

```

{% if Subscription == 'Basic' %}
    Passez à Silver pour obtenir plus de fonctionnalités produit et un support 24/7.
{% elsif Subscription == 'Silver' %}
    Passez à Gold pour un support prioritaire et des fonctionnalités avancées.
{% else %}
    Veuillez contacter votre gestionnaire pour renouveler votre abonnement.
{% endif %}

````

</TabItem>

<TabItem label="Requête API">

```json
{
  "request": {
    "application": "XXXXX-XXXXX", // Code d'application Pushwoosh
    "auth": "yxoPUlw.....IyEX4H", // Jeton d'accès API du Panneau de Contrôle Pushwoosh
    "notifications" : [ // paramètres du message push
      {
       "content": "{% raw %}
{% if Subscription == 'Basic' %}Passez à Silver pour obtenir plus de fonctionnalités produit et un support 24/7.{% elsif Subscription == 'Silver' %}Passez à Gold pour un support prioritaire et des fonctionnalités avancées.{% else %}Veuillez contacter votre gestionnaire pour renouveler votre abonnement. {% endif %}
{% endraw %}",
        "template_bindings": { // optionnel. Lorsque aucun template_bindings n'est passé dans une requête, les valeurs de Tag de l'appareil sont utilisées.
         "language" : "es"
        }
      }
    ]
  }
}
````

  </TabItem>

  <TabItem label="Sortie">

**Pour les utilisateurs avec le plan d'abonnement Basic :**
Passez à Silver pour obtenir plus de fonctionnalités produit et un support 24/7.

**Pour les utilisateurs avec le plan d'abonnement Silver :**
Passez à Gold pour un support prioritaire et des fonctionnalités avancées.

**Pour les utilisateurs avec d'autres plans :**
Veuillez contacter votre gestionnaire pour renouveler votre abonnement.

  </TabItem>
</Tabs>

### Tags de liste

Les modèles de contenu sont très utiles pour gérer les Tags de type Liste.

#### Taille variable

L'un des cas d'utilisation possibles est de livrer un contenu différent en fonction du nombre de valeurs que le Tag contient. Par exemple, vous pouvez offrir différentes réductions aux clients ayant des comportements différents. Disons que le client a des articles dans sa WishList — encouragez-le à acheter avec la réduction la plus appropriée en fonction du nombre de produits qu'il va acheter !

<Tabs>
<TabItem label="Entrée Liquid">

```

{% if WishList.size >= 3 %}
Obtenez 20% de réduction sur votre prochain achat !
{% elsif WishList.size == 2 %}
Obtenez une réduction de 10% sur votre prochain achat !
{% else %}
Hé, jetez un œil aux nouveaux vêtements d'extérieur !
{% endif %}

````

</TabItem>

<TabItem label="Requête API">

```javascript
{
  "request": {
    "application": "XXXXX-XXXXX", // Code d'application Pushwoosh
    "auth": "yxoPUlw.....IyEX4H", // Jeton d'accès API du Panneau de Contrôle Pushwoosh
    "notifications" : [ // paramètres du message push
      {
       "content": "{% raw %}
{% if WishList.size >= 3 %}Obtenez 20% de réduction sur votre prochain achat !{% elsif WishList.size == 2 %}Obtenez une réduction de 10% sur votre prochain achat !{% else %}Hé, jetez un œil aux nouveaux vêtements d'extérieur !{% endif %}
{% endraw %}",
        "template_bindings": {
         "WishList" : ["Skinny Low Ankle Jeans", "Linen Trenchcoat", "High Waisted Denim Skirt", "Strappy Tiered Maxi Dress"]
        }
      }
    ]
  }
}
````

</TabItem>

<TabItem label="Taille WishList ≥ 3">

<img src="/personalization-liquid-templates-1.webp" alt="Aperçu de l'e-mail avec une taille de liste de souhaits supérieure ou égale à 3" width="200"/>

</TabItem>

<TabItem label="Taille WishList = 2">

<img src="/personalization-liquid-templates-2.webp" alt="Aperçu de l'e-mail avec une taille de liste de souhaits égale à 2" width="200"/>

</TabItem>
</Tabs>

#### La variable contient

Un autre cas que vous pourriez avoir besoin de couvrir est de traiter les valeurs des Tags de Liste et de livrer le contenu le plus pertinent en fonction des valeurs que le Tag contient.

<Tabs>
<TabItem label="Entrée Liquid">

```

{% if WishList contains 'Skinny Low Ankle Jeans' %}
Obtenez 20% de réduction sur les produits de votre liste de souhaits !
{% else %}
Hé, jetez un œil aux tout nouveaux Skinny Low Ankle Jeans !
{% endif %}

````

</TabItem>

<TabItem label="Requête API">

```javascript
{
  "request": {
    "application": "C90C0-0E786",
    "auth": "yxoPUlw.....IyEX4H", // Jeton d'accès API du Panneau de Contrôle Pushwoosh
    "notifications" : [ // paramètres du message push
      {
       "content": "{% raw %}
{% if WishList contains 'Skinny Low Ankle Jeans' %}Obtenez 20% de réduction sur votre prochain achat !{% else %}Hé, jetez un œil aux tout nouveaux Skinny Low Ankle Jeans !{% endif %}
{% endraw %}",
        "template_bindings": {
         "WishList" : ["Skinny Low Ankle Jeans", "Linen Trenchcoat", "High Waisted Denim Skirt", "Strappy Tiered Maxi Dress"]
        }
      }
    ]
  }
}
````

</TabItem>

<TabItem label="La variable contient des données">

<img src="/personalization-liquid-templates-3.webp" alt="Modèle personnalisé avec des données" width="200"/>

</TabItem>

<TabItem label="La variable ne contient pas de données">

<img src="/personalization-liquid-templates-4.webp" alt="Vue de repli lorsque les données sont manquantes" width="200"/>

</TabItem>
</Tabs>

### Pluriels

En utilisant les modèles de contenu, vous pouvez ajuster le contenu du message en fonction du comportement des utilisateurs. Par exemple, vous pouvez modifier le texte du message pour qu'il contienne des mots au pluriel si le Tag de Liste contient plus d'une valeur.

<Tabs>
<TabItem label="Entrée Liquid">

```
    Obtenez 20% de réduction sur l'article
{% if WishList.size > 1 %}
    s de votre WishList !
{% else %}
    de votre Wishlist !
{% endif %}

````

</TabItem>

<TabItem label="Requête API">

```javascript
{
  "request": {
    "application": "C90C0-0E786",
    "auth": "yxoPUlw.....IyEX4H", // Jeton d'accès API du Panneau de Contrôle Pushwoosh
    "notifications" : [ // paramètres du message push
      {
       "content": "Obtenez 20% de réduction sur l'article{% raw %}
{% if WishList.size > 1 %}s de votre WishList !{% else %} de votre Wishlist !{% endif %}
{% endraw %}",
        "template_bindings": { // optionnel. Lorsque aucun template_bindings n'est passé dans une requête, les valeurs de Tag de l'appareil sont utilisées.
         "WishList" : ["Skinny Low Ankle Jeans", "Linen Trenchcoat", "High Waisted Denim Skirt", "Strappy Tiered Maxi Dress"]
        }
      }
    ]
  }
}
````

</TabItem>

<TabItem label="Pluriel">

<img src="/personalization-liquid-templates-5.webp" alt="Exemple de modèle au pluriel" width="200"/>

</TabItem>

<TabItem label="Singulier">

<img src="/personalization-liquid-templates-6.webp" alt="Exemple de modèle au singulier" width="200"/>

</TabItem>
</Tabs>

### Fuseau horaire

Le modèle pour les fuseaux horaires convertit la date et l'heure en fonction du fuseau horaire spécifié.

<Tabs>
<TabItem label="Entrée Liquid">
```
{{ MyDate | timezone: MyTimezone | date: \"%Y-%m-%d %H:%M\" }}
```
</TabItem>

<TabItem label="Requête API">
```javascript title="Exemple"
{
  "request" : {
    "auth" : "3H9bk8w3.....Acge2RbupTB", // Jeton d'accès API du Panneau de Contrôle Pushwoosh
    "application" : "XXXXX-XXXXX", // Code d'application Pushwoosh
    "notifications" : [ // paramètres du message push
      {
        "content": "Date actuelle : {{ MyDate | timezone: MyTimezone | date: \"%Y-%m-%d %H:%M\" }}",
        "template_bindings": { // optionnel. Lorsque aucun template_bindings n'est passé dans une requête, les valeurs de Tag de l'appareil sont utilisées.
         "MyDate" : "2019-07-23 15:00",
         "MyTimezone" : "Asia/Dubai"
        }
      }
    ]
  }
}
```
</TabItem>
<TabItem label="Sortie"> <img src="/personalization-liquid-templates-7.webp" alt="Sortie de date personnalisée dans une notification push" width="200"/>
</TabItem>
</Tabs>

## Contenu connecté

Le contenu connecté est une fonctionnalité des modèles Liquid qui vous permet de récupérer et d'utiliser dynamiquement des données d'une source externe, comme un service web, directement dans vos messages e-mail ou de notification push. Cette fonctionnalité permet une personnalisation en temps réel en récupérant des données JSON à partir d'une URL spécifiée et en les enregistrant dans une variable qui peut être utilisée dans votre contenu.

#### Principaux cas d'utilisation

- **Recommandations de produits** : Affichez des listes de produits personnalisées adaptées à chaque utilisateur.

- **Codes promotionnels** : Insérez des codes promotionnels uniques générés par un service backend.

#### Prérequis

* Pour utiliser le Contenu Connecté, vous devez avoir votre propre service backend qui génère et fournit les données requises (par exemple, codes promotionnels, recommandations de produits) en fonction de l'**ID utilisateur, du HWID ou de tags personnalisés**. Pushwoosh récupère ensuite ces données avant d'envoyer un message.

### Guide de mise en œuvre étape par étape

#### Étape 1. Configurer le service backend

Le service backend doit :

* Accepter une requête contenant des paramètres spécifiques à l'utilisateur (par exemple, `userId`). Le Contenu Connecté prend en charge `UserID`, `HWID`, ou tout tag personnalisé que vous avez configuré dans votre projet.
* Renvoyer une réponse JSON avec les données requises. Ce contenu peut ensuite être inséré dynamiquement dans les messages.

<Aside type="note" title="Comment ça marche">

Le service backend agit comme un fournisseur de données, répondant aux requêtes HTTP avec des informations spécifiques à l'utilisateur.

1. Pushwoosh envoie une requête à votre backend, en passant des identifiants spécifiques à l'utilisateur comme paramètres de requête.
2. Votre backend traite la requête et récupère les données demandées.
3. Votre backend renvoie une réponse JSON.
4. Avant d'envoyer un message, Pushwoosh récupère la réponse JSON du service backend et utilise les valeurs renvoyées (par exemple, le `code`) dynamiquement dans le contenu du message.

**Exemple de réponse**

```
{ "code": "OFFRESPECIALEPOURUTILISATEUR12345" }
```
</Aside>

#### Étape 2. Créer un préréglage avec du Contenu Connecté dans Pushwoosh

1. Dans l'[éditeur de contenu Push](/fr/product/content/push-presets/) ou [Email](/fr/product/content/email-content/drag-and-drop-email-editor/), insérez la syntaxe du Contenu Connecté dans le champ du message.

**Exemple**

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :save result %}
```
**Décomposition de la syntaxe**
| | |
| ----- | ----- |
| `connected_content` | Récupère les données JSON de l'URL backend spécifiée. |
| `http://your-backend-url.com` | Le point de terminaison backend qui renvoie les données requises au format JSON. |
| `userId={{ ${userid} }}` | Un paramètre de requête dynamique qui passe l'ID utilisateur au backend. |
| `:save result` | Stocke la réponse JSON récupérée dans la variable `result` pour une utilisation dans les modèles Liquid. |

![Insérer la syntaxe du Contenu Connecté](/connectedcontent.webp)

**Authentification (optionnel)**

Si votre service backend nécessite une authentification, vous pouvez inclure une clé API ou un jeton dans la requête de Contenu Connecté pour garantir un accès sécurisé.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}&auth=VOTRE_CLE_API :save result %}
```

Vous pouvez également envoyer des données d'authentification (ou toute autre donnée) sous forme d'en-têtes HTTP en utilisant le paramètre optionnel `:headers` — un objet JSON de noms et de valeurs d'en-tête.

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }} :headers {"Authorization": "Bearer VOTRE_JETON", "X-Api-Key": "VOTRE_CLE_API"} :save result %}
```
| | |
| ----- | ----- |
| `:headers {...}` | Un objet JSON d'en-têtes HTTP envoyés avec la requête, par exemple `Authorization: Bearer <token>`. |

<Aside type="caution" title="Valeurs statiques uniquement">
Les variables de personnalisation `${}` ne fonctionnent qu'à l'intérieur de l'URL. Les valeurs à l'intérieur de `:headers` sont statiques et ne sont pas interpolées.
</Aside>

**Utilisation des tags dans le Contenu Connecté**

Pour inclure des tags personnalisés, insérez-les comme paramètres de requête dans la requête de **Contenu Connecté** (`{{ nom_du_tag }}`).

```
{% connected_content http://your-backend-url.com?userId={{ ${userid} }}{{ Language }} :save result %}
```

2. Ensuite, ajoutez le texte du message en incorporant les **données récupérées**, comme ceci :

```

Hé, {{userid}}, attrapez votre code promo personnel - {{result.code}}
```

![Ajouter le texte du message avec les données récupérées](/connectedcontent-1.webp)

3. Après avoir finalisé le contenu du message et configuré les paramètres du préréglage, enregistrez-le pour le réutiliser dans les campagnes.

<video src="/connectedcontent-2.webm" title="Envoyer un message avec du contenu connecté" autoplay loop muted playsinline />

#### Étape 3. Envoyer un message en utilisant le préréglage configuré

Envoyez un message avec ce préréglage en utilisant le formulaire de [push ponctuel](/fr/product/messaging-channels/push-notifications/send-push-notifications/one-time-push/#how-to-send-a-push-notification-using-the-one-time-push-form) ou d'[e-mail](/fr/product/messaging-channels/emails/send-email/#how-to-send-a-one-time-email) ou un [parcours client](/fr/product/customer-journey/pushwoosh-journey-overview/).

<Aside type="caution" title="Important">
Si le service renvoie un statut autre que HTTP 200 OK, l'e-mail ou la notification push ne sera pas envoyé. Cela garantit que votre communication n'est envoyée que si les données nécessaires sont récupérées avec succès.
</Aside>