Personalization-Rezepte personalization-recipes
Auf dieser Seite finden Sie einsatzbereite Personalisierungsmuster für die häufigsten Anwendungsfälle in Adobe Journey Optimizer. Alle Beispiele verwenden die Syntax des Personalisierungseditors und können direkt in E-Mail-, SMS- oder Push-Inhalte kopiert werden.
Eine vollständige Übersicht der verfügbaren Funktionen finden Sie unter Hilfsfunktionen, Datums-/, Zeichenfolgenfunktionen und Array-Funktionen.
Rezepte für Datum und Uhrzeit date-time-recipes
Rezept 1 - Zeigt das aktuelle Datum in einem lesbaren Format an recipe-current-date
Verwenden Sie formatDate mit getCurrentZonedDateTime(), um das heutige Datum in einem beliebigen Format wiederzugeben:
{%= formatDate(getCurrentZonedDateTime(), "MMMM dd, yyyy") %}
Ausgabe (Beispiel): April 11, 2026
Allgemeine Formatmuster:
"dd/MM/yyyy"11/04/2026"MM/dd/yyyy"04/11/2026"EEEE, MMMM dd"Saturday, April 11"yyyy-MM-dd"2026-04-11y in Kleinbuchstaben (Kalenderjahr) anstelle von Y (wöchentliches Jahr), um unerwartete Ergebnisse an den Jahresgrenzen zu vermeiden. Siehe Musterzeichen für die vollständige Referenz.Rezept 2 — Countdown bis zu einem Ablauf- oder Ereignisdatum recipe-countdown
Verwenden Sie dateDiff, um die Anzahl der verbleibenden Tage bis zu einem Profildatumsattribut zu berechnen und es dann dynamisch zu rendern:
Ausgabe (Beispiel): Your reward points expire in 7 days. Use them before they're gone!
Rezept 3 - X Tage vor einem dynamischen Enddatum recipe-days-before
Um ein Datum zu berechnen, das X Tage vor einem Profilattribut liegt (z. B. um in Inhalt oder Betreffzeilen zu referenzieren), verwenden Sie addDays mit einem negativen Offset:
{%= formatDate(addDays(stringToDate(profile.subscription.endDate), -7), "MMMM dd, yyyy") %}
Ausgabe (Beispiel): April 04, 2026 (7 Tage vor dem 11. April)
Um auch eine feste Tageszeit festzulegen (z. B. 9 Uhr), kombinieren Sie mit setHours:
{%= formatDate(setHours(addDays(stringToDate(profile.subscription.endDate), -7), 9), "dd/MM/yyyy HH:mm") %}
Rezept 4 — Aktuelle Zeit nur als HH:MM anzeigen recipe-time-only
Verwenden Sie extractHours und extractMinutes, um nur den Zeitanteil anzuzeigen, mit einem Schutzmechanismus mit führender Null für Minuten:
Ausgabe (Beispiel): Your appointment is at 14:05.
Rezept 5 - Wochenende vs. Wochentag erkennen recipe-weekend
Verwenden Sie dayOfWeek , um Inhalte auf der Grundlage des Tages anzupassen. Die Funktion gibt 1 (Montag) bis 7 (Sonntag) zurück. Verwenden Sie den = Operator (PQL-Syntax, nicht ==):
dayOfWeek() dient der () je nach Tag. Wenn Sie Profile je nach Wochentag auf einer Journey unterschiedlich weiterleiten möchten, verwenden Sie die integrierte Option Zeitbedingung → Wochentag in der Aktivität Journey-Bedingung . Weitere InformationenArray- und Schleifenrezepte array-recipes
Rezept 6 - Listet alle Elemente aus einem Profil-Array auf recipe-list-items
Verwenden Sie {{#each}} , um über ein Profil-Array zu iterieren und jedes Element zu rendern. Dies ist nur im Personalisierungseditor (E-Mail, SMS, Push) verfügbar:
Ausgabe (Beispiel):
- Running shoes: 89€
- Water bottle: 15€
- Gym bag: 45€
{{#each}} wird in der Aktivität Journey-Bedingung nicht unterstützt. Verwenden Sie zum Filtern von Arrays in Bedingungen Sammlungs-Management-Funktionen.Rezept 7 - Zeigt die Top N Elemente aus einem Array nach Preis recipe-first-n
Verwenden Sie topN , um die Top-N-Elemente nach einem numerischen Feld zu sortieren und abzurufen. Da topN eine PQL-Funktion ist, weisen Sie sie zuerst mit {% let %} einer Variablen zu und dann mit {{#each}}:
topN(profile.orders, price, 3) sortiert Bestellungen nach price in absteigender Reihenfolge und gibt die drei wichtigsten zurück. Es werden nicht einfach die ersten drei Elemente in der ursprünglichen Array-Reihenfolge zurückgegeben.Oder verwenden Sie head, um nur das oberste Element abzurufen:
{%= head(profile.purchases.recentItems).name %}
Rezept 8 - Inhalt bedingt pro Array-Element rendern recipe-conditional-loop
Verwenden Sie {%#if%} in {{#each}}, um die Ausgabe nur für übereinstimmende Elemente zu rendern. Definieren Sie einen Schleifenalias mit as |order|, damit der PQL-Auswerter den Attributverweis in der Bedingung auflösen kann:
this.status funktioniert in Handlebars-Ausdrücken, wird aber vom PQL-Auswerter in {%#if%} nicht aufgelöst. Durch die Verwendung eines benannten Schleifenalias (z. B. order) wird das -Attribut sowohl für den Handlebars- als auch für den PQL-Kontext verfügbar.Zeichenfolgen- und Formatierungsrezepte string-recipes
Rezept 9 - Eine Zeichenfolge mit replaceAll reinigen und wiederverwenden recipe-replaceall-reuse
replaceAll gibt einen neuen Wert zurück - das Original wird nicht geändert. Verwenden Sie {% let %}, um das Ergebnis zu speichern und mehrmals darauf zu verweisen, ohne den Funktionsaufruf zu wiederholen:
Ausgabe (Beispiel):
Hi John,
Your exclusive code is: WELCOME-JOHN
Rezept 10 - Einen Wert in der JSON-Ausgabe doppelt angeben recipe-json-quotes
Um ein literales doppeltes Anführungszeichen in eine Zeichenfolge einzuschließen (z. B. um JSON für eine benutzerdefinierte Payload zu generieren), Escape-Zeichen mit einem umgekehrten Schrägstrich (\"):
Ausgabe: { "greeting": "Hello \"John\"" }
Rezept 11 - Formatieren einer Datumskomponente in Großbuchstaben recipe-uppercase-date
Kombinieren Sie formatDate mit upperCase, um Monats- oder Tagesnamen in Großbuchstaben zu ändern:
{%= upperCase(formatDate(getCurrentZonedDateTime(), "MMMM")) %}
Ausgabe (Beispiel): APRIL
Für eine vollständige Datumszeichenfolge in Großbuchstaben:
{%= upperCase(formatDate(profile.person.birthDateTime, "EEEE MMMM dd yyyy")) %}
Ausgabe (Beispiel): WEDNESDAY JANUARY 01 2020
Bedingte Logik - Rezepte conditional-recipes
Rezept 12 — IF/ELSEIF/ELSE in personalisierten Inhalten recipe-if-elseif
Verwenden Sie {%#if%}, {%else if%} und {%else%} für eine bedingte Logik mit mehreren Verzweigungen. Dieses Muster funktioniert in E-Mail-Inhalten und -Fragmenten:
Rezept 13 — Null-Safe-Attributanzeige recipe-null-safe
Verwenden Sie ein bedingtes Fallback, um zu vermeiden, dass leere Werte gerendert werden, wenn ein Profilattribut null sein kann oder fehlt:
Oder inline mit einem Muster im ternären Stil unter Verwendung von isEmpty:
PQL Edge Case-Rezepte pql-edge-cases
Rezept 14 - Referenzieren eines mit Bindestrichen versehenen Attributschlüssels recipe-hyphenated-key
Wenn der XDM-Schemafeldname Bindestriche enthält (z. B. order-total, event-type), schließen Sie ihn in einen PQL-Ausdruck mit Backticks ein, um zu verhindern, dass der Bindestrich als Subtraktionsoperator interpretiert wird:
{%= profile.events.`order-total` > 100 %}
{%= ... %}) unterstützt. Sie werden in der reinen Handlebars-Interpolation ({{...}}) nicht akzeptiert. Wenn Sie einen Feldwert mit Bindestrich direkt rendern müssen, werten Sie ihn über einen PQL-Ausdruck aus oder speichern Sie ihn zuerst mit {% let %} in einer Variablen.Rezept 15 - Referenzieren einer numerischen Ereignis-ID in einem Kontextattribut recipe-numeric-event-id
Wenn Sie ein Journey-Kontextereignis verwenden, dessen ID eine numerische Zeichenfolge ist (z. B. 1697323153), schließen Sie die ID in Backticks ein und verwenden Sie {% let %} mit toDateTime() und formatDate():
Ausgabe (Beispiel): Your appointment: 18/03/2026 14:30
Rezept 16 - Zwang eingeben: Zeichenfolgenfeld mit einer Zahl vergleichen recipe-type-coercion
PQL ist stark typisiert. Wenn ein Profilfeld als Zeichenfolge gespeichert wird, Sie es jedoch numerisch vergleichen müssen, konvertieren Sie es zuerst mit stringToNumber():
{%= stringToNumber(profile.loyalty.pointsBalance) > 500 %}
Für boolesche Felder, die als Zeichenfolgen gespeichert werden:
{%= toBool(profile.consents.email.val) = true %}