Auf dieser Seite: Erfahren Sie mehr über die Handlebars- und PQL-Personalisierungssyntax in Adobe Journey Optimizer, einschließlich allgemeiner Regeln, reservierter Keywords, Typzwang, verfügbarer Namespaces und Best Practices.
Personalization in Journey Optimizer verwendet zwei komplementäre Syntaxen, die im selben Ausdruck zusammenarbeiten:
- Handlebars (
{{...}}) - Wird zum Rendern von Profilattributen, zum Durchlaufen von Arrays und zum Aufrufen von Block-Helfern verwendet. Eine vollständige Referenz finden in der zu HandlebarsJS . - Profile Query Language (PQL) (
{%= ... %}) - Wird zum Aufrufen integrierter Funktionen (z. B.upperCase(),formatDate(),dateDiff()) und zum Auswerten bedingter Ausdrücke verwendet.
Um Laufzeitfehler zu vermeiden, ist es von entscheidender Bedeutung zu verstehen, in welchem Kontext Sie sich befinden. Beispielsweise schlägt ein in {{...}} platzierter PQL-Funktionsaufruf fehl, weil Handlebars versucht, ihn als Helper aufzulösen, anstatt ihn als PQL-Ausdruck zu bewerten.
Beispiele:
{{profile.person.name.firstName}}{%= upperCase(profile.person.name.firstName) %}{%#if profile.loyalty.tier = "gold"%}...{%/if%}{{#each profile.orders}}...{{/each}}Die Attributstruktur wird in einem XDM-Schema von Adobe Experience Platform definiert. Weitere Informationen.
Allgemeine Syntaxregeln general-rules
-
Kennungen können beliebige Unicode-Zeichen sein, mit Ausnahme der folgenden Sonderzeichen, die für die Handlebars-Syntax reserviert sind:
code language-none Whitespace ! " # % & ' ( ) * + , . / ; < = > @ [ \ ] ^ ` { | } ~ -
Die Syntax unterscheidet zwischen Groß- und Kleinschreibung.
-
Die Wörter true, false, null und undefined sind nur im ersten Teil eines Pfadausdrucks zulässig.
-
In Handlebars werden den von {{expression}} zurückgegebenen Werten HTML-Escape-Zeichen hinzugefügt. Wenn der Ausdruck „
&“ enthält, wird die Ausgabe mit HTML-Escape-Zeichen als „&“ generiert. Wenn Sie wünschen, dass Handlebars einen Wert nicht escapen, verwenden Sie drei geschweifte Klammern.Angenommen, der Wert des Felds
profile.person.namelautet „Mark & Mary“. Die Syntax{{profile.person.name}}zeigtMark & Maryan, während{{{profile.person.name}}}Mark & Maryanzeigt. -
Bezüglich der Argumente für Literalfunktionen unterstützt der Sprach-Parser für Vorlagen keinen einfachen umgekehrten Schrägstrich ohne Escape-Sequenz (
\). Dieses Zeichen muss mit einem zusätzlichen umgekehrten Schrägstrich (\) mit Escape-Sequenz versehen werden. Beispiel:{%= regexGroup("abc@xyz.com","@(\\w+)", 1)%} -
Um ein literales doppeltes Anführungszeichen in einen Zeichenfolgenwert einzuschließen (z. B. beim Generieren einer JSON-Ausgabe), Escape-Zeichen mit einem umgekehrten Schrägstrich (
\"):code language-handlebars { "message": "Hello \"{{profile.person.name.firstName}}\"" }Ausgabe:
{ "message": "Hello \"John\"" }Alternativ können Sie die Triple-Stash-
{{{ }}}verwenden, um HTML ohne Escape-Zeichen auszugeben, wenn der Wert selbst Sonderzeichen enthält, die nicht in HTML codiert werden sollen.
Reservierte Keywords reserved-keywords
Bestimmte Keywords sind in Profile Query Language (PQL) reserviert und können nicht direkt als Feld- oder Variablennamen in Personalisierungsausdrücken verwendet werden. Wenn Ihr XDM-Schema Felder mit Namen enthält, die reservierten Keywords entsprechen, müssen Sie diese mit Backticks (`) maskieren, wenn Sie in Ihren Ausdrücken darauf verweisen möchten.
Zu den reservierten Keywords zählen:
nextlastthis
Beispiel:
Wenn Ihr Profilschema ein Feld mit dem Namen next enthält, müssen Sie es in Backticks einschließen:
{{profile.person.`next`.name}}
Ohne die Backticks gibt die Validierung des Personalisierungseditors einen Fehler zurück.
{{...}} Handlebars-Pfade als auch für {%= ... %} PQL-Ausdrücke, da diese Keywords auf der Pfadauflösungsebene reserviert sind. Dies unterscheidet sich von den Feldnamen mit Bindestrich, bei denen Backtick-Escaping nur innerhalb von PQL-Ausdrücken unterstützt wird. Siehe Schlüssel für getrennte Attribute.PQL-Syntaxregeln für spezielle Attributschlüssel pql-special-keys
Neben reservierten Keywords erfordern zwei zusätzliche Fälle Backtick-Escaping in PQL-Ausdrücken.
Getrennte Attributschlüssel hyphenated-keys
Wenn Ihr XDM-Schema Feldnamen mit Bindestrichen (z. B. my-field, event-type) oder Namen enthält, die mit Zahlen beginnen oder Zahlen enthalten, schließen Sie den Schlüssel in Backticks in PQL-Ausdrücken ein:
{%= profile.events.`order-total` > 100 %}
{%= ... %}) unterstützt. Sie wird in der Handlebars-Interpolation ({{...}}) nicht unterstützt. Trennzeichen können jedoch direkt in {{...}} referenziert werden (z. B. {{profile.my-custom-field}}); nur die Backtick-Syntax schlägt dort fehl.Ohne Backticks in einem PQL-Ausdruck wird der Bindestrich als Subtraktionsoperator interpretiert und verursacht einen PQL-Syntaxfehler.
Numerische Ereignis-IDs in Kontextattributen numeric-event-ids
Wenn Sie auf Kontextereignisattribute verweisen, bei denen die Ereignis-ID eine Zahl ist (z. B. 1697323153), schließen Sie sie in Backticks ein. Dies gilt auch für Funktionen wie formatDate():
Typzwang type-coercion
PQL ist stark typisiert. Beim Vergleichen oder Übergeben von Werten müssen beide Seiten vom gleichen Typ sein. Häufige Fälle:
stringToNumber() vor Arithmetik oder Vergleich verwenden: {%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}string_to_integer() oder stringToNumber() vor der Arithmetik verwendentoBool() zum Konvertieren verwenden: {%= toBool(profile.consents.email.val) = true %}Verfügbare Namespaces namespaces
-
Profil
Dieser Namespace erlaubt die Referenzierung aller im Profilschema definierten Attribute, die unter Dokumentation zum Datenmodell (XDM) von Adobe Experience Platform beschrieben werden.
Die Attribute müssen im Schema definiert sein, damit sie in einem Personalisierungsblock in Journey Optimizer referenziert werden können.
Weitere Informationen zur Verwendung von Profilattributen in Bedingungen finden Sie in diesem Abschnitt.
accordion Beispielverweise {{profile.person.name.fullName}}{{profile.person.name.firstName}}{{profile.person.gender}}{{profile.personalEmail.address}}{{profile.mobilePhone.number}}{{profile.homeAddress.city}}{{profile.faxPhone.number}}
-
Zielgruppe
Weitere Informationen zum Segmentierungs-Service finden Sie in dieser Dokumentation.
-
Angebote
In diesem Namespace können Sie bestehende Entscheidungen referenzieren.
Um ein Angebot zu referenzieren, müssen Sie einen Pfad mit den verschiedenen Informationen angeben, die das Angebot definieren. Dieser Pfad weist die folgende Struktur auf:
offers.Type.[Placement Id].[Activity Id].AttributeHier gilt:
offersidentifiziert den Pfadausdruck, der zum Angebots-Namespace gehört.Typebestimmt den Typ der Angebotsdarstellung. Zu den möglichen Werten gehörenimage,htmlundtextPlacement IdundActivity Idsind Platzierungs- und Aktivitätskennungen.Attributessind angebotsspezifische Attribute, die vom Angebotstyp abhängen. Beispiel:deliveryUrlfür Bilder
Weitere Informationen zur Entscheidungs-API und zu Angebotsdarstellungen finden Sie auf dieser Seite.
Ein Validierungsmechanismus, der auf dieser Seite beschrieben wird, validiert alle Verweise anhand des Angebotsschemas.
accordion Beispielverweise -
Speicherort, an dem das Bild gehostet wird:
offers.image.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].deliveryUrl -
Ziel-URL beim Klicken auf das Bild:
offers.image.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].linkUrl -
Text-Inhalt des Angebots aus der Entscheidungs-Engine:
offers.text.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].content -
HTML-Inhalt des Angebots aus der Entscheidungs-Engine:
offers.html.[offers:xcore:offer-placement:126f767d74b0da80].[xcore:offer-activity:125e2c6889798fd9].content
Helper helpers-all
Ein Handlebars-Helper ist eine einfache Kennung, auf die Parameter folgen können. Jeder Parameter ist ein Handlebars-Ausdruck. Helper können in jedem Kontext einer Vorlage aufgerufen werden.
Diese Block-Helper werden durch ein # am Anfang des Helper-Namens gekennzeichnet und erfordern einen passenden schließenden / am Ende des Namens.
Blöcke sind Ausdrücke mit einer Blockeröffnung ({{# }}) und schließendem ({{/}}).
Weitere Informationen zu Hilfsfunktionen finden Sie diesem Abschnitt.
Literaltypen literal-types
Adobe Journey Optimizer unterstützt die folgenden Literaltypen:
Beispiele:
"prospect", "jobs", "articles"Beispiele:
-201, 0, 412Hinweis: Sie können nicht direkt auf die Eigenschaften von Elementen in einem Array zugreifen.
Beispiele:
[1, 4, 7], ["US", "FR"]Best Practices best-practices
Überprüfen Sie diese Syntaxregeln, bevor Sie Personalisierungsausdrücke erstellen. Die meisten Laufzeitfehler rühren aus der Vermischung von Handlebars- und PQL-Kontexten her.
Verwenden Sie die richtige Syntax für bedingte Blöcke
Verwenden Sie immer {%#if%} / {%else if%} / {%else%} / {%/if%}. Die Syntax {% if %} / {% elseif %} / {% endif %} wird nicht unterstützt.
Rufen Sie keine PQL-Funktionen in {{...}} Handlebars-Blöcken auf
{{...}} löst nur Handlebars-Variablen und -Helfer auf - es wird PQL nicht ausgewertet. Das Umschließen einer PQL-Funktion wie upperCase() in {{...}} verursacht den Fehler „Helper konnte nicht gefunden werden“. Verwenden Sie stattdessen {%= ... %}:
{{upperCase(cleanName)}}{%= upperCase(cleanName) %}Verwenden eines Alias für eine benannte Schleife beim Kombinieren von {{#each}} mit{%#if%}
this.field wird vom Handlebars-Renderer aufgelöst, nicht jedoch vom PQL-Auswerter innerhalb einer {%#if%}. Definieren Sie einen benannten Alias mit as |item|, damit beide Kontexte das Feld auflösen können:
Weisen Sie einer Variablen vor der Schleife Ergebnisse der PQL-Funktion zu
PQL-UDFs wie topN können nicht direkt in {{#each}} aufgerufen werden. Bewerten Sie sie zunächst mit {% let %} und durchlaufen Sie dann das Ergebnis:
Verwenden Sie {% let %}, um zu vermeiden, dass Funktionsaufrufe wiederholt werden
Wenn ein berechneter Wert mehrmals benötigt wird, speichern Sie ihn in einer Variablen. Dies verbessert die Lesbarkeit und verhindert redundante Auswertungen:
Verwenden Sie die richtige Argumentreihenfolge fürdateDiff
dateDiff(start, end) nimmt das frühere Datum zuerst. Um die bis zu einem zukünftigen Datum verbleibenden Tage zu berechnen, übergeben Sie das aktuelle Datum als erstes Argument:
Verwenden von = für Gleichheitsvergleiche in PQL, nicht==
PQL verwendet für Gleichheit einen einzelnen =. Die Verwendung von == führt zu einem Syntaxfehler.
Backticks für Feldnamen mit Bindestrichen verwenden - nur in PQL-Ausdrücken
Wenn ein XDM-Schemafeldname einen Bindestrich enthält (z. B. order-total), schließen Sie ihn in Backticks ein, um zu verhindern, dass der Bindestrich als Subtraktionsoperator geparst wird. Dies wird nur innerhalb {%= ... %} PQL-Ausdrücke unterstützt, nicht in {{...}} Handlebars-Blöcken:
{%= profile.events.`order-total` > 100 %}
Gebrauchsfertige Ausdrücke, die Sie direkt in Ihren Inhalt kopieren können, finden Sie unter Personalization-Rezepte.