Liquid im WhatsApp-Template-Builder
Sie können Liquid verwenden, um Templates im WhatsApp-Template-Builder zu personalisieren. Die Template-Struktur von Meta bringt jedoch Einschränkungen mit sich, die es in anderen Braze-Kanälen nicht gibt. Zwei Liquid-Muster erfordern besondere Beachtung: Message Extras und bedingte Messaging-Logik.
Für Message Extras und bedingte Messaging-Logik verlangt Meta, dass jede Variable in einem Template zum Sendezeitpunkt tatsächlich gerenderten Inhalt enthält. Variablen, die leere Strings liefern oder sich wie unsichtbare Metadaten statt sichtbarer Text verhalten, führen zu Sendefehlern. Bedingungen, die die statische Nachrichtenstruktur verändern, anstatt nur den Inhalt der Variable zu ändern, verursachen ebenfalls unerwartetes Verhalten.

Die in diesem Artikel beschriebenen Einschränkungen gelten nur für Template-Nachrichten (ausgehende Nachrichten, die ein von Meta genehmigtes Template verwenden). Die Einschränkungen gelten nicht für Antwortnachrichten (die innerhalb eines 24-Stunden-Messaging-Fensters gesendet werden, das von einer/einem Nutzer:in geöffnet wurde), oder für Message Extras, bedingte Logik und andere Liquid-Muster in anderen Braze-Kanälen.
Übersicht
| Muster | Unterstützt? | Hinweise |
|---|---|---|
message_extras innerhalb einer Variable mit anderem sichtbaren Inhalt |
✅ Ja | Tag wird erfasst; sichtbarer Text erfüllt Metas Anforderung an Variableninhalte |
message_extras als einziger Inhalt einer Variable |
❌ Nein | Wird zu leerem String aufgelöst; verursacht Sendefehler |
| Bedingtes Liquid innerhalb eines Variablen-Slots | ✅ Ja | Braze wertet vor dem Senden aus; Meta sieht nur den endgültig gerenderten Wert |
| Bedingtes Liquid außerhalb eines Variablen-Slots | ❌ Nein | Liquid-Tags werden als Klartext gerendert; Empfänger:in sieht die rohe Syntax |
| Template beginnt oder endet mit einem Variablen-Slot | ❌ Nein | Meta verlangt statischen Text am Anfang und Ende jedes Templates |
| Variablen-Slot, der zu einem leeren String aufgelöst wird | ❌ Nein | Meta verlangt zum Sendezeitpunkt nicht-leeren Inhalt in jeder Variable |
Message Extras
Der message_extras-Liquid-Tag ermöglicht es Ihnen, eine Nachricht zum Sendezeitpunkt mit Schlüssel-Wert-Metadaten zu versehen. Diese Daten werden nicht im Nachrichtentext gerendert. Stattdessen fließen die Daten an Connected-Content, Currents oder andere Datenerfassungsmechanismen für Zwecke wie Attribution, Wirkungsmessung und Event-Anreicherung.
1
{% message_extras :key campaign_id :value "spring_promo_2025" %}
Warum eigenständige Message-Extras-Variablen fehlschlagen
Im WhatsApp-Template-Builder werden Template-Variablen (wie {{1}}, {{2}}) direkt auf Liquid-Ausdrücke abgebildet. Metas Validierung verlangt, dass jeder Variablen-Slot im genehmigten Template zum Sendezeitpunkt nicht-leeren Inhalt enthält; es muss etwas sein, das als sichtbarer Text für die/den Empfänger:in gerendert wird.
Da message_extras keine Ausgabe erzeugt, wird durch das alleinige Platzieren in einer Template-Variable ein leerer String für diesen Variablen-Slot übermittelt. Meta lehnt dies ab, sodass der Nachrichtenversand fehlschlägt.
Falsche Verwendung für den WhatsApp-Template-Builder
1
Template variable {{1}}: {% message_extras :key attribution_source :value "canvas_a" %}
Zum Sendezeitpunkt wird {{1}} zu einem leeren String aufgelöst, was einen Sendefehler verursacht.
Korrekte Verwendung
Um einen message_extras-Tag korrekt einzubinden, betten Sie den Tag in eine bestehende Variable ein. Das bedeutet, den Tag innerhalb eines Liquid-Blocks zu platzieren, der sichtbare Ausgabe erzeugt – konkret innerhalb desselben Ausdrucks, der eine echte Template-Variable befüllt. Meta akzeptiert die Variable, weil sie Inhalt enthält, Braze erfasst die Metadaten, und die/der Empfänger:in sieht nur den gerenderten Text.
Beispiel
Angenommen, der Template-Text lautet:
1
Hi {{1}}, your order has shipped.
Und die Variable {{1}} ist zugeordnet zu:
1
{{ ${first_name} | default: "there" }}
Um ein Message Extra anzuhängen, schreiben Sie den Variablenausdruck wie folgt um:
1
{{ ${first_name} | default: "there" }}{% message_extras :key order_source :value "canvas_spring" %}
Zum Sendezeitpunkt wird {{1}} zu etwas wie "Alex" aufgelöst – sichtbarer Inhalt, der Metas Anforderung erfüllt. Der message_extras-Tag wird ausgewertet und seine Daten werden erfasst, trägt aber nichts zum gerenderten String bei, den die/der Empfänger:in sieht.
Wichtige Regeln
- Weisen Sie
message_extrasniemals als einzigen Inhalt einer Template-Variable zu. - Hängen Sie den Tag immer an eine Variable an, die zu sichtbarem Text aufgelöst wird.
- Sie können mehrere
message_extras-Tags an denselben Variablenausdruck anhängen, ohne die gerenderte Ausgabe zu beeinflussen. - Verwenden Sie dieses Muster im Text, in der Kopfzeile und in allen anderen Variablen-Slots.
Bedingte Messaging-Logik
In Messaging-Kanälen können Liquid-if/elsif/else-Blöcke bedingt ganze Textabschnitte ein- oder ausschließen. Braze rendert die vollständige Liquid-Ausgabe vor dem Senden, und das Ergebnis ist das, was die Logik erzeugt.
Meta-genehmigte WhatsApp-Templates haben jedoch eine feste Struktur. Meta unterscheidet Template-Inhalte in zwei Kategorien:
- Statischer Text: Fest codierte Strings, die bei der Template-Erstellung bestätigt werden und für jede/n Empfänger:in identisch bleiben.
- Variablen-Slots: Platzhalter-Positionen (wie
{{1}}), deren Inhalt zum Sendezeitpunkt befüllt wird.
Warum bedingte Messaging-Logik außerhalb eines Variablen-Slots fehlschlägt
Das Verhältnis von statischem Text zu Variablen-Slots in einem genehmigten Template ist fest, kann sich nicht pro Sendung ändern und hat feste Grenzen. Meta verlangt eine Mindestmenge an statischem Text für jeden Variablen-Slot im Template; Sie können kein Template haben, das überwiegend oder vollständig aus Variablen besteht. Das bedeutet, dass Sie kein bedingtes Liquid verwenden können, das Text hinzufügt oder entfernt, den Meta als bestätigten statischen Inhalt betrachtet.
Wenn Sie versuchen, einen if/else-Block zu verwenden, um einen Abschnitt statischen Texts bedingt ein- oder auszuschließen, wertet Meta die Logik nicht aus. Liquid-Tags außerhalb eines Variablen-Slots werden als Klartext-Ausgabe behandelt. Die/der Empfänger:in sieht die rohen Liquid-Syntax-Tags ({% if %}, {% else %}, {% endif %}) und den gesamten Branch-Inhalt wörtlich in der Nachricht.
Falsche Verwendung für den WhatsApp-Template-Builder
1
{% if ${loyalty_tier} == "gold" %}Hi {{1}}, we have an exclusive Gold member offer.{% else %}Hi {{1}}, we have a special offer for you.{% endif %}
Dies versucht, zwei verschiedene genehmigte Templates in einem zu kombinieren. Die bedingte Umschließung von statischem Text verhält sich nicht wie erwartet.
Korrekte Verwendung
Bedingungen sind innerhalb eines Variablen-Slots gültig und unterstützt, wo sie steuern, welcher Wert diese Variable befüllt. Meta sieht nur, dass {{1}} mit Inhalt befüllt wurde; es prüft nicht, wie das Liquid im Inneren zu diesem Wert gelangt ist.
Beispiel
1
{% if ${loyalty_tier} == "gold" %}exclusive Gold member{% else %}valued customer{% endif %}
Als Wert für eine Template-Variable verwendet, erzeugt dies entweder "exclusive Gold member" oder "valued customer". Beides sind nicht-leere Strings, die Metas Anforderung an Variableninhalte erfüllen.
Der Template-Text selbst bleibt strukturell unverändert:
1
Hi {{1}}, we have a special offer for you.
Bedingte Logik in einem Variablen-Slot platzieren
Es gibt zwei Möglichkeiten, bedingtes Liquid in einen Variablen-Slot im Template-Builder einzufügen:
- Einen Content-Block verwenden (unterstützt Prefill): Erstellen Sie Ihre bedingte Logik in einem Content-Block und referenzieren Sie den Block dann aus der Variable. Dieser Ansatz unterstützt Prefill, d. h. die Variable kann im Template-Builder vor dem Senden einen Vorschauwert anzeigen.
- Einen Platzhalter verwenden und Liquid einfügen (kein Prefill): Fügen Sie beim Erstellen des Templates einen Platzhalter wie
{{1}}hinzu und fügen Sie dann Ihren vollständigen Liquid-Ausdruck direkt in diesen Variablen-Slot ein. Dieser Ansatz unterstützt kein Prefill, funktioniert aber für jede Liquid-Logik.
Andere Liquid-Komponenten, die von derselben Einschränkung betroffen sind
Jeder Liquid-Tag, der keine sichtbare Ausgabe erzeugt, wird als Rohtext gerendert, wenn er außerhalb einer Variable platziert wird. Dazu gehören:
catalog_items: Liquid, das Katalogdaten nachschlägt und referenziert, muss sich innerhalb eines Variablen-Slots befinden, sonst erscheinen die Tags wörtlich in der Nachricht.assign: Variablenzuweisungs-Tags (wie {% assign discount = “20%” %}) erzeugen selbst keine Ausgabe. Wenn sie außerhalb eines Variablen-Slots verwendet werden, um einen Wert für die spätere Verwendung in der Nachricht festzulegen, wird derassign-Tag wörtlich gerendert. Fügen Sie jedeassign-Logik am Anfang des Liquid-Ausdrucks innerhalb des Variablen-Slots ein, in dem die Ausgabe benötigt wird.- Content Blocks, die nur Liquid-Tags enthalten: Wenn ein Content-Block Liquid-Logik enthält, aber keinen sichtbaren Text erzeugt (z. B. nur
assign- odermessage_extras-Tags verwendet), erscheint beim Referenzieren außerhalb eines Variablen-Slots der rohe Block-Inhalt in der Nachricht. Content Blocks, die keine sichtbare Ausgabe erzeugen, müssen innerhalb eines Variablen-Slots zusammen mit Inhalt eingebettet werden, der gerendert wird.
Zusätzliche strukturelle Einschränkungen
Meta verlangt, dass Templates:
- Mit statischem Text beginnen. Templates dürfen nicht mit einem Variablen-Slot beginnen (wie
{{1}} is ready for you). - Mit statischem Text enden. Templates dürfen nicht mit einem Variablen-Slot enden.
Diese Einschränkungen bestehen unabhängig davon, ob Liquid verwendet wird. Sie gelten für die genehmigte Template-Struktur selbst.
Wichtige Regeln
- Verwenden Sie Bedingungen frei innerhalb von Variablen-Slot-Ausdrücken, um zu steuern, welcher Wert gerendert wird.
- Verwenden Sie keine Bedingungen, um statischen Text hinzuzufügen, zu entfernen oder auszutauschen (die Teile der Nachricht, die keine Variablen-Slots sind).
- Stellen Sie sicher, dass jeder bedingte Branch innerhalb einer Variable einen nicht-leeren String erzeugt (siehe Message Extras für die Erklärung, warum leere Strings Fehler verursachen).
- Das Template muss mit statischem Text beginnen und enden, wie es bei Meta eingereicht wurde.