> ## Documentation Index
> Fetch the complete documentation index at: https://docs.revize.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Klaviyo

> Sende automatisierte E-Mails über Klaviyo, sobald Kunden ihre Bestellungen bearbeiten. Verbinde Shopify Flow, Revize und Klaviyo, um Kunden bei jeder Änderung zu benachrichtigen.

## Was du brauchst

* Shopify Flow (in allen Shopify-Plänen verfügbar)
* Ein Klaviyo-Account mit installierter [Klaviyo Shopify App](https://apps.shopify.com/klaviyo-email-marketing)
* Revize installiert mit aktivierten Shopify-Flow-Triggern

<Info>
  Du willst dir das Setup sparen? Wir konfigurieren die komplette Shopify Flow + Klaviyo-Integration für dich. [Reach out](/de/support/contact).
</Info>

## So funktioniert es

Revize feuert einen Shopify-Flow-Trigger, sobald ein Kunde seine Bestellung bearbeitet. Du verbindest diesen Trigger mit der Klaviyo-Aktion „Track an Event", die die Bestelldaten an Klaviyo schickt. Von dort aus baust du einen Klaviyo Flow, der die E-Mail verschickt.

Revize-Trigger → Shopify Flow → Klaviyo-Event → Klaviyo-E-Mail

***

## Verfügbare Trigger

Du kannst Klaviyo-E-Mails für jeden dieser Revize-Trigger senden:

* **Order edited** — wird bei jeder Bearbeitung ausgelöst, einschließlich Produktänderungen und Rabattcode-Edits
* **Shipping address updated**
* **Email address updated**
* **Phone number updated**
* **Delivery date updated**
* **Order cancelled**
* **Support ticket created**
* **Tax invoice generated**

Jeder Trigger folgt demselben Setup. Nur der in Shopify Flow ausgewählte Trigger, der an Klaviyo gesendete Event-Name und die Event Properties ändern sich.

***

## Teil 1: Shopify Flow einrichten

### Schritt 1: Klaviyo Public API Key finden

<Steps>
  <Step title="In Klaviyo einloggen">
    Geh in dein Klaviyo-Dashboard.
  </Step>

  <Step title="Settings öffnen">
    Klick unten links auf deinen Account-Namen und dann auf **Settings**.
  </Step>

  <Step title="Zu API Keys navigieren">
    Geh in den Abschnitt **API Keys**.
  </Step>

  <Step title="Public API Key kopieren">
    Kopiere den **Public API Key** (ein kurzer alphanumerischer Code). Du brauchst ihn in Schritt 3.
  </Step>
</Steps>

<Warning>
  Achte darauf, den **Public** API Key zu kopieren, nicht den Private API Key. Der Public Key ist der kürzere.
</Warning>

***

### Schritt 2: Einen Shopify-Flow-Workflow erstellen

<Steps>
  <Step title="Shopify Flow öffnen">
    Geh in deinem Shopify Admin zu **Apps → Shopify Flow** und klick auf **Create workflow**.
  </Step>

  <Step title="Revize-Trigger wählen">
    Klick auf **Select a trigger**, suche nach **Revize** und wähle den gewünschten Trigger (z. B. Order edited, Shipping address updated etc.).
  </Step>

  <Step title="Wait-Aktion hinzufügen">
    Klick auf **+** unter dem Trigger und füge eine **Wait**-Aktion hinzu. Setze die Dauer auf **10 Sekunden**.
  </Step>

  <Step title="Get Order Data-Aktion hinzufügen">
    Klick auf **+** unter dem Wait-Schritt und füge eine **Get Order Data**-Aktion hinzu (Shopify-Aktion).

    Konfiguriere sie so:

    * **Select a query** auf **Advanced**
    * In **Edit query** eingeben: `id:{{order.legacyResourceId}}`
    * **Maximum number of orders** auf **1**
    * **Sort data by** auf **Updated at, Descending**
  </Step>
</Steps>

<Note>
  **Warum die 10 Sekunden Wait?** So bekommt Shopifys API Zeit, die letzten Bestelländerungen zu reflektieren, bevor frische Daten geholt werden. Get Order Data zieht dann die korrekten aktuellen Line Items und Varianten.
</Note>

### Schritt 3: Klaviyo „Track an Event"-Aktion hinzufügen

<Steps>
  <Step title="Nach Klaviyo suchen">
    Suche in der Aktionsliste nach **Klaviyo** und wähle **Track an Event**.
  </Step>

  <Step title="Felder ausfüllen">
    Nutze die Tabelle unten, um jedes Feld zu befüllen.
  </Step>
</Steps>

| Feld                       | Wert                                |
| -------------------------- | ----------------------------------- |
| **Klaviyo Public API Key** | Dein Public API Key aus Schritt 1   |
| **Event Name**             | Siehe Tabelle der Event-Namen unten |
| **Customer Email Address** | `{{order.customer.email}}`          |
| **Customer First Name**    | `{{order.customer.firstName}}`      |
| **Customer Last Name**     | `{{order.customer.lastName}}`       |

#### Event-Namen pro Trigger

Verwende einen aussagekräftigen Event-Namen, um jeden Trigger in Klaviyo gut zu identifizieren:

| Revize-Trigger           | Empfohlener Event-Name         |
| ------------------------ | ------------------------------ |
| Order edited             | `Revize_Order_Edited`          |
| Shipping address updated | `Revize_Address_Updated`       |
| Email address updated    | `Revize_Email_Updated`         |
| Phone number updated     | `Revize_Phone_Updated`         |
| Delivery date updated    | `Revize_Delivery_Date_Updated` |
| Order cancelled          | `Revize_Order_Cancelled`       |
| Support ticket created   | `Revize_Support_Ticket`        |
| Tax invoice generated    | `Revize_Tax_Invoice`           |

<Tip>
  Du kannst die Events nennen, wie du willst. Das sind nur unsere Empfehlungen, um den Überblick zu behalten.
</Tip>

### Schritt 4: Customer Properties setzen

Füge im Feld **Customer Properties** dieses JSON ein:

```json theme={null}
{
  "$email": "{{order.customer.email}}",
  "$first_name": "{{order.customer.firstName}}",
  "$last_name": "{{order.customer.lastName}}"
}
```

Das sagt Klaviyo, mit welchem Kundenprofil das Event verknüpft werden soll.

### Schritt 5: Event Properties setzen

Füge im Feld **Event Properties** das JSON ein, das zu deinem Trigger passt. Es nutzt frisch geholte Bestelldaten aus Get Order Data — Klaviyo bekommt also immer die aktuellen Daten.

<Tabs>
  <Tab title="Order Edited">
    Nutze das, wenn du die kompletten aktualisierten Bestelldetails inkl. Line Items senden willst:

    ```liquid theme={null}
    {% for single_order in getOrderData %}
    {
      "order_id": "{{single_order.id}}",
      "order_name": "{{single_order.name}}",
      "order_number": "{{single_order.legacyResourceId}}",
      "total_price": "{{single_order.totalPriceSet.shopMoney.amount}}",
      "subtotal_price": "{{single_order.subtotalPriceSet.shopMoney.amount}}",
      "total_tax": "{{single_order.totalTaxSet.shopMoney.amount}}",
      "total_shipping": "{{single_order.totalShippingPriceSet.shopMoney.amount}}",
      "currency": "{{single_order.currencyCode}}",
      "edited_at": "{{single_order.updatedAt}}",
      "customer_email": "{{single_order.customer.email}}",
      "customer_name": "{{single_order.customer.firstName}} {{single_order.customer.lastName}}",
      "line_items": [{% assign comma = "" %}{% for item in single_order.lineItems %}
        {% if item.currentQuantity != 0 %}{{comma}}
        {"title": {{item.title | json}}, "quantity": {{item.currentQuantity}},
         "price": "{{item.originalUnitPriceSet.shopMoney.amount}}",
         "variant_title": {{item.variantTitle | json}}, "sku": {{item.sku | json}}}
        {% assign comma = "," %}{% endif %}
      {% endfor %}]
    }
    {% endfor %}
    ```

    <Warning>
      Schreibe die Klammern `[ ]` des `line_items`-Arrays nicht in Anführungszeichen. Die Klammern müssen außerhalb aller Quotes stehen, damit Klaviyo ein echtes Array bekommt.
    </Warning>
  </Tab>

  <Tab title="Address / Email / Phone / Delivery Date">
    Nutze das für Updates der Versandadresse, Kontaktdaten oder des Lieferdatums. Sendet die Bestellzusammenfassung ohne Line Items:

    ```liquid theme={null}
    {% for single_order in getOrderData %}
    {
      "order_id": "{{single_order.id}}",
      "order_name": "{{single_order.name}}",
      "order_number": "{{single_order.legacyResourceId}}",
      "total_price": "{{single_order.totalPriceSet.shopMoney.amount}}",
      "currency": "{{single_order.currencyCode}}",
      "updated_at": "{{single_order.updatedAt}}",
      "customer_email": "{{single_order.customer.email}}",
      "customer_name": "{{single_order.customer.firstName}} {{single_order.customer.lastName}}",
      "shipping_address": "{{single_order.shippingAddress.address1}}, {{single_order.shippingAddress.city}}, {{single_order.shippingAddress.province}} {{single_order.shippingAddress.zip}}, {{single_order.shippingAddress.country}}"
    }
    {% endfor %}
    ```
  </Tab>

  <Tab title="Cancellation">
    Nutze das für Bestellstornierungs-Events:

    ```liquid theme={null}
    {% for single_order in getOrderData %}
    {
      "order_id": "{{single_order.id}}",
      "order_name": "{{single_order.name}}",
      "order_number": "{{single_order.legacyResourceId}}",
      "total_price": "{{single_order.totalPriceSet.shopMoney.amount}}",
      "currency": "{{single_order.currencyCode}}",
      "cancelled_at": "{{single_order.updatedAt}}",
      "customer_email": "{{single_order.customer.email}}",
      "customer_name": "{{single_order.customer.firstName}} {{single_order.customer.lastName}}"
    }
    {% endfor %}
    ```
  </Tab>
</Tabs>

<Note>
  Die `{% for single_order in getOrderData %}`-Schleife liest aus den frisch geholten Bestelldaten, nicht aus dem ursprünglichen Trigger. Das stellt jedes Mal korrekte Daten sicher.
</Note>

### Schritt 6: Workflow aktivieren

<Steps>
  <Step title="Alle Felder prüfen">
    Stell sicher, dass alles korrekt ausgefüllt ist.
  </Step>

  <Step title="Workflow aktivieren">
    Klick oben rechts auf **Turn on workflow**.
  </Step>

  <Step title="Fertig">
    Der Workflow ist jetzt aktiv. Jedes Mal, wenn ein Kunde diese Aktion über Revize auslöst, wird das Event mit aktuellen Bestelldaten an Klaviyo geschickt.
  </Step>
</Steps>

***

## Teil 2: Klaviyo-E-Mail einrichten

### Schritt 7: Einen Klaviyo Flow erstellen

<Steps>
  <Step title="Neuen Flow anlegen">
    Geh in Klaviyo zu **Flows → Create Flow** und wähle **Build your own**.
  </Step>

  <Step title="Trigger setzen">
    Wähle als Trigger **Metric** und suche nach dem von dir verwendeten Event-Namen (z. B. `Revize_Order_Edited`).
  </Step>

  <Step title="E-Mail-Aktion hinzufügen">
    Zieh eine **Email**-Aktion in den Flow.
  </Step>

  <Step title="Template gestalten">
    Nutze die Variablen unten, um Bestelldaten dynamisch einzufügen.
  </Step>
</Steps>

### Schritt 8: Variablen fürs E-Mail-Template

Nutze diese Variablen in deinem Klaviyo-Template:

| Daten            | Klaviyo-Variable               |
| ---------------- | ------------------------------ |
| Customer Name    | `{{ event.customer_name }}`    |
| Order Number     | `{{ event.order_name }}`       |
| Subtotal         | `{{ event.subtotal_price }}`   |
| Total Tax        | `{{ event.total_tax }}`        |
| Shipping         | `{{ event.total_shipping }}`   |
| Total Price      | `{{ event.total_price }}`      |
| Currency         | `{{ event.currency }}`         |
| Edit Date        | `{{ event.edited_at }}`        |
| Customer Email   | `{{ event.customer_email }}`   |
| Shipping Address | `{{ event.shipping_address }}` |

### Line Items anzeigen

Um jedes Produkt der bearbeiteten Bestellung anzuzeigen, nutze diese Schleife in deinem Klaviyo-Template:

```liquid theme={null}
{% for item in event.line_items %}
  {{ item.title }}
  Variant: {{ item.variant_title }}
  Qty: {{ item.quantity }}
  Price: {{ item.price }}
{% endfor %}
```

Pack die Schleife in eine Tabelle oder gestyltes HTML im Klaviyo-Template, damit sie zu deiner Marke passt.

### Beispiel-E-Mail

So könnten Betreff und Text deiner E-Mail aussehen:

```
Subject: Your order {{ event.order_name }} has been updated

Hi {{ event.customer_name }},

Your order has been updated. Here is your revised summary:

{% for item in event.line_items %}
  {{ item.title }} ({{ item.variant_title }})
  Qty: {{ item.quantity }}  |  Price: {{ item.price }} {{ event.currency }}
{% endfor %}

Total: {{ event.currency }} {{ event.total_price }}
```

***

## Doppelte E-Mails verhindern

Wenn ein Kunde in einer Session mehrere schnelle Edits macht, kann Klaviyo mehrere E-Mails senden. Um das zu vermeiden:

1. Öffne deinen Klaviyo Flow
2. Füge einen **Flow Filter** hinzu
3. Setze ihn so, dass er unterdrückt, wenn der Kunde diese E-Mail in den **letzten 5 Minuten** bereits erhalten hat

***

## Troubleshooting

<AccordionGroup>
  <Accordion title="Flow zeigt 'Succeeded', aber kein Event in Klaviyo" icon="circle-exclamation">
    Prüfe doppelt, ob der **Public API Key** in Shopify Flow zu dem in deinem Klaviyo-Account passt. Das ist das häufigste Problem.
  </Accordion>

  <Accordion title="Event kommt an, aber Daten sind leer" icon="circle-exclamation">
    Das Event-Properties-JSON ist möglicherweise ungültig. Stell sicher, dass keine Zeilenumbrüche in String-Werten sind und `line_items` mit `[ ]` ohne umgebende Quotes verwendet wird.
  </Accordion>

  <Accordion title="Falsche Variante in Line Items" icon="circle-exclamation">
    Stell sicher, dass du den **Get Order Data**-Schritt mit dem 10-Sekunden-Wait nutzt und dass deine Event Properties die `getOrderData`-Schleife verwenden, nicht direkt `order.lineItems`.
  </Accordion>

  <Accordion title="Mehrere E-Mails werden gesendet" icon="circle-exclamation">
    Füge in Klaviyo einen **Flow Filter** hinzu, der unterdrückt, wenn der Kunde diese E-Mail in den letzten 5 Minuten erhalten hat.
  </Accordion>

  <Accordion title="Wo finde ich die Metric in Klaviyo" icon="circle-question">
    Geh zu **Analytics → Metrics** und suche nach deinem Event-Namen (z. B. `Revize_Order_Edited`). Sie wird automatisch beim ersten eingehenden Event erstellt.
  </Accordion>

  <Accordion title="Wie verifiziere ich, dass es funktioniert" icon="circle-check">
    Geh in Klaviyo zu **Audience → Profiles**, finde die Kunden-E-Mail und prüfe im **Activity**-Tab das Event.
  </Accordion>
</AccordionGroup>

***

## Mehrere Trigger gewünscht?

Du kannst für jeden Trigger separate Shopify-Flow-Workflows einrichten. Zum Beispiel:

* **Workflow 1:** Order edited → `Revize_Order_Edited` → „Your order has been updated"-E-Mail
* **Workflow 2:** Address updated → `Revize_Address_Updated` → „Your shipping address has been changed"-E-Mail
* **Workflow 3:** Order cancelled → `Revize_Order_Cancelled` → „Your order has been cancelled"-E-Mail

Jeder Workflow folgt denselben Schritten oben. Wechsle einfach den Trigger, den Event-Namen und die Event Properties.
