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

> Envoie des e-mails automatisés via Klaviyo dès que les clients modifient leurs commandes. Connecte Shopify Flow, Revize et Klaviyo pour notifier les clients à chaque changement.

## Ce qu'il te faut

* Shopify Flow (disponible sur tous les plans Shopify)
* Un compte Klaviyo avec l'[app Klaviyo Shopify](https://apps.shopify.com/klaviyo-email-marketing) installée
* Revize installé avec les triggers Shopify Flow activés

<Info>
  Tu préfères ne pas faire la configuration ? On peut configurer toute l'intégration Shopify Flow + Klaviyo pour toi. [Reach out](/fr/support/contact).
</Info>

## Comment ça marche

Revize déclenche un trigger Shopify Flow chaque fois qu'un client modifie sa commande. Tu connectes ce trigger à l'action « Track an Event » de Klaviyo, qui envoie les données de commande à Klaviyo. Ensuite, tu construis un Flow Klaviyo pour envoyer l'e-mail.

Trigger Revize → Shopify Flow → événement Klaviyo → e-mail Klaviyo

***

## Triggers disponibles

Tu peux envoyer des e-mails Klaviyo pour n'importe lequel de ces triggers Revize :

* **Order edited** — déclenché à chaque édition de commande, y compris les changements de produits et codes promo
* **Shipping address updated**
* **Email address updated**
* **Phone number updated**
* **Delivery date updated**
* **Order cancelled**
* **Support ticket created**
* **Tax invoice generated**

Chaque trigger suit la même procédure de mise en place. Seuls le trigger sélectionné dans Shopify Flow, le nom de l'événement envoyé à Klaviyo et les Event Properties changent.

***

## Partie 1 : Configurer Shopify Flow

### Étape 1 : Trouve ta Klaviyo Public API Key

<Steps>
  <Step title="Connecte-toi à Klaviyo">
    Va sur ton dashboard Klaviyo.
  </Step>

  <Step title="Ouvre Settings">
    Clique sur ton nom de compte en bas à gauche, puis va dans **Settings**.
  </Step>

  <Step title="Va dans API Keys">
    Va dans la section **API Keys**.
  </Step>

  <Step title="Copie ta Public API Key">
    Copie la **Public API Key** (un court code alphanumérique). Tu en auras besoin à l'étape 3.
  </Step>
</Steps>

<Warning>
  Assure-toi de copier la clé **Public** API, pas la Private API key. La clé publique est la plus courte.
</Warning>

***

### Étape 2 : Crée un workflow Shopify Flow

<Steps>
  <Step title="Ouvre Shopify Flow">
    Dans ton Shopify Admin, va dans **Apps → Shopify Flow** et clique sur **Create workflow**.
  </Step>

  <Step title="Sélectionne un trigger Revize">
    Clique sur **Select a trigger**, cherche **Revize** et choisis le trigger souhaité (par ex. Order edited, Shipping address updated, etc.).
  </Step>

  <Step title="Ajoute une action Wait">
    Clique sur **+** sous le trigger et ajoute une action **Wait**. Mets la durée à **10 secondes**.
  </Step>

  <Step title="Ajoute une action Get Order Data">
    Clique sur **+** sous le Wait et ajoute une action **Get Order Data** (action Shopify).

    Configure-la ainsi :

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

<Note>
  **Pourquoi le wait de 10 secondes ?** Cela laisse à l'API Shopify le temps de refléter les dernières modifications avant de récupérer des données fraîches. L'étape Get Order Data ramène alors les bons line items et variants à jour.
</Note>

### Étape 3 : Ajoute l'action Klaviyo « Track an Event »

<Steps>
  <Step title="Cherche Klaviyo">
    Dans la liste des actions, cherche **Klaviyo** et choisis **Track an Event**.
  </Step>

  <Step title="Remplis les champs">
    Utilise le tableau ci-dessous pour remplir chaque champ.
  </Step>
</Steps>

| Champ                      | Valeur                                   |
| -------------------------- | ---------------------------------------- |
| **Klaviyo Public API Key** | Ta Public API Key de l'étape 1           |
| **Event Name**             | Voir le tableau d'event names ci-dessous |
| **Customer Email Address** | `{{order.customer.email}}`               |
| **Customer First Name**    | `{{order.customer.firstName}}`           |
| **Customer Last Name**     | `{{order.customer.lastName}}`            |

#### Noms d'événements par trigger

Utilise un nom d'événement descriptif pour identifier facilement chaque trigger dans Klaviyo :

| Trigger Revize           | Nom d'événement recommandé     |
| ------------------------ | ------------------------------ |
| 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>
  Tu peux nommer ces événements comme tu veux. Ce sont juste nos noms recommandés pour rester organisé.
</Tip>

### Étape 4 : Configure Customer Properties

Dans le champ **Customer Properties**, colle ce JSON :

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

Cela indique à Klaviyo à quel profil client associer l'événement.

### Étape 5 : Configure Event Properties

Dans le champ **Event Properties**, colle le JSON correspondant à ton trigger. Il utilise les données fraîches récupérées par Get Order Data, donc Klaviyo reçoit toujours les bonnes données.

