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.

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 gratuitArticles similaires
Abandon de flows WhatsApp : comprendre et réduire le taux d'abandon
Analyser et réduire l'abandon de flows dans votre chatbot WhatsApp. Identifier les étapes problématiques, comprendre les causes et appliquer les corrections pour améliorer la complétion.
Benchmark WhatsApp Marketing en Afrique par secteur : données 2025
Benchmarks WhatsApp Marketing par secteur d'activité en Afrique : e-commerce, banque, santé, tourisme, immobilier. Taux d'ouverture, conversion et satisfaction pour vous situer.
Conversation analytics WhatsApp : créer un tableau de bord de pilotage
Construire un tableau de bord analytics pour piloter votre chatbot WhatsApp. Métriques clés, visualisations, alertes automatiques et reporting pour décideurs africains.