Le Langage de Script Emarsys (ESL) est un langage de script pour créer du contenu dynamique dans vos campagnes email, sur la base de règles prédéfinies.
Introduction
ESL est un authentique langage de script. Il vous permet de personnaliser votre contenu en fonction de facteurs extérieurs, contrairement à nos options de personnalisation standard, qui peuvent remplir le contenu email uniquement selon des champs de base de données de contact.
L'ESL (Emarsys Scripting Language) est écrit spécifiquement pour les gens qui connaissent le HTML.
En guise de rapide rappel, voici la vidéo d'Onboarding sur le langage de script Emarsys :
Où pouvez-vous utiliser ESL ?
Vous pouvez utiliser des fragments ESL pour la création de contenu dynamique ou la personnalisation avancée dans vos campagnes omnicanal :
- Campagnes Email (emails groupés, transactionnels ou d'événement extérieur : Pour l'email vous pouvez utiliser ESL dans le corps des emails, l'en-tête, le pré-en-tête, le sujet, le nom d'expéditeur, en fait partout dans l'email où la personnalisation pourrait être efficace.
- SMS et Messages Push
- Personnaliser le contenu avec Relational Data
- Campagnes Web Channel : Vous ne pouvez utiliser ESL que pour la personnalisation.
La personnalisation ne peut être appliquée qu'aux visiteurs identifiés. C'est pourquoi ESL ne fonctionne pas pour les campagnes Web Channel avec source destinataire : Tous les visiteurs et les visiteurs non-identifiés.
En plus d'être utilisé pour les modèles, ESL peut aussi gérer des algorithmes plus complexes. ESL offre aussi une solution universelle pour gérer la personnalisation, le texte conditionnel et le ciblage de bloc. Il est aussi plus simple et plus flexible que d'autres méthodes.
Pourquoi utiliser ESL ?
Puisque c'est un langage de script, il vous donne accès à de nombreuses fonctions. Tout d'abord, il vous permet de créer des personnalisations plus complexes qu'avec les options standard options de personnalisation dans Emarsys. Ensuite, vous pouvez ajuster n'importe quelle règle basée sur les valeurs de vos champs de personnalisation pour une campagne spécifique.
Les comptes Emarsys sont dotés au départ de 50 champs standard pour stocker les données de contact.
Pour voir une liste de toutes les valeurs disponibles pour les champs système à choix unique, cliquez ici.
La valeur d'un ID donné peut varier d'un langage à l'autre !
Exemples de cas d'utilisation d'ESL
Vous pouvez utiliser ESL dans les cas suivants :
- Commandes personnalisées : Vous pouvez afficher un bouton appelé Devenez membre uniquement aux contacts qui ne sont pas membre de votre programme de fidélité. Bien que cela puisse se faire aussi via un simple conditionnement ou ciblage de section, pour ceux qui connaissent HTML la création de campagne s'en trouve grandement simplifiée.
- Compteurs : Vous pouvez placer un compteur dans votre campagne sans avoir à mettre une URL dans votre code HTML.
- Conversions : Vous pouvez gérer les transformations d'un champ de contact à l'autre, par exemple, pour afficher les valeurs de champ indiquées au départ en kilomètres plutôt en miles, par exemple.
- Boucles : Vous pouvez créer une boucle pour ne pas avoir à vous référer à chacun des éléments du tableau séparément. Comme ESL est un langage de script, il peut traverser automatiquement la variable et utiliser tous les éléments les uns après les autres.
Tout compte fait, la personnalisation de vos contacts se trouve simplifiée et entièrement automatisée grâce au Langage de Script Emarsys.
ESL ressemble-t-il à Twig ?
Twig partage en effet certains aspects du Langage de Script Emarsys, mais il y a aussi d'énormes différences. Twig est un langage utilisé uniquement pour les modèles d'email et qui utilise des fonctions uniquement pour substituer des variables dans le modèle (par ex. mettre tous les prénoms en majuscules).
ESL ne prend pas en charge toutes les balises et filtres Twig, donc nous vous conseillons d'utiliser cette documentation et de ne pas inclure d'élément issus de la documentation Twig référencée plus haut.
Utiliser les variables ESL au niveau du modèle
Ces variables ESL sont créées soit dans le cadre du modèle, soit dans le bloc HTML si la variable ne doit être utilisée que dans un bloc spécifique.
Exemple A
Dans cet exemple, vous pouvez utiliser les variables ESL au niveau du modèle d'email pour consulter le champ de langue d'inscription d'un contact et afficher un texte en fonction.
{% if contact.35==1 %} Welcome dear customer {% elseif contact.35 == 2 %} Willkommen, lieber Kunde! {% else %} Bienvenido, querido cliente! {% endif%}
Exemple B
Pour le champ de langue d'inscription d'un contact vous pouvez aussi créer des variables ESL au niveau du modèle d'email avec des textes de caractère de remplissage s'y appliquant, plutôt qu'ajouter le fragment ESL entier dans le corps de l'email.
Configurer une variable ctatext
au niveau du modèle d'email :
<!-- {% if contact.35 == 1 %} {% set ctatext = 'SHOP NOW' %} {% elseif contact.35 == 2 %} {% set ctatext = 'ZUM PRODUKT' %} {% elseif contact.35 == 3 %} {% set ctatext = 'ACHETER MAINTENANT' %} {% elseif contact.35 == 4 %} {% set ctatext = 'ACQUISTA ORA' %} {% elseif contact.35 == 8 %} {% set ctatext = 'COMPRAR AHORA' %} {% else %} {% set ctatext = 'SHOP NOW' %} {% endif %} -->

Détails spécifiques à l'éditeur
Le Langage de Script Emarsys n'est pris nen charge que par les campagnes personnalisées HTML créées dans Visual Content Editor. Les anciennes campagnes basées sur modèle ne sont pas compatibles avec lui.
Les opérateurs sont sensibles à la casse et doivent toujours être en minuscules : "et", "ou".
Opérateurs pris en charge dans ESL
Les opérateurs suivants sont disponibles pour Twig et pris en charge dans n'importe quelle expression du langage de script Emarsys :
- Opérateurs de comparaison : Compare des valeurs et retourne des états true ou false. Les opérateurs incluent :
==
,!=
,<
,>
,>=
,<=
- Opérateurs logiques : Associent plusieurs expressions ou valeurs booléennes et donnent un résultat booléen unique. Les opérateurs incluent :
and
,or
Commenter dans ESL
Commenter des lignes fonctionne dans ESL de la même manière que dans Twig.
Commenter une ligne unique :
{# rds.rds_reformation.prefix_color('1304632BFF','BFF')[0].item_sku_prefix|required#}
Commenter plusieurs lignes :
{# The following code will not be executed and nothing will be displayed {% if category.posts %} This category has posts {% endif %} #}
Par exemple, vous pouvez utiliser cela pour tester les campagnes email HTML et résoudre leurs problèmes.
Référence de langage
Terminologie
{{ this is an expression }} {% this is a statement %} |this is a filter
Variables
Vous pouvez créer des variables personnalisées de la manière suivante :
Variable de type chaîne
{% set customVariable1 = 'String' %}
Appel d'une variable de type chaîne de caractères :
{{customVariable1}}
Résultat : String
Variable de type chaîne avec plusieurs valeurs
{% set customVariable3 = { var1: 'string1'; var2: 'string2' } %}
Appeler une des valeurs d'une variable à valeurs multiples :
{{customVariable3.var1}}
Résultat : string1
Variable numérique
{% set customVariable2 = 4 %}
Appel d'une variable numérique :
{{customVariable2}}
Résultat : 4
Variable via API
Disons que la valeur de la variable spécifique provient d'une requête API, d'un événement extérieur, par exemple, {{ event.example }}
. Vous pouvez utiliser la variable ci-dessous pour obtenir les données issues de l'exemple de demande :
{{ event.product.name }}
{ product : { name : example } }
Si vous avez utilisé global object
, veillez à formuler votre code en l'incluant.
Codeblock comme variable
Vous pouvez également créer une variable contenant un bloc de code entier :
<table cellpadding="0" cellspacing="0" border="0" bgcolor="#ffffff"> <tr> <td> {{customBlockVariable}} </td> </tr> </table> Result: <table cellpadding="0" cellspacing="0" border="0" bgcolor="#ffffff"> <tr> <td> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td> This variable is equal to this entire block of code! </td> </tr> </table> </td> </tr> </table>
Balises
if et elseif
Un énoncé if
vérifie que quelque chose est "true". Le cas échéant, le contenu de bloc jusqu'au {% endif %}
(obligatoire) est traité. Cela peut faire partie du code HTML.
Dans l'exemple ci-dessous, nous recherchons un champ de système #3, qui est l'adresse email. Si le contact a une adresse email example.com, elle est affichée ainsi. Sinon il est indiqué qu'il a une adresse différente.
{% if "@example.com" in contact.3 %} this is an example.com email address {% else %} this is not an example.com email address {% endif %}
Dans un énoncé if
vous pouvez aussi définir un champ vide {% '' %}
. Voir l'exemple ci-dessous :
{% if contact.1 !='' %}Dear {{contact.1}} {% else %}Hallo!{% endif %}
exemple de if
pour définir si c'est aujourd'hui l'anniversaire de quelqu'un :
{% if contact.4|localized_date('en','Mdd') == 'now'|localized_date('en','Mdd') %} Happy birthday ! {% endif %}
Dans le prochain exemple nous ciblons nos clients en fonction de leur genre. Nous pouvons leur montrer différents produits, sur la base de la requête précédente.
{% if contact.5 == 1 %} this is for him {% else %} this is for her {% endif %}
elseif
Dans un énoncé if
les seuls éléments obligatoires sont {% if foo == 'bar' %}
et {% endif %}
. else
et elseif
sont utiles mais uniquement facultatifs.
elseif
est utilisé exclusivement pour examiner une autre condition après que la précédente a échoué. Si vous n'avez pas de deuxième condition à examiner, vous devriez utiliser else
. {% elseif %}
is invalid. Il ne doit jamais être utilisé sans un if
avant et ce if
ne doit pas être déjà fermé par endif
.
Nous utilisons elseif
pour notre exemple où nous ciblons nos clients en fonction de leur genre. Nous pouvons leur montrer différents produits.
{% if contact.5 == 1 %} this is for him {% elseif contact.5 == 2 %} this is for her {% endif %}
Dans un autre exemple vous pouvez utiliser des variables ESL avec elseif
pour définir le signe astrologique de quelqu'un pour son horoscope.
Hey {% if contact.4|localized_date('en','Mdd') > 1221 or contact.4|localized_date('en','Mdd') < 120 %} Capricorn {% elseif contact.4|localized_date('en','Mdd') > 1122 %} Sagittarius {% elseif contact.4|localized_date('en','Mdd') > 1022 %} Scorpio {% elseif contact.4|localized_date('en','Mdd') > 922 %} Libra {% elseif contact.4|localized_date('en','Mdd') > 822 %} Virgo {% elseif contact.4|localized_date('en','Mdd') > 722 %} Leo {% elseif contact.4|localized_date('en','Mdd') > 620 %} Cancer {% elseif contact.4|localized_date('en','Mdd') > 520 %} Gemini {% elseif contact.4|localized_date('en','Mdd') > 419 %} Taurus {% elseif contact.4|localized_date('en','Mdd') > 320 %} Aries {% elseif contact.4|localized_date('en','Mdd') > 218 %} Pisces {% elseif contact.4|localized_date('en','Mdd') > 120 %} Aquarius {% endif %}, it's time to celebrate
foreach
La balise foreach
ne fonctionne que sur les tableaux et est utilisée pour faire le tour de chaque paire de valeur-clé dans un tableau.
Cet exemple fait le tour des nombres 1 à 4, et s'arrête à 3 car la limite est réglée sur le 3ème élément. La limite par défaut et maximum est 100.
{% foreach asd in [1, 2, 3, 4] limit 3 %} {{ asd }} {% endforeach %}
Un exemple plus complexe de foreach
{ "key_id": "3", "external_id": "king@north.com", "data": { "customer": { "id": "1111", "repId": "1111", "firstName": "John", "lastName": "Snow", "email": "king@north.com", "phone": "" }, "order": { "shipping": "UPS", "shippingPrice": "5", "tax": "5", "subtotal": "50", "total": "60", "product_details": [ { "title": "Product1", "price": "20", "quantity": "2" }, { "title": "Product2", "price": "5", "quantity": "1" }, { "title": "Product3", "price": "5", "quantity": "1" } ] } } }
{% foreach item in event.order.product_details %} <tr> <td> <table cellpadding="0" cellspacing="0" border="0"> Title:{{item.title}} Price:${{item.price|number_format('2', '.', ',')}} Quantity:{{item.quantity}} Current loop:{{loop.index}} Is it the first loop?{% if loop.first %}Yes.{% else %}No.{% endif %} or Is it the first loop?{% if not loop.first %}No.{% else %}Yes.{% endif %} Is it the last loop?{% if loop.last %}Yes.{% else %}No.{% endif %} </table> </td> </tr> {% endforeach %}
Consultez Source JSON pour les valeurs, afin de comprendre comment elles sont insérées.
<tr> <td> <table cellpadding="0" cellspacing="0" border="0"> Title:Product1 Price:$20.00 Quantity:2 Current loop:0 Is it the first loop? Yes. or Is it the first loop? Yes. Is it the last loop? No. </table> </td> </tr> <tr> <td> <table cellpadding="0" cellspacing="0" border="0"> Title:Product2 Price:$5.00 Quantity:1 Current loop:1 Is it the first loop? No. or Is it the first loop? No. Is it the last loop? No. </table> </td> </tr> <tr> <td> <table cellpadding="0" cellspacing="0" border="0"> Title:Product3 Price:$5.00 Quantity:1 Current loop:2 Is it the first loop? No. or Is it the first loop? No. Is it the last loop? Yes. </table> </td> </tr>
Imbriquer du code
ESL vous permet d'imbriquer des codes. Par exemple, if
est votre condition d'ouverture. Pour chaque if
, il doit y avoir un endif
de clôture. Il peut être imbriqué dans un autre if
, mais les deux doivent être fermés au bout du compte.
Exemple
{% if contact.35 == 2 %} {% if contact.5 == 2 %} German Language Female {% else %} German Language Male {% endif %} {% else %} {% if contact.5 == 2 %} Default Language Female {% else %} Default Language Male {% endif %} {% endif %}
Filtres
Utiliser plusieurs filtres dans un caractère de remplissage est autorisé. Quand vous utilisez un filtrage imbriqué/multiple, faites attention à l'ordre des filtres, car certains filtres voient être dans une position spécifique pour fonctionner comme prévu. Une exemple de cela est le filtre raw.
Vous pouvez voir des exemples de filtres issus de Twig et spécifiques à l'ESL ici :
Avec l'aide du filtre Twig even/odd vous pouvez différencier les valeurs paires et impaires.
{% if 'now' | localized_date('de','yy') is even %} Now: even years {% elseif 'now' | localized_date('de','yy') is odd %} Now: odd years {% else %} Now: nothing above {% endif %}
Résultat
Now: even years
Vous pouvez définir un caractère de séparation (split) à l'aide du filtre de séparation. Il divise la chaîne et la convertit en tableau, utilisable par foreach .
{% foreach item in 'one,two,three'|split(',') %} {{ item }} <br /> {% endforeach %}
Dans cet exemple, le caractère de séparation est , (virgule). article fait le tour de tous les éléments du tableau et les liste les uns après les autres. Si vous intégrez la balise HTML <br>
, chaque élément sera affiché dans une nouvelle rangée :
one two three
Vous pouvez aussi inclure un argument limite. Il y a une différence entre travailler avec des nombres positifs ou négatifs. Un exemple de nombre positif est 2, où le premier élément sera affiché comme une chaîne indépendante et les éléments restants formeront une seule chaîne.
{% foreach item in "one,two,three,four,five"|split(',',2) %} {{ item }} <br /> {% endforeach %}
Résultat
one two,three,four,five
D'un autre côté, si la limite est -1, le tout dernier élément ne sera pas retourné, et tous les autres éléments seront affichés.
{% foreach item in "one,two,three,four,five"|split(',',-1) %} {{ item }} <br /> {% endforeach %}
Résultat
one two three four
Si la limite est zéro, une chaîne sera créée à partir de tous les éléments du tableau
{% foreach item in "one,two,three,four,five"|split(',',0) %} {{ item }} <br /> {% endforeach %}
Résultat
one,two,three,four,five
Si vous ne définissez pas de caractère de séparation, mais que vous intégrez à la place une chaîne vide, le tableau sera sépara à chaque caractère.
{% foreach item in "123"|split('') %} {{ item }} <br /> {% endforeach %}
Résultat
1 2 3
Si vous ajoutez une limite au délimiteur de chaîne vite, le tableau sera séparé à ce nombre précis.
{% foreach item in "112233"|split('',2) %} {{ item }} <br /> {% endforeach %}
Résultat
11 22 33
Vous pouvez couper et afficher une partie d'un tableau ou d'une chaîne avec le filtre de découpe (slice). S'il s'agit d'un tableau, foreach est utilisé. Son premier paramètre définit à partir de quel élément il commence (notez que le tout premier élément est signé par 0), et le second paramètre définit le nombre d'éléments à couper (notez que cela inclut aussi l'élément de départ). Dans le prochain exemple, l'élément de départ d'un tableau est 1, donc il commencera à partir du deuxième élément, et le nombre d'éléments est 2, donc il coupera 2 éléments à partir du second élément.
{% foreach item in [1, 2, 3, 4, 5]|slice(1, 2) %} {{ item }} <br /> {% endforeach %}
Résultat
2 3
Un exemple de découpage de chaîne :
{{ '12345'|slice(2, 2) }}
Résultat
34
Si le nombre de départ es négatif, le décompte commence à partir de la fin du tableau ou de la chaîne (par ex. -4 signera le deuxième élément, qui est 2 dans l'exemple ci-dessus). Si aucun deuxième paramètre n'est indiqué, cela revient à inclure tous les éléments à venir. Veuillez noter que zéro ne peut pas être un deuxième paramètre.
{{ '12345'|slice(-4) }}
Résultat
2345
Les valeurs de caractères fictifs de modèle de chaîne peuvent être définies avec le filtre de format. Ces caractères fictifs sont %s (chaîne) et %d (nombre). Dans l'exemple suivant, la valeur 10 est indiquée pour le nombre de message. Le paramètre de format est ajouté avec cette variable comme paramètre. Le résultat est la présence de ce nombre dans la chaîne.
{{ "You have %d messages."|format("10") }}
Résultat
You have 10 messages.
S'il n'y a pas de valeur définie, une par défaut (valeur de secours) peut être affichée en utilisant le filtre par défaut. Dans l'exemple suivant, le champ de contact 7 ne présente pas de valeur, il est remplacé par 5 défini entre parenthèses.
{{ 30 + contact.7|default(5) }}
Résultat
35
Vous pouvez encoder une URL ou une partie d'URL qui contient des caractères d'URL invalides. Cela signifie que les caractères d'URL invalides seront remplacés par leurs combinaisons de caractère HTML valides. Exemple d'une particule d'URL contenant un * (astérisque) :
{{ "seg*ment"|url_encode }}
Résultat
seg%2Ament
Un autre exemple est la présence d'un ou de plusieurs espaces dans l'URL :
{{ "one space"|url_encode }}
Résultat
one%20space
Dans le prochain exemple, une paire de valeur-clé est convertie en paramètres d'URL valides :
{{ {'key': 'value', 'foo': 'bar'}|url_encode }}
Résultat
key=value&foo=bar
On peut faire échap sur les caractères valides en HTML avec le filtre escape. Par exemple quand le champ Prénom des contacts est examiné. Si l'un d'entre eux contient un caractère HTML (par ex. <), il sera traité comme une simple chaîne.
{{ "< '"|escape }}
Veuillez noter que échap peut être abrégée en e.
{{ "< '"|e }}
Marque un caractère échap comme étant un caractère normal. Ceci est utile si vous ne voulez pas que certains caractères soient à nouveau sautés.
{{ "< '"|raw }}
Résultat
<
Sans l'usage de ce filtre, le résultat de cette expression serait : &lt;
.
Si des filtres imbriqués sont utilisés, le filtre raw doit être placé en dernier pour fonctionner corrrectement.
{{ mysubject_line | required | raw }}
Le filtre abs retourne la valeur absolue. Notez qu'il ne fonctionne pas pour les chaînes, mais seulement pour les nombres entiers.
{{ -6|abs }}
Résultat
6
Met une chaîne en majuscules.
{{ 'hello sunshine!'|capitalize }}
Résultat
Hello sunshine!
Le filtre first retourne soit le premier élément d'un tableau ou la première valeur d'une paire de valeur-clé ou le premier caractère d'une chaîne.
{{ [1, 2, 3, 4]|first }}
Résultat
1
{{ { a: 1, b: 2, c: 3, d: 4 }|first }}
Résultat
1
{{ '1234'|first }}
Résultat
1
Assemble les éléments d'un tableau pour former une chaîne unique.
{{ [1, 2, 3]|join }}
Résultat
123
Le paramètre joindre définit le séparateur entre les éléments autour desquels la concaténation se produit.
{{ [1, 2, 3]|join('|') }}
Résultat
1|2|3
Avec l'aide du filtre json_encode
, vous pouvez inclure des caractères dans les fragments json dans votre contenu ESL.
{{contact.1234 | json_encode}}
Résultat
Si le champ de contact contient des caractères qui briseraient le format json, le filtre json_encode
résout ce problème.
Celui-ci retourne les clés d'un objet.
{% foreach key in { a: 1, b: 2, c: 3, d: 4 }|keys %} {{key}} <br /> {% endforeach %}
Résultat
a b c d
On peut aussi indiquer un séparateur.
{% foreach key in { a: 1, b: 2, c: 3, d: 4 }|keys %} {{key}}, <br /> {% endforeach %}
Résultat
a, b, c, d,
Le filtre last retourne soit le dernier élément d'un tableau ou la dernière valeur d'une paire de valeur-clé ou le dernier caractère d'une chaîne.
{{ [1, 2, 3, 4]|last }}
Résultat
4
{{ { a: 1, b: 2, c: 3, d: 4 }|last }}
Résultat
4
{{ '1234'|last }}
Résultat
4
Affiche le nombre d'éléments de tableau ou le nombre de caractère de chaîne.
{{ [1, 2, 3, 4]|length }}
Résultat
4
{{ '1234'|length }}
Résultat
4
Le filtre de longueur peut avoir un paramètre et il peut être inclus dans les balises if. Dans l'exemple suivant, le paramètre de longueur 10 indique que si le nombre d'utilisateurs est supérieur à 10, le message indiqué apparaît.
{% if users|length > 10 %} The number of users is more than 10. {% endif %}
Met chaque caractère de chaîne en minuscules.
{{ 'WELCOME'|lower }}
Résultat
welcome
Met chaque caractère de chaîne en majuscules.
{{ 'welcome'|upper }}
Résultat
WELCOME
Réunit deux tableaux ou objets.
{% foreach item in [1, 2]|merge(['apple', 'orange']) %} {{item}} <br /> {% endforeach %}
Résultat
1 2 apple orange
Veuillez noter que si une valeur est à nouveau indiquée pour la même clé dans le paramètre de fusion, la valeur originelle est remplacée par la nouvelle.
{% foreach item in { 'apple': 'fruit', 'potato': 'unknown' }|merge({ 'potato': 'vegetable'}) %} {{item}} <br /> {% endforeach %}
Résultat
fruit vegetable
Elle remplace les \ caractères de nouvelle ligne dans le code par des retours à la ligne HTML (<br />) , qui deviennent donc de nouvelles lignes dans le HTML.
{{ "I like Emarsys Scripting Language.nYou will like it too."|nl2br }}
Résultat
I like Emarsys Scripting Language.<br /> You will like it too.
Ceci formate les nombres décimaux. Le premier paramètre de number_format détermine combien de nombres la partie décimale contient. Dans l'exemple suivant, c'est 2, donc 2 décimales seront affichées à partir de 3. Le second paramètre définit le séparateur décimal, qui est , (une virgule) dans ce cas. Le troisième paramètre tient lieu de séparateur de milliers, qui est . (un point) ici.
{{ 9800.333|number_format(2, ',', '.') }}
Résultat
9.800,33
Veuillez noter que si aucun paramètre if n'est donné pour le filtre number_format, les décimales ne sont pas affichées du tout et le séparateur de milliers est , (une virgule).
{{ 2005.35|number_format }}
Résultat
2,005
Le filtre replace remplace des parties de chaîne.
{{ "I like this and that."|replace({'this': 'chocolate', 'that': 'candy'}) }}
Résultat
I like chocolate and candy.
Veuillez noter que si la même partie de chaîne exactement est indiquée comme valeur en premier, faisant donc office de clé dans le paramètre, elle sera écrasée. Dans cet exemple, vous pouvez voir que "chats" devient d'abord "chiens", puis les deux "chiens" deviennent des "oiseaux".
{{ "I like cats and dogs."|replace({'cats': 'dogs', 'dogs': 'birds'}) }}
Résultat
I like birds and birds.
Le filtre replace
ne peut pas prendre manipuler des expressions ESL sans résultat (le contenu avant la barre verticale dans l'exemple). Les messages incluant ceux-ci ne sont pas envoyés et augmentent ainsi l'indicateur "Aucun contenu".
Ce filtre inverse l'ordre des éléments de tableau ou de chaîne.
{% foreach item in [1, 2]|reverse %} {{item}} <br /> {% endforeach %}
Résultat
2 1
{{ '1234'|reverse }}
Résultat
4321
Les conditions d'arrondissement peuvent être définies à l'aide du filtre arrondir. Son premier paramètre définit le nombre de décimales, qui est 1 dans notre exemple. Quant au deuxième paramètre, il y a deux options. Le premier est plancher, qui arrondit les nombres au chiffre inférieur, indépendamment des règles d'arrondi communes.
{{ 42.58|round(1, 'floor') }}
Résultat
42.5
Le deuxième est plafond, qui arrondit les nombres au chiffres supérieur dans tous les cas.
{{ 42.54|round(1, 'ceil') }}
Résultat
42.6
Veuillez noter que le réglage par défaut est de n'avoir aucune décimale et d'utiliser l'arrondi commun (arrondir la valeur au chiffre supérieur à partir de la 5ème décimale et l'arrondir au chiffre inférieur en deçà).
{{ 42.52|round }}
Résultat
43
Il convertit la chaîne en titlecased (des mots qui commencent par des lettres en majuscules).
{{ 'my first car'|title }}
Résultat
My First Car
On peut utiliser ce filtre pour couper les blancs.
{{ ' I like Emarsys Scripting Language. '|trim }}
Résultat
I like Emarsys Scripting Language.
Tout autre caractère peut être défini pour être coupé si vous l'incluez comme paramètre.
{{ ' I like Emarsys Scripting Language.'|trim('.') }}
Résultat
I like Emarsys Scripting Language
Veuillez noter que le formatage de date suit la convention ICU est est sensible à la casse. Pour plus d'informations, voir les Détails du projet ICU.
Il s'agit d'une fonction de formatage de date. Elle affiche la date du pays spécifié et peut aussi traduire cette date (elle peut gérer les traductions de langage PHP). Veuillez noter qu'elle n'affiche que la date, même si l'heure est aussi fournie. Elle peut être écrasée, et le format de date prédéfini s'affiche alors (par ex. [{locale: en, format: yyyy mm}] signifie que le format YYYY MM deviendra visible pour les Anglais.) Le filtre localized_date peut avoir 4 paramètres. Ceux-ci sont affichés dans l'ordre définis par leurs paramètres de lange, et contiennent les éléments suivants :
- complet: année, mois, date, jour de la semaine
- long: année, mois, date
- moyen: année, version abrégée du mois, date
- court: yyyy/MM/dd, le séparateur peut être différent.
Le mois peut être affiché des manières suivantes :
Syntaxe | Format affiché |
---|---|
M | 9 |
MM | 09 |
MMM | Sep |
MMMM | Septembre |
MMMMM | S |
Pour approfondir la syntaxe du format date/heure, rendez-vous ici.
La chaîne entrante peut avoir les formats suivants :
- 'yyyy-MM-dd'
- 'maintenant'
- '+[nombre] d'heures'
- '+[nombre] de jours'
- '-[nombre] d'heures'
- '-[nombre] de jours'
Dans cet exemple, une version complète est fournie sur la base de la valeur pays+langue stockée dans le champ de contact 12 pour la date spécifiée (par ex. cela deviendra January 1 Friday, 1999).
{{ '1999-01-01'|localized_date(contact.12, 'full') }}
Assurez-vous que tous les champs aient des valeurs de données valides et pertinentes. Le filtre localized_date
ne peut pas formater de champs vides, ce qui peut entraîner une erreur dans l' Aperçu de contact.
Vous pouvez aussi utiliser un caractère fictif de champ de base de données pour remplir la date de manière dynamique. Si vous faites cela, assurez-vous de ne pas mettre le caractère fictif de champ entre guillemets, car la valeur de date sera retournée entre guillemets. Dans cet exemple, nous utilisions la valeur du champ de contact 12345 pour fournir la date.
{{ contact.12345|localized_date(contact.12, 'full') }}
Comme autre exemple, vous pouvez avoir aussi la date "dans x jours".
{{ '+7 days'|localized_date('de','dd.MM.yyyy') }}
Il s'agit d'une fonction de formatage d'horaire. Elle affiche l'heure du pays spécifié et peut aussi traduire cette heure (elle peut gérer les traductions de langage PHP). Veuillez noter qu'elle n'affiche que la date, même si l'heure est aussi fournie. Vous trouverez ici ce qui s'affiche exactement si vous fournissez des paramètres.
- complet: HH:MM:SS (AM/PM)
- long: HH:MM:SS (AM/PM)
- medium : HH:MM:SS (AM/PM)
- court: HH:MM (AM/PM)
{{ '1999-01-01 13:13:13'|localized_time(contact.12, 'medium') }},
Veuillez noter ici aussi que la chaîne entrante a une forme obligatoire (HH:MM:SS pour l'heure). Dans cet exemple, une heure et générée à partir d'une datetime avec le filtre localized_time sur la base de la valeur pays+langue stockée dans le champ de contact 12 (13:13:13).
Il s'agit d'une fonction de formatage de date et d'heure. Elle affiche la date et l'heure du pays spécifié et peut aussi les traduire (elle peut gérer les traductions de langage PHP). En ce qui concerne ses paramètres, elle rassemble les valeurs des deux filtres pré-cités (par ex. si son paramètre est complet, la date et l'heure seront affichés comme complet de même).
{{ '1999-01-01 13:13:13'|localized_datetime(contact.12, 'long') }},
Un résultat possible de l'exemple ci-dessus est 1999 01 January, 13:13:13.
Si l'évaluation de l'expression ESL ne donne pas de résultat et que ce filtre est ajouté, le message ne sera pas envoyé. Elle sera néanmoins affichée sur la page Analyse dans Emarsys. Les valeurs invalides par défaut pour ce filtre sont "" (chaîne vide), et la valeur nulle.
{{ contact.2|required(['-']) }}
Le paramètre de ce filtre (la chaîne - dans ce cas) écrase la chaîne vite invalide par défaut, de sorte que cette chaîne deviendra la nouvelle chaîne invalide. Vous pouvez quand même également inclure la chaîne vide plus tard, puisqu'il est possible de définir plus d'une valeur invalide. Par exemple, ([x], [y], [ ]) signifie qu'il y a 3 éléments invalides, et le dernier est la valeur vide.
Les emails empêchés d'être envoyés avec le filtre required
augmentent l'indicateur "Aucun contenu". Pour plus d'informations sur ces indicateurs, voir Les indicateurs de réaction aux emails expliqués.
Personnalisation
- N'utilisez pas la vieille variable de personnalisation
$
et/ou%
en même temps que la nouvelle variable{{ }}
dans les expressions ESL, car votre email risque alors d'être annulé. Pour en savoir plus, veuillez contacter le Support Emarsys. - Les caractères fictifs, variables et scripts utilisés dans d'autres plateformes (par exemple SFMC, Shopify, Magento, etc.) enrayeront ESL et votre email sera annulé. Pour prévenir de tels problèmes, vous devez retirer TOUTES leurs occurrences de vos campagnes.
{{ contact. }}
Les données de contact sont extraites de la base de données Emarsys. Vous trouverez ici la listes des caractères fictifs de personnalisation d'email possibles :
Champs à choix unique Les champs de contact comportent à la fois un ID de valeur et une valeur texte.
Les champs à choix unique permettent de vérifier la valeur d'un champ à l'aide d'un énoncé IF (ID utilisé).
Pour référencer l'ID de valeur d'un champ à choix unique, utilisez {{contact.XX}}
. Si vous souhaitez référencer la valeur du texte, utilisez {{contact.label.XX}}
.
Avertissement : La valeur d'un ID donné peut varier d'un langage à l'autre.
Informations générales
Paramètre | Description |
---|---|
{{ contact.1 }} | Prénom |
{{ contact.2 }} | Nom de famille |
{{ contact.3 }} | Email |
{{ contact.9 }} | Titre |
{{ contact.26 }} | Format email de préférence |
{{ contact.46 }} | Salutation |
Informations personnelles
Paramètre | Description |
---|---|
{{ contact.4 }} | Date de naissance |
{{ contact.5 }} | Genre |
{{ contact.6 }} | Situation matrimoniale |
{{ contact.7 }} | Enfants |
{{ contact.8 }} | Éducation |
{{ contact.10 }} | Adresse |
{{ contact.11 }} | Ville |
{{ contact.12 }} | État |
{{ contact.13 }} | Code postal |
{{ contact.14 }} | Pays |
{{ contact.15 }} | Téléphone |
{{ contact.16 }} | Fax |
{{ contact.37 }} | Mobile |
{{ contact.38 }} | Prénom du partenaire |
{{ contact.39 }} | Date de naissance du partenaire |
{{ contact.40 }} | Anniversaire |
Informations sur l'entreprise
Paramètre | Description |
---|---|
{{ contact.17 }} | Emploi |
{{ contact.18 }} | Entreprise |
{{ contact.19 }} | Département |
{{ contact.20 }} | Secteur |
{{ contact.21 }} | Téléphone (bureau) |
{{ contact.22 }} | Fax (bureau) |
{{ contact.23 }} | Nombre d'employés |
{{ contact.24 }} | Revenu annuel (en 000 EUR) |
{{ contact.25 }} | URL |
{{ contact.41 }} | Adresse de l'entreprise |
{{ contact.42 }} | Code postal (bureaux) |
{{ contact.43 }} | Ville (bureau) |
{{ contact.44 }} | État (bureau) |
{{ contact.45 }} | Pays (bureau) |
Autres informations
Paramètre | Description |
---|---|
{{ contact.27 }} | Durée moyenne de visite (minutes) |
{{ contact.28 }} | Nombre de vues sur la page par jour |
{{ contact.29 }} | Nombre de jours écoulés depuis l'envoi du dernier email |
{{ contact.31 }} | Opt-in |
{{ contact.32 }} | Statut utilisateur |
{{ contact.33 }} | Source du contact |
{{ contact.34 }} | Formulaire de contact |
{{ contact.35 }} | Langue d'inscription |
{{ contact.36 }} | Newsletter |
{{ contact.47 }} | Email valide |
{{ contact.48 }} | Date de la première inscription |
{{ rds. }}
Ces données proviennent du service de données relationnelles - "Relational Data Service" (RDS). La recommandation produit est une vue qui lie les données RDS de différents tableaux. Son paramètre est un champ sur la base duquel vous identifiez le contact (ici il s'agit de l'adresse email).
Remarque :
- Un paramètre RDS ne peut être qu'une constante (un champ ou une chaîne), et doit rester le même.
- Une expression RDS n'est valide que si elle contient un indice et un nom de champ définis.
Exemple avec foreach
{% foreach product in rds.product_recommendation(contact.3) limit 4 %} {{ product.title }} <br /> {% endforeach %}
Résultat
T-shirt
Shirt
Pantalons
Jeans
Exemple sans appliquer foreach
{{ rds.product_recommendation(contact.3)[0].title }} {{ rds.product_recommendation(contact.3)[0].price }}
Résultat
T-shirt
59,99
{{ voucher. }}
Il est possible d'intégrer des bons dans votre personnalisation à l'aide d'ESL.
Gestion des bons
Dans ce scénario, un champ de contact est créé, la syntaxe de l'ESL est donc la même que celle de n'importe quel autre champ de contact. Le voici avec le formatage upper
.
{{ voucher.21345 | upper }}
Bons omnicanaux
Pour ces bons, aucun champ de contact n'est créé, de sorte que le voucherID
doit être utilisé à la place. Pour obtenir un voucherID
, créez un Token de personnalisation de bon et vérifiez l'ESL dans ce token.
Vous pouvez vous référer au bon de la manière suivante :
{{ voucher.22738 | upper }}
Traçage de lien
Vous pouvez utiliser ESL également à des fins de traçage de lien, en embarquant le lien dans une expression ESL.
{% if event.payload.example == 'EXAMPLE' %} https://example.com {% endif %}
Veuillez vous assurer que dans la version texte de l'email le lien et l'expression ESL sont séparés par un espace ou un saut de ligne. Sinon le traçage de lien ne fonctionnera pas et la campagne peut devenir invalide.
Outils utiles
Le testage de Twig est possible avec TwigFiddle, où le résultat de n'importe quel twig peut être consulté. Notez ici que nous avons certaines balises, paramètres et filtres uniques, pour lesquels vous ne pouvez pas utiliser cette méthode de test facilement. Si vous souhaitez tester du code avec la balise foreach , nous vous suggérons de la remplacer par une simple balise for
, de sorte à pouvoir vérifier votre code. D'autres éléments impossibles à tester ici sont le paramètre limit
et les codes .rds-related. Dans les filtres, quatre sont uniques :
- localized_date
- localized_time
- localized_datetime
- requis
Pour éditer votre script, Atom et Notepad++ peuvent être utiles avec un add-onn twig-spécifique.
Validation ESL
Pendant l'ajout d'un fragment ESL à votre contenu, le script ESL est validé au niveau de la campagne. A moins que le script soit valide, vous ne pouvez pas enregistrer le token. Pendant que vous ajoutez le fragment, l'éditeur vérifie automatiquement si votre code est valide ou pas :

Échantillons
Données extérieures pour les emails transactionnels
En guise d'exemple, voir Déclenchement d'emails transactionnels par des données extérieures.
Erreurs ESL courantes
Mélange de l'ancienne personnalisation $ ou %% au sein de l'ESL | Ces variables ne se mélangent pas. Ils sont traités par deux services différents et la Plateforme Marketing Emarsys va soit imprimer les espaces réservés dans l'email ou annuler l'email. Dans le même registre, les caractères fictifs, variables et scripts utilisés dans d'autres plateformes (SFMC, Shopify, Magento, etc.) enrayeront ESL et annuleront l'email. Vous devez supprimer chaque cas. |
Utilisation d'un seul = au lieu de == | En général, vous n'utiliserez = que pour définir une variable et == pour vérifier une valeur ou une chaîne de caractères. |
Sauter une référence à l'objet "global" dans JSON | Si certaines données se trouvent dans l'objet global, vous devez y faire référence dans ESL.{{event.ordertotal}} au lieu de {{event.global.ordertotal}} est incorrect s'il se trouve à l'intérieur de l'objet "global". |
ESL/Twig est sensible à la casse | {{event.global.orderTotal}} est une variable différente de {{event.global.ordertotal}} |
À l'exception des variables et des valeurs, vous devez utiliser exclusivement des minuscules. | Incorrect : {% if contact.1111 == 'Family' AND contact.2222 == 'Other' %} Incorrect : {% IF contact.1111 == 'Family' and contact.2222 == 'Other' %} Incorrect : {% if CONTACT.1111 == 'Family' and CONTACT.2222 == 'Other' %} Correct : {% if contact.1111 == 'Family' and contact.2222 == 'Other' %} |
Structure JSON incohérente | Si vous faites référence à JSON via ESL sans en vérifier l'existence au préalable, cette variable doit TOUJOURS exister, qu'elle soit nécessaire ou non. S'il ne figure pas dans le JSON, l'email ne sera pas envoyé en raison d'un contenu manquant. |
Généralement indiqué par un grand nombre d'emails annulés pour "Absence de contenu" | |
Appel d'une variable non définie | Ce n'est pas parce qu'un autre système référence la commande par {{orders.lastorder.price}} que cela signifie qu'ESL le fera. À l'exception des variables personnalisées et des variables à l'intérieur d'un tableau que vous bouclez, vous êtes limité à l'utilisation de variables commençant par ce qui suit :{{contact...}} {{event...}}
|
Ajouter des espaces inutiles, des mots supplémentaires ou omettre des espaces dans les déclarations | {% end foreach %} au lieu de {% endforeach %} {% else if %} à la place de {% elseif %} {% end if %} à la place de {% endif %} {% endelseif %} au lieu de {% endif %} {%if contact.1111 == 'Family'%} au lieu de {% if contact.1111 == 'Family' %} Cela ne nuit pas nécessairement à la fonctionnalité, mais cela nuit aux surligneurs de syntaxe et peut prêter à confusion. |
Différences entre if , elseif , et else | Dans un énoncé if les seuls éléments obligatoires sont {% if foo == 'bar' %} et {% endif %} . elseif et else sont toujours facultatifs mais utiles.if est votre condition d'ouverture. Pour chaque if , il doit y avoir un endif de clôture. Il peut être imbriqué dans un autre if , mais les deux doivent être fermés au bout du compte.elseif est utilisé exclusivement pour examiner une autre condition après que la précédente a échoué. Si vous n'avez pas de deuxième condition à examiner, vous devriez utiliser else . {% elseif %} est invalide. Il ne doit jamais être utilisé sans un if avant et ce if ne doit pas être déjà fermé par endif .else est votre solution de repli. Si aucune des conditions précédentes n'est vraie, else sera utilisé à la place. Elle est facultative. Si vous ne souhaitez pas définir de solution de repli, vous n'avez pas besoin d'utiliser else . Le comportement naturel de if est de ne pas utiliser de solution de repli. |
Oublier d'utiliser les guillemets lors du référencement d'une chaîne de caractères | Les chaînes sont exactes. Pour les utiliser ou les consulter, vous devez les entourer de guillemets simples ou doubles. |
Utiliser indifféremment {{ et {% | Incorrect : {{ endif }} Correct : {% endif %} Incorrect : {% contact.1111 %} Correct : {{contact.1111}} {{...}} doit toujours être utilisé pour imprimer des variables à partir de JSON, RDS, table de contact, etc.{%...%} doit toujours être utilisé pour les déclarations ou la logique, notamment : {% if... {% foreach... {% set... Lorsque vous faites référence à une variable à l'intérieur d'une déclaration, vous n'avez pas besoin de {{ }} puisque vous n'imprimez pas la variable.Correct : {% if contact.3 %} Incorrect : {% if {{contact.3}} %} |
Expressions ESL non prises en charge
Syntaxes non prises en charge
N'utilisez pas les syntaxes suivantes, car elles ne sont pas prises en charge :
#DATE# #TIME# #L_YEAR# #S_YEAR# #S_MONTH# #L_MONTH# #L_DAY# #S_DAY# #HOUR# #MINUTE# #SECOND# #UNIX_TIMESTAMP#
Filtres non pris en charge
N'utilisez pas les filtres suivants, car ils ne sont pas pris en charge :
required_length
Ce filtre peut interrompre la page de traçage de lien visuel en affichant le message d'erreur suivant :
L'email ne peut pas être prévisualisé ici. Veuillez ouvrir l'éditeur de contenu email et prévisualiser le contenu.