Aller au contenu principal
E-commerce 7 min de lecture

Order messages WhatsApp : gérer les commandes directement dans la messagerie

Comment utiliser les order messages WhatsApp Business API pour gérer les commandes clients directement dans WhatsApp. Architecture, implémentation et cas d'usage e-commerce africain.

Order messages WhatsApp : gérer les commandes directement dans la messagerie

La prise de commande par WhatsApp est déjà une réalité pour des millions de commerçants africains qui jonglent entre les messages entrants, les screenshots de listes de produits et les confirmations manuelles. Mais cette approche artisanale atteint rapidement ses limites : les erreurs de saisie, les commandes oubliées, l'impossibilité de gérer des dizaines de commandes simultanément. Les order messages de WhatsApp Business API apportent une structure à ce processus, permettant de gérer les commandes directement dans la messagerie avec des données structurées, traçables et intégrables dans vos systèmes de gestion.

Comprendre les order messages WhatsApp

Les order messages sont des événements webhook spéciaux que WhatsApp envoie à votre système quand un client initie une commande depuis votre catalogue WhatsApp. Ces messages contiennent les informations structurées de la commande : produits sélectionnés, quantités, prix affichés au moment de la sélection.

Le flux complet fonctionne ainsi :

  1. Le client consulte votre catalogue WhatsApp Business
  2. Il ajoute des produits à son "panier" WhatsApp
  3. Il clique sur "Commander" dans l'interface WhatsApp
  4. Votre webhook reçoit un événement de type order avec tous les détails
  5. Votre système traite la commande et confirme par un message

Ce système est actuellement disponible dans les pays où WhatsApp Business permet la fonctionnalité de panier (disponibilité variable selon les marchés).

Recevoir et traiter les order messages

Voici la structure d'un événement webhook order et comment le traiter :

function handleOrderMessage(message) {
    if (message.type !== 'order') return;
    
    const { from, order, timestamp } = message;
    const { catalog_id, product_items, text } = order;
    
    console.log(`Nouvelle commande de ${from}:`);
    console.log(`Catalogue: ${catalog_id}`);
    console.log(`Note client: ${text || 'Aucune'}`);
    
    // Détail des produits commandés
    const orderItems = product_items.map(item => ({
        productId: item.product_retailer_id,
        quantity: item.quantity,
        itemPrice: item.item_price,         // Prix à l'unité (en sous-unités, ex: centimes)
        currency: item.currency             // Code devise ISO (XOF, MAD, XAF, etc.)
    }));
    
    // Calculer le total
    const totalAmount = orderItems.reduce(
        (sum, item) => sum + (item.itemPrice * item.quantity), 0
    );
    
    processNewOrder({
        customerPhone: from,
        catalogId: catalog_id,
        items: orderItems,
        total: totalAmount,
        currency: orderItems[0]?.currency || 'XOF',
        customerNote: text,
        timestamp: parseInt(timestamp)
    });
}

async function processNewOrder(orderData) {
    // 1. Enrichir les données produit depuis votre catalogue/BDD
    const enrichedItems = await enrichOrderItems(orderData.items);
    
    // 2. Vérifier la disponibilité stock
    const stockCheck = await checkStockAvailability(enrichedItems);
    
    if (!stockCheck.allAvailable) {
        const unavailableItems = stockCheck.unavailable.map(i => i.name).join(', ');
        await sendTextMessage(
            orderData.customerPhone,
            `Désolé, les articles suivants ne sont plus disponibles : ${unavailableItems}.\n\nVoulez-vous procéder sans ces articles ou annuler la commande ?`
        );
        return;
    }
    
    // 3. Créer la commande dans votre système
    const orderId = await createOrderInDatabase({
        ...orderData,
        items: enrichedItems,
        status: 'pending_confirmation'
    });
    
    // 4. Envoyer la confirmation au client
    await sendOrderConfirmation(orderData.customerPhone, orderId, enrichedItems, orderData.total, orderData.currency);
    
    // 5. Notifier l'équipe interne
    await notifyFulfillmentTeam(orderId, orderData);
}

async function enrichOrderItems(items) {
    return Promise.all(items.map(async (item) => {
        const product = await getProductFromCatalog(item.productId);
        return {
            ...item,
            name: product.name,
            image: product.image_url,
            currentPrice: product.price, // Prix actuel (peut différer du prix au moment de l'ajout au panier)
            priceAtOrder: item.itemPrice
        };
    }));
}

Construire le flux de confirmation et paiement

Une fois la commande reçue, le flux de confirmation peut être entièrement géré via des messages interactifs WhatsApp :

async function sendOrderConfirmation(phone, orderId, items, total, currency) {
    // Formater le récapitulatif
    const itemsList = items.map(item => 
        `• ${item.name} × ${item.quantity} = ${formatAmount(item.itemPrice * item.quantity, currency)}`
    ).join('\n');
    
    const formattedTotal = formatAmount(total, currency);
    
    await sendButtonMessage(
        phone,
        `🛒 *Récapitulatif de votre commande #${orderId}*\n\n${itemsList}\n\n💰 *Total : ${formattedTotal}*\n\nComment souhaitez-vous payer ?`,
        [
            { id: `pay:momo:${orderId}`, title: 'Mobile Money' },
            { id: `pay:cod:${orderId}`, title: 'Paiement livraison' },
            { id: `cancel:${orderId}`, title: 'Annuler' }
        ]
    );
}

