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. Ein json-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