# Comment configurer une campagne de panier abandonné

Les acheteurs qui ajoutent des articles à un panier et partent sans acheter sont parmi les conversions les plus faciles à récupérer. Ils ont déjà manifesté une intention.

Ce guide vous montre comment leur envoyer un e-mail de panier abandonné dans Pushwoosh : déclenchez l'événement `PW_AbandonedCart` depuis votre boutique, affichez les articles délaissés dans l'e-mail avec le bloc [Produits](/fr/product/content/email-content/drag-and-drop-email-editor/blocks/#products), et déclenchez l'envoi depuis un Customer Journey.

## Qu'est-ce que PW_AbandonedCart

`PW_AbandonedCart` indique qu'un utilisateur a laissé des articles dans son panier sans acheter. Ce n'est pas un [événement par défaut](/fr/product/audience-data-and-segmentation/events/default-events/) intégré. C'est un nom d'événement partagé utilisé dans les intégrations e-commerce de Pushwoosh pour que les journeys, le bloc Produits et les segments fonctionnent tous de la même manière.

*   **[Intégration Magento](/fr/product/integrations/magento-integration/) :** envoie `PW_AbandonedCart` et `PW_OrderCreated` pour vous automatiquement.
*   **[Intégration Shopify](/fr/product/integrations/shopify-integration/) :** envoie `PW_AbandonedCart`, `PW_OrderCreated` et `PW_AbandonedCartUpdate` (se déclenche à nouveau lorsque l'acheteur continue de modifier le même panier) pour vous automatiquement, avec les articles du panier enrichis à partir de votre catalogue de produits.
*   **Toute autre boutique ou backend personnalisé :** votre équipe envoie les deux événements via [postEvent](/fr/developer/api-reference/user-centric-api/#postevent) avec les noms et attributs décrits dans [Comment envoyer des rappels de panier abandonné](#how-to-send-abandoned-cart-reminders).

### Que se passe-t-il lorsque vous envoyez PW_AbandonedCart

L'envoi de `PW_AbandonedCart` effectue deux actions du côté de Pushwoosh :

1.  Il est enregistré comme n'importe quel autre événement personnalisé, vous pouvez donc le voir dans les [statistiques d'événements](/fr/product/audience-data-and-segmentation/events/) et l'utiliser dans les [segments](/fr/product/audience-data-and-segmentation/segmentation/create-segments/by-events/).
2.  Pushwoosh stocke le contenu du panier et tague l'utilisateur avec :
    *   **PW_AbandonedCartID :** un identifiant pour le panier actuel, utilisé pour récupérer son contenu au moment de l'envoi.
    *   **PW_AbandonedCartDate :** la valeur `abandonedDate` de la charge utile de l'événement.

### Que se passe-t-il lorsque vous envoyez PW_OrderCreated

Lorsque l'acheteur passe une commande, envoyez `PW_OrderCreated` (ou `PW_OrderUpdated`). Pushwoosh efface immédiatement `PW_AbandonedCartID` et `PW_AbandonedCartDate` pour cet utilisateur. Il ne fait pas correspondre les valeurs `orderId` : toute commande de l'utilisateur supprime les deux tags, même si l'achat concernait un panier différent.

**Exemple :** Un acheteur abandonne le panier `ORDER-100`, puis achète `ORDER-200` avant que le rappel ne soit envoyé. Pushwoosh efface les tags, il ne recevra donc pas de rappel concernant `ORDER-100`.

<Aside type="note" title="Ce qui apparaît dans l'e-mail de rappel">
Le bloc Produits lit le panier stocké sur le profil de l'utilisateur au moment de l'envoi. Il n'utilise pas la liste d'articles de l'événement `PW_AbandonedCart` qui a démarré le journey.

*   **Même `orderId` :** chaque nouvel événement `PW_AbandonedCart` écrase le panier stocké. Le rappel affiche les articles les plus récents.
*   **`orderId` différent :** Pushwoosh stocke un panier séparé. Les articles ne sont pas fusionnés.
</Aside>

<span id="how-to-send-abandoned-cart-reminders" />

## Comment envoyer des rappels de panier abandonné

Suivez ces étapes pour créer les événements, les envoyer depuis votre boutique, construire l'e-mail et lancer le Customer Journey.

### Créez les événements dans votre Control Panel

[Pushwoosh crée automatiquement](/fr/product/audience-data-and-segmentation/events/#1-create-events-in-pushwoosh-control-panel) un événement et ses attributs à partir du premier appel `postEvent` sous un nom qu'il ne reconnaît pas, en déduisant le type de chaque attribut de la valeur envoyée. Cette déduction n'est pas fiable pour les champs monétaires dans `PW_AbandonedCart`. Déclarez les deux événements explicitement pour que les types soient définis correctement :

1.  Allez dans **Audience → Événements** dans votre Control Panel Pushwoosh et cliquez sur **Créer un événement**.
2.  Créez un événement personnalisé nommé `PW_AbandonedCart` avec ces attributs :

| Attribut | Type |
| :--- | :--- |
| `email` | string |
| `orderId` | string |
| `customerId` | string |
| `orderUrl` | string |
| `abandonedDate` | date |
| `createdDate` | date |
| `totalPrice` | decimal (price) |
| `shippingAmount` | decimal (price) |
| `taxAmount` | decimal (price) |
| `discountAmount` | decimal (price) |
| `currency` | string |

3.  Répétez pour `PW_OrderCreated` avec un seul attribut `orderId`.

<Aside type="caution" title="Utilisez les bons types d'attributs">
Pushwoosh ne stocke chaque valeur d'attribut que dans le type qui lui est défini, qu'il soit déclaré ici ou déduit pour un attribut créé automatiquement. Une valeur qui ne correspond pas au type est supprimée silencieusement, et `postEvent` renvoie toujours un succès, vous ne verrez donc pas dans la réponse que des données ont été perdues. Vous pouvez corriger un type incorrect plus tard en modifiant l'événement dans le Control Panel, mais toutes les données envoyées avant la correction sont déjà perdues.

Pour que le panier abandonné fonctionne, faites correspondre les types dans le tableau ci-dessus :

*   **Champs monétaires** (`totalPrice`, `shippingAmount`, `taxAmount`, `discountAmount`) : utilisez **decimal (price)**. S'il n'est pas déclaré, une valeur entière comme `129` est déduite comme **integer**. Déclaré comme **string**, le panier n'est pas stocké et aucun tag n'est défini. Déclaré comme **integer**, `129.90` devient `129`.
*   **Dates** (`abandonedDate`, `createdDate`) : utilisez **date**.
*   **`items` :** ne l'ajoutez pas à la définition de l'événement. Envoyez-le dans la charge utile JSON sous forme de tableau d'objets. Utilisez de vrais nombres JSON pour `price` et `quantity`, pas des chaînes de caractères entre guillemets.
</Aside>

[En savoir plus sur la création d'événements personnalisés](/fr/product/audience-data-and-segmentation/events/custom-events/#creating-custom-events).

### Envoyez les événements depuis votre backend

<Aside type="caution" icon="setting" title="Assistance d'un développeur requise">
Vous aurez besoin de l'aide de votre équipe de développement pour envoyer des événements depuis votre boutique ou votre backend. Veuillez partager ce guide avec eux.
</Aside>

Demandez à votre équipe de développement d'appeler [postEvent](/fr/developer/api-reference/user-centric-api/#postevent) chaque fois qu'un panier est abandonné, en utilisant ce schéma d'attributs :

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_AbandonedCart",
    "attributes": {
      "email": "shopper@example.com",
      "orderId": "ORDER-10293",
      "customerId": "CUST-4471",
      "orderUrl": "https://yourstore.com/cart/restore/ORDER-10293",
      "abandonedDate": "2026-07-28T10:15:00Z",
      "createdDate": "2026-07-28T09:40:00Z",
      "totalPrice": 129.90,
      "shippingAmount": 9.90,
      "taxAmount": 0,
      "discountAmount": 0,
      "currency": "USD",
      "items": [
        {
          "productId": "SKU-4821",
          "name": "Wireless headphones",
          "quantity": 1,
          "price": 119.90,
          "sku": "SKU-4821",
          "description": "Over-ear, noise-cancelling",
          "imageUrl": "https://yourstore.com/media/sku-4821.jpg",
          "productUrl": "https://yourstore.com/products/sku-4821",
          "category": "Audio"
        }
      ]
    },
    "userId": "shopper@example.com"
  }
}
```

Lorsque le panier se transforme en commande, envoyez `PW_OrderCreated` avec juste le `orderId` pour effacer les tags du panier :

```json
{
  "request": {
    "hwid": "8f65b16df378e7a6bece9614e1530fb2",
    "application": "XXXXX-XXXXX",
    "event": "PW_OrderCreated",
    "attributes": {
      "orderId": "ORDER-10293"
    },
    "userId": "shopper@example.com"
  }
}
```

<Aside type="tip">
Si vous utilisez l'[intégration Magento](/fr/product/integrations/magento-integration/#abandoned-cart-sync-configuration) ou l'[intégration Shopify](/fr/product/integrations/shopify-integration/#part-5-track-orders-carts-and-checkout-steps), vous n'avez pas besoin d'envoyer ces événements depuis votre backend. Magento envoie `PW_AbandonedCart` et `PW_OrderCreated` pour vous selon un calendrier ; Shopify les envoie (plus `PW_AbandonedCartUpdate` pour les modifications de panier en cours) depuis des webhooks en temps réel.
</Aside>

<span id="add-a-products-block-to-your-email" />

### Ajoutez un bloc Produits à votre e-mail

1.  Ouvrez l'[éditeur de contenu d'e-mail](/fr/product/content/email-content/drag-and-drop-email-editor/) et ajoutez un bloc [Produits](/fr/product/content/email-content/drag-and-drop-email-editor/blocks/#products) au canevas.
2.  Dans le panneau des paramètres, définissez la **Source** sur [Panier](/fr/product/content/email-content/drag-and-drop-email-editor/blocks/#show-items-from-the-cart).

<Aside type="note">
La source **Panier** du bloc Produits nécessite les **Modèles de contenu** dans votre plan et un [jeton d'accès API](/fr/developer/api-reference/api-access-token/). Voir [Bloc Produits](/fr/product/content/email-content/drag-and-drop-email-editor/blocks/#products).
</Aside>

3.  Définissez le **Nombre maximal de produits affichés** pour limiter le nombre d'articles du panier qui apparaissent dans l'e-mail.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-1.webp" alt="Paramètres du bloc Produits avec Source définie sur Panier et Nombre maximal de produits affichés"/>

4.  Stylisez la grille et le modèle de carte selon vos besoins. Voir [Styliser la grille](/fr/product/content/email-content/drag-and-drop-email-editor/blocks/#style-the-grid).

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-2.webp" alt="Bloc Produits sur le canevas de l'e-mail avec les paramètres de modèle de carte et de style de grille" width="580"/>

Lorsque l'e-mail est envoyé, le bloc Produits recherche le panier stocké de chaque destinataire en utilisant son tag `PW_AbandonedCartID`. Il remplit ensuite le bloc avec les articles actuels du panier : image, titre, prix et un lien de retour vers le panier. La mise en page provient du modèle de carte que vous avez défini dans l'éditeur. Les destinataires sans ce tag (rien d'abandonné, ou déjà commandé) ignorent le bloc au lieu d'afficher un contenu vide, il est donc sûr de l'utiliser également dans une campagne plus large.

<Aside type="tip">
La source Panier est disponible dans l'éditeur de contenu d'e-mail. Pour rappeler les acheteurs avec un push à la place, utilisez une étape [Push](/fr/product/customer-journey/journey-elements/channels/push/) avec une [personnalisation](/fr/product/personalization/dynamic-content/) qui fait référence aux détails du panier de l'événement.
</Aside>

### Construisez le Customer Journey

1.  Ajoutez une [Entrée basée sur un déclencheur](/fr/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) en utilisant l'événement `PW_AbandonedCart`.
2.  Ajoutez une étape [Attendre le déclencheur](/fr/product/customer-journey/journey-elements/flow-controls/wait-for-trigger/). Définissez sa période d'attente à une heure ou deux. Nommez la branche **Commande passée** et ajoutez-y l'événement `PW_OrderCreated`.

<Aside type="caution">
Définissez la période d'attente sur **Attendre le déclencheur** lui-même. N'ajoutez pas une étape **Délai** séparée avant.

**Attendre le déclencheur** ne commence à écouter `PW_OrderCreated` qu'une fois que l'acheteur atteint cette étape. Si **Délai** vient en premier et que l'acheteur passe une commande pendant ce délai, l'événement de commande n'est pas détecté. L'acheteur passe à la branche **Non déclenché**, mais `PW_OrderCreated` a déjà effacé `PW_AbandonedCartID`. Le bloc Produits ne trouve aucun panier et l'ignore. L'acheteur reçoit quand même l'e-mail de panier abandonné sans produits, même s'il a déjà finalisé son achat.
</Aside>

3.  Acheminez la branche **Commande passée** vers [Sortie](/fr/product/customer-journey/journey-elements/flow-controls/exit/). L'utilisateur a déjà acheté, ne lui envoyez donc pas de rappel.
4.  Acheminez la branche **Non déclenché** vers l'étape [E-mail](/fr/product/customer-journey/journey-elements/channels/email/). Enregistrez l'e-mail que vous avez construit dans [Ajoutez un bloc Produits à votre e-mail](#add-a-products-block-to-your-email) en tant que [contenu d'e-mail](/fr/product/content/email-content/), puis sélectionnez-le comme contenu de cette étape.

<img src="/lifecycle-marketing-campaigns-how-to-set-up-an-abandoned-cart-campaign-3.webp" alt="Canevas de Customer Journey avec Entrée basée sur un déclencheur, Attendre le déclencheur avec les branches Commande passée et Non déclenché, les étapes E-mail et Sortie, et sans Délai"/>

### Testez avant de lancer

1.  Envoyez un événement de test `PW_AbandonedCart` pour un appareil de test. Ne définissez pas le tag `PW_AbandonedCartID` manuellement : le bloc Produits charge le contenu du panier à partir du panier stocké que l'événement crée, et non de la valeur du tag. Sans un événement réel, le bloc s'affichera vide.
2.  Prévisualisez l'e-mail et confirmez la mise en page et le contenu du produit avant de l'envoyer à de vrais acheteurs.