Aller au contenu principal

WhatsApp pour l'abandon de panier via l'API : tutoriel pour les éditeurs

Tutoriel technique abandon de panier WhatsApp : détection de l'événement, création du template, appel API REST, webhooks et attribution — guide pas à pas pour les éditeurs.

Intégrer la relance abandon de panier via l'API WhatsApp Business nécessite de connecter votre plateforme e-commerce à l'API Whakup en cinq étapes : détecter l'événement d'abandon, vérifier les prérequis d'envoi, déclencher le message via l'API REST, traiter les statuts par webhook et mesurer les conversions. Ce tutoriel détaille chaque étape avec des exemples de code et de structure JSON pour les équipes de développement.

Ce tutoriel suppose un accès API Whakup actif, au moins un numéro WhatsApp Business configuré, et un template abandon de panier approuvé par Meta. Pour les prérequis d'intégration de base, consultez le guide complet de l'API WhatsApp Business.

Étape 1 — Détecter et qualifier l'événement d'abandon

L'événement cart_abandoned est typiquement généré par votre plateforme e-commerce quand aucune action de checkout n'est détectée pendant une durée configurée après le dernier ajout au panier.

Données à capturer sur l'événement :

{
  "event": "cart_abandoned",
  "timestamp": "2026-08-13T14:32:00Z",
  "cart_id": "cart_a8f3d2",
  "user": {
    "id": "usr_9471",
    "phone": "+33612345678",
    "first_name": "Camille",
    "whatsapp_marketing_optin": true,
    "whatsapp_optin_date": "2026-06-01T09:12:00Z"
  },
  "cart": {
    "total_value": 87.50,
    "item_count": 3,
    "items": [
      { "name": "Jean slim indigo", "price": 49.90, "qty": 1 },
      { "name": "T-shirt blanc coton", "price": 19.90, "qty": 2 }
    ],
    "recovery_url": "https://shop.example.com/checkout/recover?token=abc123def456"
  }
}

Vérifications obligatoires avant de mettre l'envoi en file d'attente :

Vérification Condition d'envoi
Opt-in WhatsApp marketing whatsapp_marketing_optin === true
Pas déjà commandé Aucune commande créée depuis cart_abandoned
Pas déjà relancé récemment Aucun message WhatsApp envoyé dans les 7 derniers jours
Numéro valide Format E.164, non blacklisté
Score qualité numéro Statut vert ou jaune acceptable

Si toutes les conditions sont remplies, planifiez l'envoi avec un délai de 1 à 3 heures.

Étape 2 — Préparer les variables du template

Le template abandon de panier utilise des variables dynamiques injectées à l'envoi. Voici le mapping entre les données de l'événement et les variables du template.

Pour un template cart_recovery_v1 avec cette structure :

  • Body : "Bonjour {{1}}, vous avez laissé {{2}} article(s) dans votre panier (valeur : {{3}} €). Ils vous attendent !"
  • Bouton URL : "Reprendre mon panier" → https://shop.example.com/checkout/recover?token={{4}}

Variables à injecter :

{
  "var_1": "Camille",
  "var_2": "3",
  "var_3": "87.50",
  "var_4": "abc123def456"
}

Le token unique {{4}} dans le bouton URL permet de tracer les clics par destinataire et d'attribuer les conversions WhatsApp sans ambiguïté.

Étape 3 — Appeler l'API Whakup

Au moment planifié, votre worker déclenche l'envoi via l'API REST Whakup.

Requête POST /messages :

{
  "messaging_product": "whatsapp",
  "to": "+33612345678",
  "type": "template",
  "template": {
    "name": "cart_recovery_v1",
    "language": { "code": "fr" },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "https://cdn.shop.example.com/products/jean-slim-indigo-thumb.jpg"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Camille" },
          { "type": "text", "text": "3" },
          { "type": "text", "text": "87.50" }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          { "type": "text", "text": "abc123def456" }
        ]
      }
    ]
  }
}

Réponse en cas de succès :

{
  "messaging_product": "whatsapp",
  "contacts": [{ "input": "+33612345678", "wa_id": "33612345678" }],
  "messages": [{ "id": "wamid.XYZ789AbcDef" }]
}

Stockez le message_id (wamid.XYZ789AbcDef) en base avec le cart_id et le user_id pour la corrélation avec les webhooks de statut et l'attribution de conversion.