<Tabs>
  <Tab title="Order Edited">
    À utiliser quand tu veux envoyer le détail complet de la commande mise à jour, line items inclus :

    ```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>
      N'entoure pas les crochets `[ ]` du tableau `line_items` de guillemets. Les crochets doivent être hors de tout guillemet pour que Klaviyo reçoive un vrai tableau.
    </Warning>
  </Tab>

  <Tab title="Address / Email / Phone / Delivery Date">
    À utiliser pour les mises à jour d'adresse de livraison, contact ou date de livraison. Envoie un résumé de commande sans 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">
    À utiliser pour les événements d'annulation de commande :

    ```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>
  La boucle `{% for single_order in getOrderData %}` lit les données fraîchement récupérées, pas le trigger d'origine. Cela garantit des données correctes à chaque fois.
</Note>

### Étape 6 : Active le workflow

<Steps>
  <Step title="Vérifie tous les champs">
    Assure-toi que tout est bien rempli.
  </Step>

  <Step title="Active le workflow">
    Clique sur **Turn on workflow** en haut à droite.
  </Step>

  <Step title="Terminé">
    Le workflow est actif. Chaque fois qu'un client déclenche cette action via Revize, l'événement est envoyé à Klaviyo avec des données de commande à jour.
  </Step>
</Steps>

***

## Partie 2 : Configurer l'e-mail Klaviyo

### Étape 7 : Crée un Flow Klaviyo

<Steps>
  <Step title="Crée un nouveau Flow">
    Dans Klaviyo, va dans **Flows → Create Flow** et choisis **Build your own**.
  </Step>

  <Step title="Définis le trigger">
    Pour le trigger, choisis **Metric** et cherche le nom d'événement utilisé (par ex. `Revize_Order_Edited`).
  </Step>

  <Step title="Ajoute une action e-mail">
    Glisse une action **Email** dans le flow.
  </Step>

  <Step title="Conçois ton template">
    Utilise les variables ci-dessous pour insérer dynamiquement les données de commande.
  </Step>
</Steps>

### Étape 8 : Variables du template e-mail

Utilise ces variables dans ton template Klaviyo :

| Donnée           | Variable 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 }}` |

### Afficher les line items

Pour afficher chaque produit de la commande modifiée, utilise cette boucle dans ton template Klaviyo :

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

Encadre cette boucle dans un tableau ou du HTML stylisé dans ton template Klaviyo pour respecter ta charte.

### Exemple d'e-mail

Voici un exemple d'objet et de corps d'e-mail :

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

***

## Empêcher les e-mails en double

Si un client fait plusieurs édits rapprochés dans une même session, Klaviyo peut envoyer plusieurs e-mails. Pour éviter ça :

1. Ouvre ton Flow Klaviyo
2. Ajoute un **Flow Filter**
3. Configure-le pour supprimer si le client a reçu cet e-mail dans les **5 dernières minutes**

***

## Dépannage

<AccordionGroup>
  <Accordion title="Le Flow indique 'Succeeded' mais aucun événement dans Klaviyo" icon="circle-exclamation">
    Vérifie que la **Public API Key** dans Shopify Flow correspond bien à celle de ton compte Klaviyo. C'est le problème le plus fréquent.
  </Accordion>

  <Accordion title="L'événement arrive mais les données sont vides" icon="circle-exclamation">
    Le JSON des Event Properties est peut-être invalide. Vérifie qu'il n'y a pas de saut de ligne dans les valeurs string et que `line_items` utilise bien des crochets `[ ]` non entourés de guillemets.
  </Accordion>

  <Accordion title="Mauvaise variante affichée dans les line items" icon="circle-exclamation">
    Vérifie que tu utilises bien l'étape **Get Order Data** avec le wait de 10 secondes, et que tes Event Properties utilisent la boucle `getOrderData`, pas `order.lineItems` directement.
  </Accordion>

  <Accordion title="Plusieurs e-mails envoyés" icon="circle-exclamation">
    Ajoute un **Flow Filter** dans Klaviyo pour supprimer si le client a reçu cet e-mail dans les 5 dernières minutes.
  </Accordion>

  <Accordion title="Où trouver la metric dans Klaviyo" icon="circle-question">
    Va dans **Analytics → Metrics** et cherche le nom de ton événement (par ex. `Revize_Order_Edited`). Il est créé automatiquement à la première réception d'événement.
  </Accordion>

  <Accordion title="Comment vérifier que ça a marché" icon="circle-check">
    Va dans **Audience → Profiles** dans Klaviyo, trouve l'e-mail du client, et regarde son onglet **Activity** pour vérifier l'événement.
  </Accordion>
</AccordionGroup>

***

## Tu veux plusieurs triggers ?

Tu peux configurer des workflows Shopify Flow séparés pour chaque trigger. Par exemple :

* **Workflow 1 :** Order edited → `Revize_Order_Edited` → e-mail « Your order has been updated »
* **Workflow 2 :** Address updated → `Revize_Address_Updated` → e-mail « Your shipping address has been changed »
* **Workflow 3 :** Order cancelled → `Revize_Order_Cancelled` → e-mail « Your order has been cancelled »

Chaque workflow suit les mêmes étapes ci-dessus. Change juste le trigger, le nom d'événement et les Event Properties.
