Variablen und Liquid
Alles Dynamische in dieser App ist Liquid - dieselbe Template-Sprache, die auch Shopify-Themes verwenden. Du schreibst einen Platzhalter, und die App füllt ihn beim Versand aus.
Die vier Namespaces
| Namespace | Woher der Wert kommt | Verfügbar in |
|---|---|---|
{{ variables.key }} |
Das Feld Variables (JSON) in der Shopify-Flow-Aktion | E-Mail-Betreff und -Text, HTTP-URL, Header und Body |
{{ secrets.key }} |
Die Seite Secrets | Dasselbe, plus SMTP-Benutzername und -Passwort |
{{ shop.name }}, {{ shop.domain }}, {{ shop.email }} |
Dein Shop | E-Mail- und HTTP-Aktionen |
{{ flow.key }} |
Die rohe Shopify-Flow-Payload | Nur HTTP-Requests |
Die Karte System Variables im Editor listet die Shop-Werte mit ihrem aktuellen Inhalt auf, und ein Klick auf einen Wert kopiert ihn.
Variablen aus Shopify Flow übergeben
Trage in der Flow-Aktion ein JSON-Objekt in das Feld Variables (JSON) ein:
{
"firstName": "{{ customer.firstName }}",
"orderNumber": "{{ order.name }}",
"total": "{{ order.totalPriceSet.shopMoney.amount }}"
}
Referenziere sie dann an beliebiger Stelle im Layout:
Hi {{ variables.firstName }}, your order {{ variables.orderNumber }} is on its way.
Die Schlüssel kannst du frei wählen. Wie auch immer du sie auf der linken Seite benennst, genauso verwendest du sie nach variables. - Schreibweise und Groß-/Kleinschreibung müssen exakt übereinstimmen.
Du musst dieses JSON nicht von Hand schreiben. Jedes Layout hat eine Karte Use in Shopify Flow mit dem passenden JSON zum Kopieren - siehe Daten aus Shopify Flow übergeben.
Filter
Standard-Liquid-Filter funktionieren. Der nützlichste ist default, der dich vor einem leeren Wert schützt:
Hi {{ variables.firstName | default: "there" }}
Andere verhalten sich wie erwartet:
{{ variables.productTitle | upcase }}
{{ variables.total | round: 2 }}
{{ variables.note | truncate: 100 }}
Wenn eine Variable leer gerendert wird
Ein Live-Versand, bei dem eine referenzierte Variable zu nichts gerendert wird, erhält in History ein Badge Empty variables. Öffnest du den Eintrag, werden die betroffenen Variablen benannt und zwei unterschiedliche Probleme unterschieden:
- Von Shopify Flow gesendet, aber leer - der Schlüssel war in deinem JSON vorhanden, aber Flow hat keinen Wert geliefert. Meist ein falscher Property-Pfad oder ein Feld, das für diesen Datensatz tatsächlich leer ist (bei einem Gast-Checkout gibt es keinen Vornamen des Kunden).
- Gar nicht von Shopify Flow gesendet - der Schlüssel fehlt komplett in deinem JSON.
Fügst du einen | default:-Fallback hinzu, wird die Leerstelle als beabsichtigt markiert, und die App hört auf, davor zu warnen.
Bedingungen und Schleifen
Verwende den Block HTML / Code für Bedingungen:
{% if variables.isVip %}
<p>As a VIP you get free shipping on this order.</p>
{% else %}
<p>Spend a little more to unlock free shipping.</p>
{% endif %}
Verwende den Block Loop, um über ein Array zu iterieren, zum Beispiel über Bestellpositionen:
{% for item in variables.items %}
<tr>
<td>{{ item.title }}</td>
<td>{{ item.quantity }}</td>
<td>{{ item.price }}</td>
</tr>
{% endfor %}
Übergib das Array aus Flow als JSON:
{
"items": [
{ "title": "Classic White T-Shirt", "quantity": 2, "price": "29.00" },
{ "title": "Eco Water Bottle", "quantity": 1, "price": "19.00" }
]
}
Um eine Schleife im Builder in der Vorschau anzuzeigen, gib dasselbe JSON-Array als Wert im Tab Test Variables ein.
Objekte verhalten sich in E-Mail und HTTP unterschiedlich
Das ist der eine wirklich kritische Punkt, den man kennen sollte.
- Bei einem HTTP-Request wird ein Objekt oder Array beim Interpolieren automatisch als JSON serialisiert.
{{ variables.records }}wird zu einem echten JSON-Array im Request-Body. Einjson-Filter steht ebenfalls zur Verfügung, falls du es explizit machen möchtest. - Bei einer E-Mail gibt es diese Umwandlung nicht. Wird ein ganzes Objekt interpoliert, erscheint der wörtliche Text
[object Object].
Greife in E-Mails also immer in das Objekt hinein, statt es auszugeben:
Wrong: {{ variables.customer }}
Right: {{ variables.customer.firstName }} {{ variables.customer.lastName }}
Oder iteriere über ein Array, statt es komplett auszugeben.
Secrets in Templates
Referenziere ein gespeichertes Secret auf dieselbe Weise:
Authorization: Bearer {{ secrets.airtableAccessToken }}
Verwende genau die Syntax {{ secrets.keyName }}. Diese funktionieren nicht:
{{ secret.keyName }}- Singular{{ secrets['keyName'] }}- Klammer-Syntax
Schlüsselnamen unterscheiden zwischen Groß- und Kleinschreibung. Siehe Secrets (Geheimnisse).
Body-Override für HTTP-Requests
Das Variablen-Feld der HTTP-Aktion hat einen zweiten Modus. Übergibst du einen body-Schlüssel, ersetzt er den gespeicherten Request-Body vollständig:
{
"body": { "anything": "you like", "shaped": ["however"] }
}
Das ist nützlich, wenn die Form der Payload durch einen früheren Flow-Schritt bestimmt wird. Die eine Ausnahme: Wenn dein gespeicherter Body selbst {{ variables.body }} referenziert, wird dieser wie eine gewöhnliche Variable behandelt.
Testen, was du geschrieben hast
Die Vorschau auf der Seite wertet Liquid nicht aus - sie zeigt die Tags so, wie sie geschrieben wurden. Um aufgelöste Werte zu sehen:
- Verwende bei E-Mails Send test email im Layout-Editor.
- Verwende bei HTTP-Requests die Schaltfläche Test, die den Resolved URL und Resolved Body zusammen mit der Antwort anzeigt.
Verwandte Themen
- Daten aus Shopify Flow übergeben - das Feld Variables (JSON) im Detail.
- Ein E-Mail-Layout erstellen - wo diese Variablen zum Einsatz kommen.
- Secrets (Geheimnisse) - Zugangsdaten sicher speichern.
- Eine HTTP-Anfrage von Shopify Flow aus senden - Variablen in einem echten Request.