Gestion des erreurs à implémenter :

  • 131026 (numéro non WhatsApp) : annuler l'envoi WhatsApp, déclencher fallback email
  • 131047 (utilisateur a bloqué l'expéditeur) : marquer l'opt-in comme révoqué, ne plus envoyer
  • 130429 (rate limit atteint) : remettre en queue avec délai de 30 minutes

Étape 4 — Traiter les webhooks de statut

Votre endpoint webhook reçoit les événements de statut en temps réel depuis Whakup.

Webhook delivered :

{
  "object": "whatsapp_business_account",
  "entry": [{
    "changes": [{
      "value": {
        "statuses": [{
          "id": "wamid.XYZ789AbcDef",
          "status": "delivered",
          "timestamp": "1753904520",
          "recipient_id": "33612345678",
          "conversation": {
            "id": "conv_abc123",
            "expiration_timestamp": "1753990920",
            "origin": { "type": "marketing" }
          }
        }]
      }
    }]
  }]
}

Webhook read : même structure, status: "read". Le statut read indique que l'utilisateur a ouvert la conversation — c'est le meilleur indicateur d'intent.

Webhook d'un message entrant (réponse utilisateur) :

Si l'utilisateur répond au message (questions, "STOP", etc.), vous recevez un webhook de type messages avec le contenu du message entrant. Implémentez la détection de mots-clés de désinscription pour mettre à jour l'opt-in en temps réel.

Traitement recommandé :

  • Réponse HTTP 200 immédiate (traitement asynchrone en background)
  • Log de chaque statut avec timestamp dans votre base
  • Mise à jour du statut de la relance dans la table cart_recovery_logs
  • Déclenchement de la vérification de conversion 48h après delivered

Étape 5 — Mesurer l'attribution et la conversion

L'attribution WhatsApp pour l'abandon de panier se fait en croisant deux sources :

  1. Le clic sur le lien CTA tracké (paramètre UTM + token unique)
  2. La commande créée dans les X heures suivant l'envoi du message

Requête d'attribution (pseudo-code) :

SELECT
  cr.cart_id,
  cr.user_id,
  cr.message_id,
  cr.sent_at,
  o.created_at AS order_created_at,
  o.total_amount,
  TIMESTAMPDIFF(HOUR, cr.sent_at, o.created_at) AS hours_to_convert
FROM cart_recovery_logs cr
JOIN orders o ON o.user_id = cr.user_id
WHERE o.created_at BETWEEN cr.sent_at AND DATE_ADD(cr.sent_at, INTERVAL 48 HOUR)
  AND cr.status = 'delivered'

Pour les métriques de benchmark et le cadre réglementaire complet, l'article sur le meilleur BSP WhatsApp en France détaille les critères de sélection d'infrastructure pour ce type d'use case.

FAQ

Comment s'assurer que l'image du header correspond au bon produit pour chaque destinataire ?

Comme pour les campagnes marketing, l'URL de l'image dans le composant header.parameters peut être différente pour chaque appel API, même si le template est le même. Passez l'URL de la photo du premier article du panier à l'envoi. Assurez-vous que l'image est accessible publiquement, en HTTPS, et dans un format supporté (JPEG ou PNG, max 5 Mo, ratio recommandé 1.91:1).

Faut-il re-soumettre le template si le panier du client a changé entre l'abandon et l'envoi ?

Non. Le template reste le même — seules les variables dynamiques changent à chaque envoi. Si le panier a été modifié entre l'événement cart_abandoned et l'envoi réel, recalculez les variables (item_count, total_value, recovery_url) au moment du déclenchement de l'envoi, pas au moment de la planification.

Comment éviter d'envoyer un message si l'utilisateur a finalement commandé entre-temps ?

Dans votre worker d'envoi, effectuez une dernière vérification juste avant l'appel API Whakup : requête en base pour vérifier si une commande liée au cart_id ou à l'user_id a été créée depuis l'événement cart_abandoned. Si oui, annulez l'envoi et loggez le motif. Ce pattern "check before send" est indispensable pour les envois planifiés différés.

Peut-on envoyer la relance panier depuis un numéro différent selon la marque ?

Oui, avec l'architecture multi-tenant Whakup. Chaque marque (client de votre plateforme) a son propre numéro WhatsApp Business. Votre service d'orchestration sélectionne le bon numéro expéditeur selon le tenant avant d'appeler l'API. L'utilisateur final voit le nom et le numéro de la marque qu'il connaît, pas celui de votre plateforme.


Vous développez la fonctionnalité abandon de panier WhatsApp pour votre plateforme ? Whakup fournit une API WhatsApp Business complète avec sandbox, documentation et support technique. En tant que Meta Tech Provider certifié, nous gérons la relation Meta — vous vous concentrez sur le produit. Contactez-nous pour démarrer.

#intégration whatsapp#abandon de panier whatsapp#tutoriel
Pablo Lenormand
Pablo LenormandCo-fondateur & CPO

Co-fondateur et Chief Product Officer de Whakup, Pablo conçoit les fonctionnalités qui permettent aux marques africaines de maximiser leur impact sur WhatsApp.

🚀

Prêt à passer à l'action ?

Essayez Whakup gratuitement pendant 15 jours. Aucune carte bancaire requise.

Démarrer l'essai gratuit