> ## 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

> Invia email automatiche tramite Klaviyo quando i clienti modificano i loro ordini. Collega Shopify Flow, Revize e Klaviyo per notificare i clienti a ogni modifica.

## Cosa ti serve

* Shopify Flow (disponibile su tutti i piani Shopify)
* Un account Klaviyo con la [Klaviyo Shopify app](https://apps.shopify.com/klaviyo-email-marketing) installata
* Revize installato con i trigger di Shopify Flow abilitati

<Info>
  Preferisci saltare il setup? Possiamo configurare l'intera integrazione Shopify Flow + Klaviyo per te. [Reach out](/it/support/contact).
</Info>

## Come funziona

Revize attiva un trigger Shopify Flow ogni volta che un cliente modifica il suo ordine. Tu colleghi quel trigger all'azione "Track an Event" di Klaviyo, che invia i dati dell'ordine a Klaviyo. Da lì costruisci un Klaviyo Flow per inviare l'email.

Trigger Revize → Shopify Flow → evento Klaviyo → email Klaviyo

***

## Trigger disponibili

Puoi inviare email Klaviyo per ognuno di questi trigger Revize:

* **Order edited** — si attiva a ogni modifica dell'ordine, inclusi cambi di prodotto e codici sconto
* **Shipping address updated**
* **Email address updated**
* **Phone number updated**
* **Delivery date updated**
* **Order cancelled**
* **Support ticket created**
* **Tax invoice generated**

Ogni trigger segue lo stesso processo di setup. Cambiano solo il trigger selezionato in Shopify Flow, il nome dell'evento inviato a Klaviyo e le Event Properties.

***

## Parte 1: Configurare Shopify Flow

### Passaggio 1: Trova la tua Klaviyo Public API Key

<Steps>
  <Step title="Accedi a Klaviyo">
    Vai sulla tua dashboard Klaviyo.
  </Step>

  <Step title="Apri Settings">
    Clicca sul nome del tuo account in basso a sinistra, poi vai su **Settings**.
  </Step>

  <Step title="Vai su API Keys">
    Vai nella sezione **API Keys**.
  </Step>

  <Step title="Copia la Public API Key">
    Copia la **Public API Key** (un breve codice alfanumerico). Ti servirà al passaggio 3.
  </Step>
</Steps>

<Warning>
  Assicurati di copiare la **Public** API key, non la Private API key. La public key è quella più corta.
</Warning>

***

### Passaggio 2: Crea un workflow Shopify Flow

<Steps>
  <Step title="Apri Shopify Flow">
    Nel tuo Shopify Admin vai su **Apps → Shopify Flow** e clicca su **Create workflow**.
  </Step>

  <Step title="Seleziona un trigger Revize">
    Clicca su **Select a trigger**, cerca **Revize** e scegli il trigger desiderato (es. Order edited, Shipping address updated, ecc.).
  </Step>

  <Step title="Aggiungi un'azione Wait">
    Clicca sul **+** sotto al trigger e aggiungi un'azione **Wait**. Imposta la durata a **10 secondi**.
  </Step>

  <Step title="Aggiungi un'azione Get Order Data">
    Clicca sul **+** sotto al Wait e aggiungi un'azione **Get Order Data** (azione Shopify).

    Configurala così:

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

<Note>
  **Perché il wait di 10 secondi?** Dà all'API di Shopify il tempo di riflettere le ultime modifiche dell'ordine prima di prendere dati freschi. Get Order Data poi recupera line items e varianti corretti e attuali.
</Note>

### Passaggio 3: Aggiungi l'azione Klaviyo "Track an Event"

<Steps>
  <Step title="Cerca Klaviyo">
    Nella lista delle azioni cerca **Klaviyo** e seleziona **Track an Event**.
  </Step>

  <Step title="Compila i campi">
    Usa la tabella sotto per compilare ogni campo.
  </Step>
</Steps>

| Campo                      | Valore                                |
| -------------------------- | ------------------------------------- |
| **Klaviyo Public API Key** | La tua Public API Key del passaggio 1 |
| **Event Name**             | Vedi la tabella dei nomi evento sotto |
| **Customer Email Address** | `{{order.customer.email}}`            |
| **Customer First Name**    | `{{order.customer.firstName}}`        |
| **Customer Last Name**     | `{{order.customer.lastName}}`         |

#### Nomi evento per trigger

Usa un nome evento descrittivo per identificare facilmente ogni trigger in Klaviyo:

| Trigger Revize           | Nome evento consigliato        |
| ------------------------ | ------------------------------ |
| 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>
  Puoi chiamare gli eventi come vuoi. Questi sono solo i nomi consigliati per restare organizzati.
</Tip>

### Passaggio 4: Imposta Customer Properties

Nel campo **Customer Properties**, incolla questo JSON:

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

Questo dice a Klaviyo a quale profilo cliente associare l'evento.

### Passaggio 5: Imposta Event Properties

Nel campo **Event Properties** incolla il JSON che corrisponde al tuo trigger. Usa i dati ordine appena recuperati da Get Order Data, così Klaviyo riceve sempre i dati corretti.

<Tabs>
  <Tab title="Order Edited">
    Usa questo quando vuoi inviare i dettagli completi dell'ordine aggiornato, line items inclusi:

    ```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>
      Non racchiudere le parentesi quadre `[ ]` dell'array `line_items` tra virgolette. Le parentesi devono stare fuori da qualsiasi virgoletta perché Klaviyo riceva un vero array.
    </Warning>
  </Tab>

  <Tab title="Address / Email / Phone / Delivery Date">
    Usa questo per aggiornamenti di indirizzo di spedizione, contatti o data di consegna. Invia il riepilogo dell'ordine senza 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">
    Usa questo per gli eventi di annullamento ordine:

    ```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>
  Il loop `{% for single_order in getOrderData %}` legge dai dati ordine appena recuperati, non dal trigger originale. Questo garantisce sempre dati corretti.
</Note>

### Passaggio 6: Attiva il workflow

<Steps>
  <Step title="Controlla tutti i campi">
    Assicurati che sia tutto compilato correttamente.
  </Step>

  <Step title="Attiva il workflow">
    Clicca su **Turn on workflow** in alto a destra.
  </Step>

  <Step title="Fatto">
    Il workflow è attivo. Ogni volta che un cliente attiva quell'azione tramite Revize, l'evento viene inviato a Klaviyo con dati ordine aggiornati.
  </Step>
</Steps>

***

## Parte 2: Configurare l'email Klaviyo

### Passaggio 7: Crea un Klaviyo Flow

<Steps>
  <Step title="Crea un nuovo Flow">
    In Klaviyo vai su **Flows → Create Flow** e seleziona **Build your own**.
  </Step>

  <Step title="Imposta il trigger">
    Per il trigger scegli **Metric** e cerca il nome evento che hai usato (es. `Revize_Order_Edited`).
  </Step>

  <Step title="Aggiungi un'azione email">
    Trascina un'azione **Email** nel flow.
  </Step>

  <Step title="Progetta il template">
    Usa le variabili sotto per inserire dinamicamente i dati dell'ordine.
  </Step>
</Steps>

### Passaggio 8: Variabili del template email

Usa queste variabili nel tuo template Klaviyo:

| Dato             | Variabile Klaviyo              |
| ---------------- | ------------------------------ |
| 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 }}` |

### Mostrare i line items

Per mostrare ogni prodotto dell'ordine modificato, usa questo loop nel tuo template Klaviyo:

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

Avvolgi il loop in una tabella o HTML stilizzato nel template Klaviyo per adattarlo al tuo brand.

### Esempio di email

Ecco un esempio di oggetto e corpo dell'email:

```
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 }}
```

***

## Evitare email duplicate

Se un cliente fa più modifiche rapide nella stessa sessione, Klaviyo potrebbe inviare più email. Per evitarlo:

1. Apri il tuo Klaviyo Flow
2. Aggiungi un **Flow Filter**
3. Imposta in modo da sopprimere se il cliente ha ricevuto questa email negli **ultimi 5 minuti**

***

## Risoluzione dei problemi

<AccordionGroup>
  <Accordion title="Il Flow mostra 'Succeeded' ma non c'è alcun evento in Klaviyo" icon="circle-exclamation">
    Controlla bene che la **Public API Key** in Shopify Flow corrisponda a quella nel tuo account Klaviyo. È il problema più frequente.
  </Accordion>

  <Accordion title="L'evento arriva ma i dati sono vuoti" icon="circle-exclamation">
    Il JSON di Event Properties potrebbe essere non valido. Controlla che non ci siano a capo dentro le stringhe e che `line_items` usi le parentesi `[ ]` senza virgolette intorno.
  </Accordion>

  <Accordion title="Variante sbagliata nei line items" icon="circle-exclamation">
    Assicurati di usare il passaggio **Get Order Data** con il wait di 10 secondi, e che le tue Event Properties usino il loop `getOrderData`, non `order.lineItems` direttamente.
  </Accordion>

  <Accordion title="Vengono inviate più email" icon="circle-exclamation">
    Aggiungi un **Flow Filter** in Klaviyo per sopprimere se il cliente ha ricevuto questa email negli ultimi 5 minuti.
  </Accordion>

  <Accordion title="Dove trovo la metric in Klaviyo" icon="circle-question">
    Vai su **Analytics → Metrics** e cerca il nome del tuo evento (es. `Revize_Order_Edited`). Viene creato automaticamente alla prima ricezione.
  </Accordion>

  <Accordion title="Come verifico che funzioni" icon="circle-check">
    In Klaviyo vai su **Audience → Profiles**, trova l'email del cliente e controlla la tab **Activity** per l'evento.
  </Accordion>
</AccordionGroup>

***

## Vuoi più trigger?

Puoi creare workflow Shopify Flow separati per ciascun trigger. Ad esempio:

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

Ogni workflow segue gli stessi passaggi sopra. Cambia solo il trigger, il nome evento e le Event Properties.
