Aller au contenu principal
Guides & Stratégie• 7 min de lecture

Chatbot e-commerce WhatsApp : catalogue, commande et suivi livraison

Chatbot e-commerce complet sur WhatsApp : présenter catalogue produits, prendre commandes, confirmer paiements mobile money et suivre livraisons. Architecture pour marchands africains.

Pour des millions de marchands africains, WhatsApp est déjà leur boutique principale. Ils partagent des photos de produits, négocient les prix, confirment les commandes et organisent les livraisons — tout ça par messages. Un chatbot e-commerce WhatsApp structure et automatise ce commerce informel, le rendant scalable et professionnel sans perdre la chaleur humaine qui fait sa force.

Ce guide vous donne l'architecture complète d'un chatbot e-commerce WhatsApp adapté au commerce africain — du catalogue au suivi de livraison.

Architecture d'un chatbot e-commerce WhatsApp

CLIENT → WhatsApp → CHATBOT
                        ↓
        ┌───────────────┼───────────────┐
        ↓               ↓               ↓
   CATALOGUE        COMMANDES         SUPPORT
   - Navigation     - Panier          - Suivi livraison
   - Recherche      - Paiement        - Réclamations
   - Recommandations - Confirmation   - Retours
        ↓               ↓               ↓
   API CATALOGUE   API COMMANDES    API CRM/SUPPORT
        ↓               ↓               ↓
              BASE DE DONNÉES PRODUITS / ERP

Module 1 : Navigation catalogue

// Catalogue produits WhatsApp
const catalogModule = {
  
  // Menu principal des catégories
  showCategories: async (phone) => {
    const categories = await catalog.getCategories({ active: true });
    
    await sendListMessage(phone, 
      "Bienvenue dans notre boutique ! 🛍️\nQue cherchez-vous ?",
      [{
        title: "Nos catégories",
        rows: categories.map(cat => ({
          id: `cat_${cat.id}`,
          title: cat.name,
          description: `${cat.product_count} articles • À partir de ${cat.min_price} FCFA`
        }))
      }]
    );
  },
  
  // Affichage produits d'une catégorie
  showCategoryProducts: async (phone, categoryId, page = 0) => {
    const products = await catalog.getProducts({
      category_id: categoryId,
      active: true,
      in_stock: true,
      limit: 5,
      offset: page * 5
    });
    
    for (const product of products) {
      // Envoyer image + description + boutons
      await sendProductCard(phone, product);
      await sleep(500); // Espacement entre les produits
    }
    
    if (products.hasMore) {
      await sendMessage(phone, "Voir plus de produits :", [{
        id: `more_${categoryId}_${page+1}`,
        title: `Voir 5 autres produits ➡️`
      }]);
    }
  },
  
  sendProductCard: async (phone, product) => {
    // Envoyer image du produit
    if (product.image_url) {
      await sendImageMessage(phone, product.image_url, 
        `*${product.name}*\n${product.description?.substring(0, 100) || ''}`
      );
    }
    
    // Envoyer détails avec boutons d'action
    await sendInteractiveMessage(phone, {
      type: 'button',
      body: {
        text: `*${product.name}*\n💰 Prix : *${formatCurrency(product.price)} FCFA*\n${product.in_stock ? '✅ En stock' : '❌ Épuisé'}\n${product.description || ''}`
      },
      action: {
        buttons: product.in_stock ? [
          { type: 'reply', reply: { id: `add_cart_${product.id}`, title: '🛒 Ajouter au panier' }},
          { type: 'reply', reply: { id: `info_${product.id}`, title: 'ℹ️ Plus d\'infos' }},
          { type: 'reply', reply: { id: `back_cat`, title: '⬅️ Retour catégorie' }}
        ] : [
          { type: 'reply', reply: { id: `notify_${product.id}`, title: '🔔 M\'avertir dès dispo' }},
          { type: 'reply', reply: { id: `similar_${product.id}`, title: '🔍 Produits similaires' }}
        ]
      }
    });
  }
};

Module 2 : Gestion du panier et commande

// Système de panier WhatsApp
const cartModule = {
  
  addToCart: async (phone, productId, quantity = 1) => {
    const product = await catalog.getProduct(productId);
    const cart = await getCart(phone);
    
    // Vérifier le stock
    if (!product.in_stock) {
      return sendMessage(phone, "Désolé, ce produit est en rupture de stock 😕\nJe vous préviens dès sa disponibilité ?");
    }
    
    // Ajouter au panier
    await updateCart(phone, { productId, quantity, price: product.price });
    
    const cart_total = calculateCartTotal(cart);
    
    await sendMessage(phone, 
      `✅ *${product.name}* ajouté au panier !\n\n🛒 *Votre panier :* ${cart.items.length} article(s) — ${formatCurrency(cart_total)} FCFA`,
      buttons: [
        { id: 'view_cart', title: 'Voir mon panier' },
        { id: 'continue_shopping', title: 'Continuer les achats' },
        { id: 'checkout', title: '✅ Commander' }
      ]
    );
  },
  
  // Récapitulatif panier
  showCart: async (phone) => {
    const cart = await getCart(phone);
    
    if (cart.items.length === 0) {
      return sendMessage(phone, "Votre panier est vide 🛒\nRetournez au catalogue pour ajouter des articles.");
    }
    
    const cartSummary = cart.items.map(item => 
      `• ${item.product_name} x${item.quantity} = ${formatCurrency(item.total)} FCFA`
    ).join('\n');
    
    await sendMessage(phone,
      `🛒 *Votre panier :*\n\n${cartSummary}\n\n---\n💰 *Total : ${formatCurrency(cart.total)} FCFA*\n🚚 Livraison : à calculer`
    );
    
    await sendButtons(phone, "Que voulez-vous faire ?", [
      { id: 'checkout', title: '✅ Commander maintenant' },
      { id: 'continue_shopping', title: '🛍️ Continuer' },
      { id: 'clear_cart', title: '🗑️ Vider le panier' }
    ]);
  },
  
  // Processus de commande
  checkout: async (phone) => {
    const cart = await getCart(phone);
    const customer = await getOrCreateCustomer(phone);
    
    // Étape 1 : Confirmer l'adresse de livraison
    const savedAddress = customer.last_delivery_address;
    
    if (savedAddress) {
      await sendMessage(phone,
        `📍 Livraison à votre adresse habituelle :\n*${savedAddress.full_address}*\n\nC'est correct ?`
      );
      // Attendre confirmation ou nouvelle adresse
    } else {
      await collectDeliveryAddress(phone);
    }
  }
};