async function handlePaymentChoice(phone, buttonId) {
    const [action, method, orderId] = buttonId.split(':');
    
    if (action === 'pay') {
        if (method === 'momo') {
            const order = await getOrder(orderId);
            
            // Envoyer les instructions de paiement Mobile Money
            await sendTextMessage(
                phone,
                `💳 *Paiement Mobile Money*\n\n` +
                `Envoyez ${formatAmount(order.total, order.currency)} au :\n` +
                `📱 *+221 77 XXX XX XX* (Orange Money)\n` +
                `📱 *+221 76 XXX XX XX* (Wave)\n\n` +
                `Référence : *CMD-${orderId}*\n\n` +
                `Envoyez-nous votre reçu de paiement pour confirmation.`
            );
            
            await updateOrderStatus(orderId, 'awaiting_payment');
            
        } else if (method === 'cod') {
            await updateOrderStatus(orderId, 'confirmed_cod');
            
            await sendTextMessage(
                phone,
                `✅ *Commande confirmée !*\n\n` +
                `Commande #${orderId}\n` +
                `Paiement : À la livraison\n\n` +
                `Un livreur vous contactera dans les 24h pour organiser la livraison.`
            );
        }
    }
}

function formatAmount(amount, currency) {
    const divisors = { 'XOF': 1, 'XAF': 1, 'MAD': 100, 'USD': 100, 'EUR': 100 };
    const divisor = divisors[currency] || 100;
    const realAmount = amount / divisor;
    
    return `${realAmount.toLocaleString('fr-FR')} ${currency}`;
}

Intégration avec les systèmes de gestion

Pour les e-commerçants qui ont déjà un système de gestion (ERP, logiciel de caisse, WooCommerce), synchronisez les commandes WhatsApp automatiquement :

async function syncOrderToERP(order) {
    // Exemple avec l'API REST de WooCommerce
    const wooOrder = await woocommerce.post('orders', {
        payment_method: order.paymentMethod,
        payment_method_title: order.paymentMethod === 'momo' ? 'Mobile Money' : 'Paiement à la livraison',
        billing: {
            phone: '+' + order.customerPhone,
            first_name: order.customerName || 'Client WhatsApp'
        },
        line_items: order.items.map(item => ({
            product_id: item.woocommerceId,
            quantity: item.quantity
        })),
        meta_data: [
            { key: 'whatsapp_order_id', value: order.id },
            { key: 'order_source', value: 'whatsapp' }
        ]
    });
    
    return wooOrder.data.id;
}

Pour une stratégie e-commerce WhatsApp complète, consultez le guide marketing WhatsApp 2025, le guide API WhatsApp Business et l'article sur l'automatisation WhatsApp.

FAQ

Q: Les order messages WhatsApp sont-ils disponibles en Afrique de l'Ouest ?

R: La disponibilité des fonctionnalités de panier WhatsApp (qui génèrent les order messages) varie selon les pays et les mises à jour de Meta. Vérifiez la disponibilité dans la documentation Meta Developer pour votre pays cible. En attendant la disponibilité native, vous pouvez créer un flux de commande équivalent avec des catalog messages + messages interactifs + gestion d'état dans votre chatbot.

Q: Comment gérer les retours et annulations de commandes WhatsApp ?

R: Créez un flux de gestion des retours : quand un client écrit "retour" ou "annuler commande", votre chatbot demande le numéro de commande, affiche les détails, et propose des options (échange, remboursement, avoir). Mettez à jour le statut dans votre système, notifiez l'équipe logistique et confirmez par WhatsApp. Le key est de maintenir tout le suivi dans WhatsApp pour une expérience cohérente.

Q: Peut-on gérer des commandes avec options personnalisées (couleur, taille) via WhatsApp ?

R: Oui, avec les messages de liste interactive ou les Meta Flows. Après la sélection d'un produit depuis le catalogue, envoyez un message de liste avec les options disponibles (tailles, couleurs). Une fois les options sélectionnées, envoyez la confirmation avec le récapitulatif complet. Cette approche multi-étapes couvre la plupart des cas de personnalisation sans développement excessif.

Q: Comment synchroniser les prix et stocks en temps réel entre WhatsApp et mon magasin physique ?

R: Utilisez l'API Catalog de Meta pour mettre à jour les prix et disponibilités en temps réel depuis votre système de caisse ou ERP. Un webhook depuis votre système de gestion (déclenché à chaque vente physique ou modification de prix) peut appeler l'API Meta pour refléter les changements instantanément dans votre catalogue WhatsApp.

Q: Est-il possible d'accepter des paiements directement dans WhatsApp (WhatsApp Pay) en Afrique ?

R: WhatsApp Pay est disponible dans certains pays (Brésil, Inde) mais pas encore déployé à grande échelle en Afrique. En attendant, les commerçants africains utilisent des liens de paiement Mobile Money (Orange Money, Wave, MTN MoMo) ou des QR codes envoyés dans WhatsApp pour faciliter le paiement, combinés à une confirmation manuelle ou automatisée du paiement.


Transformez vos conversations WhatsApp en un système de prise de commande professionnel. Whakup intègre la gestion de catalogue, les commandes et le suivi client dans une plateforme pensée pour les marchés africains.

#order messages whatsapp#commandes whatsapp business#whatsapp commerce commande#gestion commandes whatsapp#e-commerce whatsapp
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.

E-commerce
🚀

Prêt à passer à l'action ?

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

Démarrer l'essai gratuit