Die Emarsys Scripting Language (ESL) ist eine Skriptsprache, mit der Sie auf Basis von vordefinierten Regeln dynamischen Content für Ihre E-Mail-Kampagnen erstellen können.
Einführung
ESL ist eine echte Skriptsprache. Sie ermöglicht Ihnen, Ihren Content anhand von externen Faktoren zu personalisieren - im Gegensatz zu den herkömmlichen Personalisierungsoptionen, bei denen der E-Mail Content ausschließlich auf Basis der Felder in der Kontaktdatenbank befüllt werden kann.
ESL ist für Nutzer gedacht, die Erfahrung mit HTML haben.
Zur Erinnerung - hier ist das Onboarding-Video zur Emarsys Scripting Language:
Wofür kann ESL verwendet werden?
Mit ESL Snippets können Sie dynamischen Content erstellen oder Ihre Omnichannel-Kampagnen noch stärker personalisieren:
- E-Mail-Kampagnen - Batchmails, transaktionale Mails, E-Mails, die auf externen Events basieren: Sie können ESL im E-Mail Body, Header, Preheader, Betreff, "Von"-Namen verwenden - also überall dort in der E-Mail, wo die Personalisierung effektiv eingesetzt werden kann.
- SMS und Push Messages
- Content-Personalisierung mit Relational Data
- Web Channel Kampagnen: Hier kann ESL nur für die Personalisierung verwendet werden.
Die Personalisierung kann nur für identifizierte Besucher übernommen werden. Daher funktioniert ESL nicht für Web Channel Kampagnen mit einer Empfängerquelle des Typs "Alle Besucher" und "Nicht identifizierte Besucher".
In Vorlagen kann ESL auch komplexere Algorithmen verarbeiten; zudem dient ESL als universelle Lösung für das Handling von Personalisierung, bedingtem Text sowie Block-Targeting - und ist dabei flexibler als andere Methoden.
Warum sollte ich ESL verwenden?
Als Skriptsprache bietet ESL eine große Anzahl unterschiedlicher Funktionen und Einsatzmöglichkeiten. Zuerst einmal lässt sich damit eine viel komplexere Personalisierung erstellen als mit den Personalisierungsoptionen, die standardmäßig in Emarsys verfügbar sind. Und: Sie können für eine Kampagne jede Regel modifizieren, die auf den Werten Ihrer Personalisierungsfelder basiert.
Emarsys Accounts haben rund 50 Standardfelder für das Speichern von Kontaktdaten.
Eine Liste aller verfügbaren Werte für die Systemfelder mit Einzelauswahl erhalten Sie hier.
Der Wert für eine ID kann je nach Sprache variieren!
Beispiele für die Verwendung von ESL
Sie können ESL in folgenden Fällen verwenden:
- Benutzerdefinierte Steuerelemente: Zeigen Sie einen Button namens Member werden nur jenen Kontakten an, die noch nicht an Ihrem Loyalitätsprogramm teilnehmen. Das ist zwar auch mit einer einfachen Bedingung oder einem Abschnitts-Targeting möglich - aber für jemanden, der sich mit HTML auskennt, wird die Kampagnenerstellung so um einiges leichter.
- Zähler: Sie können einen Zähler in Ihrer Kampagne platzieren, ohne eine URL in Ihren HTML Code einfügen zu müssen.
- Conversions: Sie können Transformationen von einem Kontaktfeld zum nächsten managen, zum Beispiel, um Feldwerte statt in Kilometern in Meilen anzuzeigen.
- Loops: Sie können einen Loop erstellen und müssen dafür nicht jedes einzelne Array-Element eigens referenzieren. Da ESL eine Skriptsprache ist, kann sie automatisch durch das Array gehen und ein Element nach dem anderen verwenden.
Zusammenfassend lässt sich sagen: Mit der Emarsys Scripting Language wird die Individualisierung Ihrer Kontakte einfacher und vollständig automatisiert.
Wie verhält sich Twig im Vergleich zu ESL?
Twig hat viele Ähnlichkeiten mit der Emarsys Scripting Language - es gibt aber auch große Unterschiede. Twig ist eine Sprache, die nur für E-Mail-Vorlagen verwendet wird; ihre Funktionen dienen ausschließlich dazu, Variablen in der Vorlage zu ersetzen (z.B. großer Anfangsbuchstabe für alle Vornamen).
ESL unterstützt nicht alle Twig-Tags und Twig-Filter; daher empfehlen wir, diese Dokumentation zu verwenden und keine Elemente aus der oben referenzierten Twig-Dokumentation einzuschließen.
ESL-Variablen auf Vorlagen-Level verwenden
Diese ESL-Variablen werden entweder im Vorlagenrahmen erstellt - oder im HTML-Block, wenn die Variable nur in einem bestimmten Block verwendet werden soll.
Beispiel A
In diesem Beispiel können Sie ESL-Variablen auf dem Level der E-Mail-Vorlage verwenden, um das Feld für die Registrierungssprache zu überprüfen und den entsprechenden Text anzuzeigen.
{% if contact.35==1 %} Welcome dear customer {% elseif contact.35 == 2 %} Willkommen, lieber Kunde! {% else %} Bienvenido, querido cliente! {% endif%}
Beispiel B
Für das Feld der Registrierungssprache eines Kontakts können Sie zudem auf dem Level der E-Mail-Vorlage ESL-Variablen mit Platzhaltertexten erstellen, statt das gesamte ESL Snippet zum E-Mail Body hinzufügen.
So richten Sie eine Variable des Typs ctatext
auf dem Level der E-Mail-Vorlage ein:
<!-- {% 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 %} -->