Module 3 : Paiement Mobile Money africain

// Intégration paiement Mobile Money
const paymentModule = {
  
  showPaymentOptions: async (phone, orderTotal, country) => {
    const availablePayments = getPaymentMethods(country);
    
    await sendListMessage(phone, 
      `💰 Total à payer : *${formatCurrency(orderTotal)} FCFA*\n\nChoisissez votre mode de paiement :`,
      [{
        title: "Paiement sécurisé",
        rows: availablePayments.map(pm => ({
          id: `pay_${pm.id}`,
          title: pm.name,
          description: pm.description
        }))
      }]
    );
  },
  
  processWavePayment: async (phone, orderTotal, orderData) => {
    const paymentRequest = await waveAPI.createPaymentRequest({
      amount: orderTotal,
      currency: 'XOF',
      description: `Commande ${orderData.order_id}`,
      callback_url: `${SERVER_URL}/webhooks/wave/payment`,
      metadata: { order_id: orderData.order_id, phone }
    });
    
    await sendMessage(phone,
      `📱 *Paiement Wave*\n\nMontant : *${formatCurrency(orderTotal)} FCFA*\n\nCliquez sur le lien ci-dessous pour payer avec Wave :\n${paymentRequest.payment_link}\n\n⏰ Ce lien expire dans 15 minutes.`
    );
    
    // Attendre le webhook de confirmation Wave
    await waitForPaymentConfirmation(phone, paymentRequest.id, 15 * 60 * 1000);
  },
  
  handlePaymentSuccess: async (phone, orderData, paymentData) => {
    const order = await ordersAPI.createOrder({
      ...orderData,
      payment_status: 'paid',
      payment_method: paymentData.method,
      payment_reference: paymentData.transaction_id
    });
    
    await sendMessage(phone,
      `🎉 *Paiement reçu ! Commande confirmée.*\n\n📦 N° de commande : *${order.id}*\n💰 Montant payé : ${formatCurrency(order.total)} FCFA\n📅 Livraison prévue : *${formatDate(order.estimated_delivery)}*\n\nVous recevrez un message dès que votre colis est en route.`
    );
  }
};

Pour approfondir, consultez notre guide sur le bot de vente WhatsApp et notre article sur l'automatisation WhatsApp flows.

FAQ

Q: WhatsApp peut-il vraiment remplacer une boutique en ligne pour un marchand africain ?

A: Pour beaucoup de marchands africains, WhatsApp est déjà plus efficace qu'un site web car il est familier, rapide et personnel. Un chatbot e-commerce WhatsApp est complémentaire : il structure le process d'achat sans perdre l'aspect conversationnel. Pour les marchands avec beaucoup de SKUs (>100 produits), un site web reste utile comme catalogue de référence.

Q: Comment gérer les photos de produits dans un catalogue WhatsApp ?

A: Utilisez le catalogue WhatsApp Business natif (via Facebook Business Manager) pour les catalogues fixes. Pour des catalogues dynamiques ou très larges, envoyez les images via l'API WhatsApp avec des liens vers vos CDN. Optimisez les images (<500KB) pour les connexions mobiles africaines. Une image de mauvaise qualité ou qui ne charge pas détruit l'expérience d'achat.

Q: Comment gérer les négociations de prix, très courantes dans le commerce africain ?

A: Deux approches : soit votre bot indique que les prix sont fixes et escalade vers un agent pour les négociations (recommandé pour maintenir les marges), soit vous configurez des plages de prix et des règles de discount automatique pour certains volumes ou profils clients. La seconde approche est plus complexe mais peut augmenter les conversions.

Q: Quelles intégrations logistiques sont disponibles pour le suivi de livraison en Afrique ?

A: Les principaux prestataires logistiques africains avec API : DHL Africa, Fedex Africa, Jumia Logistics (plusieurs pays), Sendy (Afrique de l'Est), Glovo Afrique. Pour les marchands locaux, une intégration manuelle via webhook (le livreur met à jour le statut via une app simple) est souvent plus réaliste et tout aussi efficace pour le suivi client.


Un chatbot e-commerce WhatsApp transforme votre commerce informel en boutique structurée et scalable — sans perdre l'authenticité relationnelle qui fait le succès du commerce africain.

Créez votre boutique WhatsApp avec Whakup et commencez à vendre automatiquement 24h/24 dès aujourd'hui.

#whatsapp-business-api-guide#automatisation-whatsapp-flows#chatbot-whatsapp-guide
Arthur Lyonnet
Arthur LyonnetCo-fondateur & CEO

Co-fondateur de Whakup, Arthur accompagne les entreprises africaines dans leur transformation digitale via WhatsApp depuis 2022. Passionné par le growth marketing et l'entrepreneuriat en Afrique francophone.

🚀

Prêt à passer à l'action ?

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

Démarrer l'essai gratuit