Editor-spezifische Details
Die Emarsys Scripting Language wird nur von benutzerdefinierten HTML-Kampagnen unterstützt, die im Visual Content Editor erstellt werden. Alte, vorlagenbasierte Kampagnen unterstützen sie nicht.
Die Operatoren beachten die Groß-/Kleinschreibung und sollten immer in Kleinbuchstaben gehalten werden: "and", "or".
In ESL unterstützte Operatoren
Folgende Operatoren sind für Twig verfügbar und werden in sämtlichen Expressions der Emarsys Scripting Language unterstützt:
- Vergleichsoperatoren: Vergleichen Werte und geben den Status "true" oder "false" zurück. Zu den Operatoren gehören:
==
,!=
,<
,>
,>=
,<=
- Logische Operatoren: Kombinieren mehrere boolesche Ausdrücke oder Werte und erzeugen einen einzigen booleschen Output. Zu den Operatoren gehören:
and
,or
In ESL kommentieren
Das Auskommentieren von Zeilen funktioniert in ESL ähnlich wie in Twig.
Einzelne Zeile auskommentieren:
{# rds.rds_reformation.prefix_color('1304632BFF','BFF')[0].item_sku_prefix|required#}
Mehrere Zeilen auskommentieren:
{# The following code will not be executed and nothing will be displayed {% if category.posts %} This category has posts {% endif %} #}
Das können Sie zum Beispiel für das Testen und die Problemlösung bei HTML E-Mail-Kampagnen verwenden.
Sprachreferenz
Terminologie
{{ this is an expression }} {% this is a statement %} |this is a filter
Variablen
Benutzerdefinierte Variablen können Sie wie folgt erstellen:
String-Variable
{% set customVariable1 = 'String' %}
String-Variable aufrufen:
{{customVariable1}}
Ergebnis: String
String-Variable mit mehreren Werten
{% set customVariable3 = { var1: 'string1'; var2: 'string2' } %}
Einen der Werte einer Variablen mit mehreren Werten aufrufen:
{{customVariable3.var1}}
Ergebnis: string1
Numerische Variable
{% set customVariable2 = 4 %}
Numerische Variable aufrufen:
{{customVariable2}}
Ergebnis: 4
Variable über das API
Nehmen wir an, der Wert für die Variable kommt aus einem API Request, einem externen Event, zum Beispiel {{ event.example }}
. Mit der unten angeführten Variable können Sie die Daten aus dem Beispiel-Request aufrufen:
{{ event.product.name }}
{ product : { name : example } }
Wenn Sie das Objekt "global"
verwendet haben, achten Sie darauf, dass es in Ihrem Code eingeschlossen ist.
Codeblock als Variable
Sie können auch eine Variable erstellen, die einen ganzen Codeblock enthält:
<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>
Tags
if und elseif
Ein Statement des Typs if
überprüft, ob sich etwas als "true" erweist. Ist das der Fall, wird der Block-Content bis zum (obligatorischen) {% endif %}
verarbeitet. Das kann Teil des HTML Code sein.
In nachstehendem Beispiel suchen wir nach Systemfeld #3 - der E-Mail-Adresse. Wenn der Kontakt eine E-Mail-Adresse des Typs example.com hat, wird das angezeigt. Andernfalls besagt das Statement, dass die Adresse anders lautet.
{% if "@example.com" in contact.3 %} this is an example.com email address {% else %} this is not an example.com email address {% endif %}
In einem if
-Statement können Sie auch ein leeres Feld {% '' %}
definieren. Ein Beispiel:
{% if contact.1 !='' %}Dear {{contact.1}} {% else %}Hallo!{% endif %}
if
-Beispiel, um zu definieren, ob heute jemandes Geburtstag ist:
{% if contact.4|localized_date('en','Mdd') == 'now'|localized_date('en','Mdd') %} Happy birthday ! {% endif %}
Im nächsten Beispiel sprechen wir unsere Kunden basierend auf ihrer Geschlechtszugehörigkeit an. Auf Basis der Query können wir ihnen verschiedene Produkte anzeigen.
{% if contact.5 == 1 %} this is for him {% else %} this is for her {% endif %}
elseif
In einem if
-Statement sind {% if foo == 'bar' %}
und {% endif %}
die einzigen obligaten Teile. else
und elseif
sind nützlich, aber optional.
elseif
wird ausschließlich dafür verwendet, eine weitere Bedingung zu prüfen, nachdem die vorangegangene fehlgeschlagen ist. Wenn es keine zweite Bedingung gibt, die überprüft werden kann, sollten Sie else
verwenden. {% elseif %}
ist ungültig. Es sollte niemals ohne ein vorangestelltes if
verwendet werden, und das vorangestellte if
darf nicht bereits durch endif
geschlossen werden.
Wir verwenden elseif
in folgendem Beispiel, bei dem wir Kunden basierend auf ihrer Geschlechtszugehörigkeit ansprechen. Wir können ihnen dann verschiedene Produkte anzeigen.
{% if contact.5 == 1 %} this is for him {% elseif contact.5 == 2 %} this is for her {% endif %}
Ein weiteres Beispiel zeigt, wie Sie ESL-Variablen mit elseif
verwenden können, um jemandes Sternzeichen für das Horoskop zu definieren.
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
Das Tag foreach
funktioniert nur in Arrays und wird dafür verwendet, einen Loop durch jedes Key-Value-Paar in einem Array zu ziehen.
Dieses Beispiel zieht einen Loop durch die Zahlen 1 bis 4 und stoppt bei 3, da das Limit bei Element 3 gesetzt ist. Das Standard- und Maximal-Limit ist 100.
{% foreach asd in [1, 2, 3, 4] limit 3 %} {{ asd }} {% endforeach %}
Ein komplexeres foreach-Beispiel
{ "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 %}
Überprüfen Sie die JSON-Quelle bezüglich der Werte, um zu verstehen, wie diese eingefügt werden.
<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>
Code schachteln
Mit ESL können Sie Codes schachteln. Ein Beispiel: Wenn if
Ihre öffnende Bedingung ist, muss es für jedes if
ein schließendes endif
geben. Sie können in ein anderes if
schachteln, aber am Ende müssen beide Instanzen geschlossen sein.
Beispiel
{% 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 %}
Filter
Sie können mehrere Filter in nur einem Platzhalter verwenden. Beim geschachtelten oder mehrfachen Filtern achten Sie auf die Reihenfolge der Filter - manche Filter müssen eine bestimmte Position haben, um ordnungsgemäß zu funktionieren. Ein Bespiel dafür ist ein Filter des Typs raw.
Beispiele für Filter aus Twig, die für ESL spezifisch sind, sehen Sie hier:
Mit dem Twig-Filter "even/odd" können Sie zwischen geraden und ungeraden Werten unterscheiden.
{% 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 %}
Ergebnis
Now: even years
Mit dem Filter "split" können Sie ein Teilerzeichen definieren. Es teilt den String und erstellt daraus ein Array, das von foreach verwendet werden kann.
{% foreach item in 'one,two,three'|split(',') %} {{ item }} <br /> {% endforeach %}
In unserem Beispiel ist das Teilerzeichen ein Komma (,). item durchläuft alle Elemente aus dem Array und listet sie nacheinander auf. Wenn Sie das HTML Tag <br>
einschließen, wird jedes Element in einer neuen Zeile angezeigt:
one two three
Sie können auch ein Limit-Argument einschließen. Dabei gibt es Unterschiede bei der Arbeit mit positiven und negativen Zahlen. Ein Beispiel für eine positive Zahl ist 2; dabei wird das erste Element als alleinstehender String angezeigt und die restlichen Elemente werden zu einem String zusammengefasst.
{% foreach item in "one,two,three,four,five"|split(',',2) %} {{ item }} <br /> {% endforeach %}
Ergebnis
one two,three,four,five
Wenn das Limit dagegen -1 ist, wird das letzte Element nicht zurückgegeben, alle anderen Elemente werden angezeigt.
{% foreach item in "one,two,three,four,five"|split(',',-1) %} {{ item }} <br /> {% endforeach %}
Ergebnis
one two three four
Wenn das Limit 0 ist, wird ein String aus allen Elementen im Array erstellt.
{% foreach item in "one,two,three,four,five"|split(',',0) %} {{ item }} <br /> {% endforeach %}
Ergebnis
one,two,three,four,five
Wenn Sie kein Teilerzeichen definieren und stattdessen einen leeren String einschließen, wird das Array bei jedem Zeichen geteilt.
{% foreach item in "123"|split('') %} {{ item }} <br /> {% endforeach %}
Ergebnis
1 2 3
Wenn Sie ein Limit zu einem leeren String-Trennzeichen hinzufügen, wird das Array anhand der definierten Zahl geteilt.
{% foreach item in "112233"|split('',2) %} {{ item }} <br /> {% endforeach %}
Ergebnis
11 22 33
Mit dem slice-Filter können Sie einen Teil eines Arrays oder Strings ausschneiden und anzeigen. Bei einem Array wird foreach verwendet. Der erste Parameter definiert, bei welchem Element der Ausschnitt beginnt (beachten Sie, dass das allererste Element durch 0 signiert ist); der zweite Parameter definiert die Anzahl der Elemente, die ausgeschnitten werden sollen (beachten Sie, dass dies auch das Startelement beinhaltet). In nachstehendem Beispiel ist 1 das Startelement eines Arrays, daher startet es mit dem zweiten Element; die Anzahl der Elemente ist 2, daher werden - beginnend mit dem zweiten Element - 2 Elemente ausgeschnitten.
{% foreach item in [1, 2, 3, 4, 5]|slice(1, 2) %} {{ item }} <br /> {% endforeach %}
Ergebnis
2 3
Hier sehen Sie ein Beispiel für einen String, der mittels "slice" segmentiert wurde:
{{ '12345'|slice(2, 2) }}
Ergebnis
34
Wenn die Startzahl negativ ist, wird ab dem Ende des Arrays oder Strings gezählt. So signiert -4 das zweite Element, also 2 im oben angegebenen Beispiel. Ist kein zweiter Parameter definiert, werden alle nachfolgenden Elemente eingeschlossen. Bitte beachten Sie, dass 0 (null) nicht als zweiter Parameter definiert werden kann.
{{ '12345'|slice(-4) }}
Ergebnis
2345
Die Werte von String-Vorlagenplatzhaltern können mit dem Filter "format" definiert werden. Diese Platzhalter sind %s (String) und %d (Zahl). Im folgenden Beispiel wird für die Nachrichtenzahl der Wert 10 definiert. Der format-Parameter wird mit dieser Variable hinzugefügt. Als Ergebnis ist die Zahl im String enthalten.
{{ "You have %d messages."|format("10") }}
Ergebnis
You have 10 messages.
Wenn kein Wert definiert ist, kann mit dem Filter "default" ein Standard- oder Fallback-Wert angezeigt werden. Im folgenden Beispiel hat Kontaktfeld 7 keinen Wert; es wird, wie in den Klammern definiert, 5 angezeigt.
{{ 30 + contact.7|default(5) }}
Ergebnis
35
Enthält eine URL ungültige Zeichen, können Sie die gesamte URL oder einen Teil davon codieren. Das bedeutet, dass die ungültigen URL-Zeichen durch gültige HTML-Zeichenkombinationen ersetzt werden. Hier ist ein Beispiel für einen URL-Partikel, der das Zeichen * (ein Sternchen) enthält:
{{ "seg*ment"|url_encode }}
Ergebnis
seg%2Ament
Ein weiteres Beispiel wäre eine URL, die ein oder mehrere Leerzeichen enthält:
{{ "one space"|url_encode }}
Ergebnis
one%20space
Im nächsten Beispiel wird ein Key-Value-Paar in gültige URL-Parameter konvertiert:
{{ {'key': 'value', 'foo': 'bar'}|url_encode }}
Ergebnis
key=value&foo=bar
Die in HTML gültigen Zeichen können mit dem Filter "escape" ausgenommen werden. Ein Beispiel dafür ist, wenn das Kontaktfeld Vorname gecheckt wird. Wenn eines der Felder ein HTML-Zeichen (z.B. <) enthält, wird es als einfacher String behandelt.
{{ "< '"|escape }}
Bitte beachten Sie, dass escape mit "e" abgekürzt werden kann.
{{ "< '"|e }}
Damit wird ein mittels Escape ausgenommenes Zeichen als normales Zeichen gekennzeichnet. Das ist nützlich, wenn Sie vermeiden wollen, dass gewisse Zeichen künftig per Escape ausgenommen werden.
{{ "< '"|raw }}
Ergebnis
<
Ohne diesen Filter wäre der Output dieser Expression wie folgt: &lt;
Wenn Filter geschachtelt werden, muss der raw-Filter der letzte sein, damit er ordnungsgemäß funktioniert.
{{ mysubject_line | required | raw }}
Der Filter "abs" gibt den absoluten Wert zurück. Er funktioniert nur für ganze Zahlen, nicht für Strings.
{{ -6|abs }}
Ergebnis
6
Schreibt den ersten Buchstaben in einem String groß.
{{ 'hello sunshine!'|capitalize }}
Ergebnis
Hello sunshine!
Der Filter "first" gibt entweder das erste Element eines Arrays oder den ersten Wert eines Key-Value-Paars oder das erste Zeichen eines Strings zurück.
{{ [1, 2, 3, 4]|first }}
Ergebnis
1
{{ { a: 1, b: 2, c: 3, d: 4 }|first }}
Ergebnis
1
{{ '1234'|first }}
Ergebnis
1
Verknüpft die Elemente eines Arrays zu einem einzelnen String.
{{ [1, 2, 3]|join }}
Ergebnis
123
Der Parameter "join" definiert das Trennzeichen zwischen den Elementen, die verkettet werden sollen.
{{ [1, 2, 3]|join('|') }}
Ergebnis
1|2|3
Mithilfe des Filters json_encode
können Sie Zeichen in die json Snippets in Ihrem ESL Content einschließen.
{{contact.1234 | json_encode}}
Ergebnis
Wenn das Kontaktfeld Zeichen enthält, die ein json-Format beschädigen würden, behebt der Filter json_encode
dieses Problem.
Das gibt die Keys aus einem Objekt zurück.
{% foreach key in { a: 1, b: 2, c: 3, d: 4 }|keys %} {{key}} <br /> {% endforeach %}
Ergebnis
a b c d
Es kann auch ein Trennzeichen definiert werden.
{% foreach key in { a: 1, b: 2, c: 3, d: 4 }|keys %} {{key}}, <br /> {% endforeach %}
Ergebnis
a, b, c, d,
Der Filter "last" gibt entweder das letzte Element eines Arrays oder den letzten Wert eines Key-Value-Paars oder das letzte Zeichen eines Strings zurück.
{{ [1, 2, 3, 4]|last }}
Ergebnis
4
{{ { a: 1, b: 2, c: 3, d: 4 }|last }}
Ergebnis
4
{{ '1234'|last }}
Ergebnis
4
Zeigt die Anzahl der Array-Elemente oder die Anzahl der String-Zeichen an.
{{ [1, 2, 3, 4]|length }}
Ergebnis
4
{{ '1234'|length }}
Ergebnis
4
Der Filter "length" kann einen Parameter haben und in if-Tags eingeschlossen sein. In nachstehendem Beispiel legt der length-Parameter "10" Folgendes fest: Wenn die Anzahl der Nutzer mehr als 10 ist, wird die bereitgestellte Nachricht angezeigt.
{% if users|length > 10 %} The number of users is more than 10. {% endif %}
Konvertiert alle Zeichen des Strings zu Kleinbuchstaben.
{{ 'WELCOME'|lower }}
Ergebnis
welcome
Konvertiert alle Zeichen des Strings zu Großbuchstaben.
{{ 'welcome'|upper }}
Ergebnis
WELCOME
Fasst zwei Arrays oder Objekte zusammen.
{% foreach item in [1, 2]|merge(['apple', 'orange']) %} {{item}} <br /> {% endforeach %}
Ergebnis
1 2 apple orange
Bitte beachten Sie: Wenn im merge-Parameter ein weiterer Wert für denselben Key ausgegeben wird, wird der Originalwert durch den neuen Wert überschrieben.
{% foreach item in { 'apple': 'fruit', 'potato': 'unknown' }|merge({ 'potato': 'vegetable'}) %} {{item}} <br /> {% endforeach %}
Ergebnis
fruit vegetable
Ersetzt die Neue-Zeile-Zeichen \ im Code durch HTML-Zeilenumbrüche (<br />).
{{ "I like Emarsys Scripting Language.nYou will like it too."|nl2br }}
Ergebnis
I like Emarsys Scripting Language.<br /> You will like it too.
Formatiert Dezimalzahlen. Der erste Parameter in number_format bestimmt, wie viele Stellen der Dezimalteil hat. Im folgenden Beispiel ist das "2", daher werden 2 der 3 Dezimalstellen angezeigt. Der zweite Parameter definiert das Dezimaltrennzeichen, in diesem Fall ist das ein Komma (,). Der dritte Parameter steht für das Tausender-Trennzeichen, in unserem Fall ein Punkt (.) .
{{ 9800.333|number_format(2, ',', '.') }}
Ergebnis
9.800,33
Bitte beachten Sie: Wenn für den Filter "number_format" kein Parameter definiert ist, werden keine Dezimalstellen angezeigt und das Tausender-Trennzeichen ist ein Komma (,).
{{ 2005.35|number_format }}
Ergebnis
2,005
Der Filter "replace" ersetzt Teile des Strings.
{{ "I like this and that."|replace({'this': 'chocolate', 'that': 'candy'}) }}
Ergebnis
I like chocolate and candy.
Bitte beachten Sie: Wenn ein Teil eines Strings zuerst als Wert und dann als Key im Parameter angeführt wird, wird er überschrieben. In unserem Beispiel wird "cats" zuerst durch "dogs" ersetzt, dann werden beide "dogs" zu "birds".
{{ "I like cats and dogs."|replace({'cats': 'dogs', 'dogs': 'birds'}) }}
Ergebnis
I like birds and birds.
Der Filter replace
kann keine ESL Expressions ohne Ergebnis (der Inhalt vor dem senkrechten Strich in unserem Beispiel) verarbeiten. Nachrichten, die ein solches Element enthalten, werden nicht gesendet und erhöhen die Metrik Kein Inhalt.
Der Filter kehrt die Reihenfolge von Array- oder String-Elementen um.
{% foreach item in [1, 2]|reverse %} {{item}} <br /> {% endforeach %}
Ergebnis
2 1
{{ '1234'|reverse }}
Ergebnis
4321
Mit dem Filter "round" können die Rundungsbedingungen definiert werden. Der erste Parameter definiert die Anzahl der Dezimalstellen, die in unserem Beispiel 1 ist. Für den zweiten Parameter gibt es zwei Optionen: Die erste ist "floor", dabei werden die Zahlen unabhängig von den allgemeinen Rundungsregeln immer abgerundet.
{{ 42.58|round(1, 'floor') }}
Ergebnis
42.5
Die zweite Optio ist "ceil", bei der immer aufgerundet wird.
{{ 42.54|round(1, 'ceil') }}
Ergebnis
42.6
Bitte beachten Sie: Der Standard ist, keine Dezimalstellen zu haben und gängige Rundungsregeln zu verwenden (aufrunden für die Werte 5 bis 9, abrunden für 1 bis 4).
{{ 42.52|round }}
Ergebnis
43
Konvertiert den String zu "titlecase", d.h. alle Wörter beginnen mit einem Großbuchstaben.
{{ 'my first car'|title }}
Ergebnis
My First Car
Mit diesem Filter können Leerzeichen ausgeschnitten werden.
{{ ' I like Emarsys Scripting Language. '|trim }}
Ergebnis
I like Emarsys Scripting Language.
Auch andere Zeichen können ausgeschnitten werden, wenn sie in dem Parameter angeführt werden.
{{ ' I like Emarsys Scripting Language.'|trim('.') }}
Ergebnis
I like Emarsys Scripting Language
Bitte beachten Sie, dass die Datumsformatierung der ICU-Konvention folgt und die Groß-/Kleinschreibung beachtet. Weitere Informationen erhalten Sie unter ICU-Projektdetails.
Es handelt sich hierbei um eine Funktion zur Formatierung von Datumsangaben. Sie zeigt das Datum des angegebenen Landes an und kann dieses Datum auch übersetzen (sie kann die PHP-Sprachübersetzungen verarbeiten). Bitte beachten Sie, dass nur das Datum angezeigt wird, selbst wenn auch die Uhrzeit angegeben ist. Ein Überschreiben ist möglich; in diesem Fall wird das vordefinierte Datumsformat angezeigt. Ein Beispiel: [{locale: en, format: yyyy mm}] bedeutet, dass englischen Nutzern JJJJ MM angezeigt wird. Der Filter "localized_date" kann 4 Parameter haben. Diese werden in der Reihenfolge angezeigt, die durch die Spracheinstellungen vorgegeben ist, und können Folgendes enthalten:
- full: Jahr, Monat, Datum, Wochentag
- long: Jahr, Monat, Datum
- medium: Jahr, abgekürzte Version des Monats, Datum
- short: jjjj/MM/tt, das Trennzeichen kann unterschiedlich sein.
Der Monat kann auf eine der folgenden Arten angezeigt werden:
Syntax | Angezeigtes Format |
---|---|
M | 9 |
MM | 09 |
MMM | Sep |
MMMM | September |
MMMMM | S |
Weitere Informationen zur Syntax des Datum/Uhrzeit-Formats erhalten Sie hier.
Der Input-String kann eines der folgenden Formate haben:
- 'yyyy-MM-dd'
- 'now'
- '+[number] hours'
- '+[number] days'
- '-[number] hours'
- '-[number] days'
In diesem Beispiel wird eine Full-Version auf Basis des Wert für country+language in Kontaktfeld 12 für das angegebene Datum angezeigt (also z.B. January 1 Friday, 1999).
{{ '1999-01-01'|localized_date(contact.12, 'full') }}
Stellen Sie sicher, dass alle Felder gültige und passende Datenwerte enthalten. Der Filter localized_date
kann keine leeren Felder formatieren; das kann einen Fehler in der Kontakt-Vorschau verursachen.
Sie können auch einen Datenbankfeld-Platzhalter verwenden, um das Datum dynamisch zu befüllen. In diesem Fall achten Sie darauf, beim Feld-Platzhalter die einfachen Anführungszeichen wegzulassen, da der Datumswert in Anführungszeichen ausgegeben wird. In unserem Beispiel verwenden wir den Kontaktfeld-Wert 12345 für die Datumsangabe.
{{ contact.12345|localized_date(contact.12, 'full') }}
Sie können auch eine Datumsangabe der Art "x Tage ab jetzt" verwenden:
{{ '+7 days'|localized_date('de','dd.MM.yyyy') }}
Mit dieser Funktion wird die Uhrzeit formatiert. Sie zeigt die Uhrzeit des angegebenen Landes an und kann diese auch übersetzen (sie kann die PHP-Sprachübersetzungen verarbeiten). Bitte beachten Sie, dass nur die Uhrzeit angezeigt wird, auch wenn das Datum angegeben ist. Hier sehen Sie, was bei der Angabe von Parametern genau angezeigt wird.
- full: HH:MM:SS (AM/PM)
- long: HH:MM:SS (AM/PM)
- medium: HH:MM:SS (AM/PM)
- short: HH:MM (AM/PM)
{{ '1999-01-01 13:13:13'|localized_time(contact.12, 'medium') }},
Bitte beachten Sie, dass der Input-String ein verpflichtendes Format hat (HH:MM:SS für die Uhrzeit). In diesem Beispiel wird mit dem Filter localized_time eine Uhrzeit aus einem datetime-Wert generiert, und zwar auf Basis des im Kontaktfeld 12 gespeicherten Werts für country+language (13:13:13).
Mit dieser Funktion werden Datum und Uhrzeit formatiert. Sie zeigt das Datum und die Uhrzeit des angegebenen Landes an und kann diese auch übersetzen (sie kann die PHP-Sprachübersetzungen verarbeiten). Was die Parameter betrifft, so kombiniert die Funktion die Werte der zwei oben angeführten Filter (wenn der Parameter beispielsweise "full" ist, werden Datum und Uhrzeit ebenfalls "full" angezeigt).
{{ '1999-01-01 13:13:13'|localized_datetime(contact.12, 'long') }},
Ein mögliches Ergebnis für oben angeführtes Beispiel ist: 1999 01 January, 13:13:13
Wenn die Evaluierung der ESL Expression ohne Ergebnis bleibt und dieser Filter hinzugefügt wurde, wird keine Nachricht gesendet. Sie wird jedoch auf der Analyseseite in Emarsys angezeigt. Die standardmäßig ungültigen Werte für diesen Filter sind "" (ein leerer String) und der Wert "null".
{{ contact.2|required(['-']) }}
Der Parameter dieses Filters (in diesem Fall der String) überschreibt den per Standard ungültigen leeren String, sodass dieser String der neue ungültige String wird. Sie können den leeren String auch später noch einschließen, ebenso wie Sie auch mehr als einen ungültigen Wert definieren können. So bedeutet beispielsweise ([x], [y], [ ]), dass es 3 ungültige Elemente gibt; das letzte ist der leere Wert.
E-Mails, die wegen des Filters required
nicht gesendet werden können, erhöhen die Metrik Kein Inhalt. Weitere Informationen zu diesen Metriken erhalten Sie unter Response-Metriken für E-Mails.
Personalisierung
- Verwenden Sie in ESL Expressions nicht die alte Personalisierungsvariable
$
und/oder%
gemeinsam mit der neuen Variable{{ }}
: Ihre E-Mail könnte abgebrochen werden. Für weitere Informationen kontaktieren Sie bitte den Emarsys-Support. - Platzhalter, Variablen und Scripts, die in anderen Plattformen verwendet werden (wie SFMC, Shopify, Magento etc.) beschädigen ESL und führen dazu, dass Ihre Mail abgebrochen wird. Um Probleme dieser Art zu vermeiden, müssen Sie ALLE Instanzen aus Ihren Kampagnen entfernen.
{{ contact. }}
Die Kontaktdaten werden aus der Emarsys Datenbank abgerufen. Nachstehend sehen Sie eine Liste der möglichen Platzhalter für die E-Mail-Personalisierung:
Kontaktfelder für die Einzelauswahl haben sowohl eine Wert-ID als auch einen Textwert.
Bei Felder für die Einzelauswahl können Sie mit einem IF Statement (ID used) nach dem Wert des Feldes suchen.
Um die Wert-ID eines Feldes für die Einzelauswahl zu referenzieren, verwenden Sie {{contact.XX}}
; wenn Sie den Textwert referenzieren wollen, verwenden Sie {{contact.label.XX}}
.
Achtung: Der Wert für eine ID kann je nach Sprache variieren.
Allgemeine Informationen
Parameter | Beschreibung |
---|---|
{{ contact.1 }} | Vorname |
{{ contact.2 }} | Nachname |
{{ contact.3 }} | E-Mail |
{{ contact.9 }} | Titel |
{{ contact.26 }} | Bevorzugtes E-Mail-Format |
{{ contact.46 }} | Anrede |
Persönliche Informationen
Parameter | Beschreibung |
---|---|
{{ contact.4 }} | Geburtsdatum |
{{ contact.5 }} | Geschlecht |
{{ contact.6 }} | Familienstand |
{{ contact.7 }} | Kinder |
{{ contact.8 }} | Ausbildung |
{{ contact.10 }} | Adresse |
{{ contact.11 }} | Stadt |
{{ contact.12 }} | Bundesland |
{{ contact.13 }} | Postleitzahl |
{{ contact.14 }} | Land |
{{ contact.15 }} | Telefon |
{{ contact.16 }} | Fax |
{{ contact.37 }} | Mobile |
{{ contact.38 }} | Vorname Partner/in |
{{ contact.39 }} | Geburtsdatum Partner/in |
{{ contact.40 }} | Jahrestag |
Unternehmensinformationen
Parameter | Beschreibung |
---|---|
{{ contact.17 }} | Berufliche Position |
{{ contact.18 }} | Unternehmen |
{{ contact.19 }} | Abteilung |
{{ contact.20 }} | Branche |
{{ contact.21 }} | Telefon (Arbeitsplatz) |
{{ contact.22 }} | Fax (Arbeitsplatz) |
{{ contact.23 }} | Anzahl der Beschäftigten |
{{ contact.24 }} | Jahresumsatz (in 000 EUR) |
{{ contact.25 }} | URL |
{{ contact.41 }} | Unternehmensadresse |
{{ contact.42 }} | Postleitzahl (Arbeitsplatz) |
{{ contact.43 }} | Stadt (Arbeitsplatz) |
{{ contact.44 }} | Bundesland (Arbeitsplatz) |
{{ contact.45 }} | Land (Arbeitsplatz) |
Weitere Informationen
Parameter | Beschreibung |
---|---|
{{ contact.27 }} | Durchschnittliche Besuchsdauer (Minuten) |
{{ contact.28 }} | Seitenansichten pro Tag |
{{ contact.29 }} | Tage seit der letzten gesendeten E-Mail |
{{ contact.31 }} | Opt-in |
{{ contact.32 }} | Benutzerstatus |
{{ contact.33 }} | Kontaktquelle |
{{ contact.34 }} | Kontaktformular |
{{ contact.35 }} | Registrierungssprache |
{{ contact.36 }} | Newsletter |
{{ contact.47 }} | E-Mail gültig |
{{ contact.48 }} | Datum der ursprünglichen Registrierung |
{{ rds. }}
Diese Daten werden vom Relational Data Service (RDS) übergeben. Product-recommendation ist eine Ansicht, die RDS-Daten aus unterschiedlichen Tabellen übergibt. Der Parameter ist ein Feld, das auf Ihrer Kontaktidentifikation basiert (hier ist es die E-Mail-Adresse).
Hinweis:
- Ein RDS-Parameter muss immer eine Konstante sein (ein Feld oder ein String); er muss immer gleich bleiben.
- Eine RDS Expression ist nur dann gültig, wenn sie einen definierten Index und den Namen eines Feldes enthält.
Beispiel mit foreach
{% foreach product in rds.product_recommendation(contact.3) limit 4 %} {{ product.title }} <br /> {% endforeach %}
Ergebnis
T-shirt
Shirt
Trousers
Jeans
Beispiel ohne Übernahme von foreach
{{ rds.product_recommendation(contact.3)[0].title }} {{ rds.product_recommendation(contact.3)[0].price }}
Ergebnis
T-shirt
59.99
{{ voucher. }}
Mit ESL können Sie Gutscheine in Ihre Personalisierung integrieren.
Coupon-Management
In diesem Szenario wir ein Kontaktfeld erstellt, daher ist die ESL Syntax dieselbe wie bei jedem anderen Kontaktfeld. Hier ist das Feld mit der upper
-Formatierung:
{{ voucher.21345 | upper }}
Omnichannel-Gutscheine
Für diese Gutscheine wird kein Kontaktfeld erstellt, stattdessen muss die voucherID
verwendet werden. Um eine voucherID
zu erhalten, erstellen Sie ein Personalisierungs-Token für Gutscheine und überprüfen Sie dann die ESL in diesem Token.
Sie können den Gutschein wie folgt anführen:
{{ voucher.22738 | upper }}
Link-Tracking
Auch für das Link-Tracking kann ESL verwendet werden; dafür betten Sie den Link in einer ESL Expression ein.
{% if event.payload.example == 'EXAMPLE' %} https://example.com {% endif %}
Bitte stellen Sie sicher, dass in der Textversion der E-Mail der Link und die ESL Expression durch ein Leerzeichen oder einen Zeilenumbruch getrennt werden. Andernfalls funktioniert das Link-Tracking nicht und die Kampagne wird möglicherweise ungültig.
Nützliche Tools
Twig-Tests sind mit TwigFiddle möglich; dabei können die Ergebnisse beliebiger Twigs überprüft werden. Bitte beachten Sie, dass wir einige spezielle Tags, Parameter und Filter verwenden, auf die diese Testmethode nicht so einfach angewendet werden kann. Wenn Sie Code mit dem Tag foreach testen wollen, empfehlen wir, es durch ein einfaches for
-Tag zu ersetzen und dann zu testen. Andere Elemente, die nicht getestet werden können, sind der Parameter limit
und .rds-basierte Codes. Was die Filter betrifft, so sind die folgenden vier ESL-spezifisch:
- localized_date
- localized_time
- localized_datetime
- required
Für das Bearbeiten Ihres Scripts eignen sich Atom und Notepad++ mit einem Twig-spezifischen Add-on.
ESL-Validierung
Wenn Sie ein ESL Snippet zu Ihrem Content hinzufügen, wird das ESL Script auf Kampagnenebene validiert. Ist das Script ungültig, können Sie das Token nicht speichern. Wenn das Snippet hinzugefügt wird, überprüft der Editor automatisch, ob Ihr Code gültig ist oder nicht.

Beispiele
Externe Daten für transaktionale E-Mails
Ein Beispiel finden Sie unter: Externe Daten für transaktionale E-Mails triggern
Häufige Fehler bei der Verwendung von ESL
Vermischen von alter $ - oder %% -Personalisierung in ESL | Diese Variablen können nicht miteinander verwendet werden. Sie werden von zwei unterschiedlichen Diensten verarbeitet und die Emarsys Marketing Plattform zeigt entweder die Platzhalterzeichen an oder bricht die E-Mail ab. Platzhalter, Variablen und Scripting, die in anderen Plattformen verwendet werden (wie SFMC, Shopify, Magento etc.), beschädigen die ESL und führen dazu, dass Ihre E-Mail abgebrochen wird. Sie müssen jede einzelne Instanz entfernen. |
Verwenden eines einzelnen Zeichens = statt zweier == | Grundsätzlich verwenden Sie = ausschließlich für das Setzen einer Variable und == , um einen Wert oder String zu checken. |
Referenzieren des Objekts "global" in JSON überspringen | Wenn das Objekt "global" Daten enthält, müssen Sie es in ESL referenzieren.{{event.ordertotal}} statt {{event.global.ordertotal}} ist innerhalb des Objekts "global" falsch. |
ESL/Twig beachtet die Groß-/Kleinschreibung | {{event.global.orderTotal}} ist eine andere Variable als {{event.global.ordertotal}} |
Abgesehen von Variablen und Werten sollten Sie immer nur Kleinschreibung verwenden | Nicht korrekt: {% if contact.1111 == 'Family' AND contact.2222 == 'Other' %} Nicht korrekt: {% IF contact.1111 == 'Family' and contact.2222 == 'Other' %} Nicht korrekt: {% if CONTACT.1111 == 'Family' and CONTACT.2222 == 'Other' %} Korrekt: {% if contact.1111 == 'Family' and contact.2222 == 'Other' %} |
Inkonsistente JSON-Struktur | Wenn Sie JSON über ESL referenzieren, ohne zuerst die Existenz zu überprüfen, muss diese Variable IMMER vorhanden sein, unabhängig davon, ob sie gebraucht wird. Ist sie nicht im JSON enthalten, wird die E-Mail aufgrund fehlenden Contents nicht gesendet. |
Der übliche Hinweis darauf ist eine große Anzahl von E-Mails, die wegen "No Content" abgebrochen werden. | |
Aufruf einer nicht definierten Variable | Nur weil ein anderes System eine Bestellung mit {{orders.lastorder.price}} referenziert, heißt das nicht, dass ESL dies auch tut. Mit der Ausnahme von benutzerdefinierten Variablen und Variablen in einem Array, die Sie per Looping verschleifen, können Sie nur Variablen verwenden, die wie folgt beginnen:{{contact...}} {{event...}}
|
Hinzufügen überflüssiger Leerzeichen und Wörter bzw. Auslassen von Leerzeichen in Statements | {% end foreach %} statt {% endforeach %} {% else if %} statt {% elseif %} {% end if %} statt {% endif %} {% endelseif %} statt {% endif %} {%if contact.1111 == 'Family'%} statt {% if contact.1111 == 'Family' %} Das verhindert nicht notwendigerweise die korrekte Ausführung, beeinträchtigt jedoch die Syntax Highlighters und kann verwirrend sein. |
Unterschiede zwischen if , elseif und else | In einem if -Statement sind {% if foo == 'bar' %} und {% endif %} die einzigen obligaten Teile. elseif und else sind nützlich, aber optional.Ein Beispiel: if ist Ihre öffnende Bedingung. Für jedes if muss es ein schließendes endif geben. Sie können in ein anderes if schachteln, aber am Ende müssen beide Instanzen geschlossen sein.elseif wird ausschließlich dafür verwendet, eine weitere Bedingung zu prüfen, nachdem die vorangegangene fehlgeschlagen ist. Wenn es keine zweite Bedingung gibt, die überprüft werden muss, sollten Sie else verwenden. {% elseif %} ist ungültig. Es sollte niemals ohne ein vorangestelltes if verwendet werden, und das vorangestellte if darf nicht bereits durch endif geschlossen werden.else ist Ihr Fallback. Wenn keine der vorangegangenen Bedingungen zutrifft, wird stattdessen else verwendet. Die Verwendung ist optional. Wenn Sie kein Fallback definieren wollen, können Sie auf die Verwendung von else verzichten. Das natürliche Verhalten von if ist, kein Fallback zu verwenden. |
Keine Anführungszeichen beim Referenzieren eines Strings | Strings sind exakt. Um sie zu verwenden oder zu überprüfen, müssen Strings in einfache oder doppelte Anführungszeichen eingeschlossen werden. |
Synonyme Verwendung von {{ und {% | Nicht korrekt: {{ endif }} Korrekt: {% endif %} Nicht korrekt: {% contact.1111 %} Korrekt: {{contact.1111}} {{...}} sollte immer verwendet werden, um Variablen aus JSON, RDS, Kontakttabellen etc. zu drucken.{%...%} sollte für Statements oder Logiken verwendet werden, insbesondere: {% if... {% foreach... {% set... Wenn Sie eine Variable statt eines Statements referenzieren, brauchen Sie {{ }} nicht, da Sie die Variable nicht drucken.Korrekt: {% if contact.3 %} Nicht korrekt: {% if {{contact.3}} %} |
Nicht unterstützte ESL Expressions
Nicht unterstützte Syntaxen
Folgende Syntaxen werden nicht unterstützt und sollten daher nicht verwendet werden:
#DATE# #TIME# #L_YEAR# #S_YEAR# #S_MONTH# #L_MONTH# #L_DAY# #S_DAY# #HOUR# #MINUTE# #SECOND# #UNIX_TIMESTAMP#
Nicht unterstützte Filter
Folgende Filter werden nicht unterstützt und sollten daher nicht verwendet werden:
required_length
Dieser Filter scheitert möglicherweise an der Seite für das visuelle Link-Tracking und gibt dann folgende Fehlermeldung zurück:
Eine Vorschau der E-Mail kann hier nicht angezeigt werden. Bitte öffnen Sie den E-Mail Content Editor und zeigen Sie die Vorschau im Editor an.