Les banques et fintechs africaines sont face à un paradoxe : leurs clients sont massivement sur WhatsApp, mais la majorité des interactions bancaires nécessitent encore des visites en agence ou des appels à des centres de relation client débordés. Pourtant, la plupart des demandes bancaires courantes — consultation de solde, historique des transactions, FAQ produits — peuvent être automatisées en toute sécurité via WhatsApp.
Ce guide vous explique comment déployer un bot bancaire WhatsApp robuste, sécurisé et conforme.
Les contraintes spécifiques du bot bancaire
Avant tout développement, les contraintes du secteur bancaire :
Sécurité renforcée : chaque transaction d'information sensible doit être authentifiée. Pas d'accès au solde sans vérification d'identité.
Conformité réglementaire : BCEAO (UEMOA), Banque Centrale du Maroc, BEAC (CEMAC) ont des exigences spécifiques sur les communications numériques bancaires. Votre équipe juridique doit valider chaque fonctionnalité.
Disponibilité et fiabilité : un bug dans un bot bancaire a des conséquences directes sur l'argent des clients. SLA de disponibilité 99,9% minimum.
Audit trail complet : chaque interaction doit être loggée avec horodatage, pour les audits réglementaires et la gestion des litiges.
Architecture sécurisée d'un bot bancaire WhatsApp
// Architecture d'authentification pour bot bancaire
const bankingBotAuth = {
// Niveau 1 : Vérification que le numéro est enregistré
verifyRegistration: async (phone) => {
const account = await bankAPI.getAccountByPhone(phone);
if (!account) {
return {
registered: false,
message: "Ce numéro n'est pas associé à un compte [Banque]. Pour ouvrir un compte, tapez *ouverture*."
};
}
return { registered: true, account };
},
// Niveau 2 : Authentification OTP pour actions sensibles
requestOTP: async (phone, action) => {
const otp = generateSecureOTP(6);
const expiresAt = Date.now() + 5 * 60 * 1000; // 5 minutes
await secureStore.set(`otp:${phone}`, {
otp: hashOTP(otp), // Ne jamais stocker en clair
action,
expiresAt,
attempts: 0
});
// Envoyer OTP par SMS (plus sécurisé que WhatsApp pour les codes)
await smsGateway.send(phone,
`[Banque] Code de vérification : ${otp}. Valable 5 minutes. Ne partagez jamais ce code.`
);
await whatsappAPI.sendMessage(phone,
"📱 Un code de vérification a été envoyé par SMS au numéro enregistré sur votre compte.\n\nEntrez le code pour continuer :"
);
},
verifyOTP: async (phone, enteredOTP, action) => {
const stored = await secureStore.get(`otp:${phone}`);
if (!stored || stored.action !== action) {
return { valid: false, reason: 'no_pending_otp' };
}
if (Date.now() > stored.expiresAt) {
await secureStore.delete(`otp:${phone}`);
return { valid: false, reason: 'expired' };
}
if (stored.attempts >= 3) {
await secureStore.delete(`otp:${phone}`);
await alertFraudTeam(phone, 'too_many_otp_attempts');
return { valid: false, reason: 'too_many_attempts', locked: true };
}
if (!compareOTP(enteredOTP, stored.otp)) {
await secureStore.increment(`otp:${phone}`, 'attempts');
return { valid: false, reason: 'wrong_code', attempts_remaining: 3 - stored.attempts - 1 };
}
await secureStore.delete(`otp:${phone}`);
return { valid: true };
}
};
Cas d'usage 1 : Consultation de solde sécurisée
const balanceInquiry = {
handle: async (phone) => {
// Vérifier inscription
const { registered, account } = await bankingBotAuth.verifyRegistration(phone);
if (!registered) return sendMessage(phone, account.message);
// Requérir OTP pour voir le solde
await bankingBotAuth.requestOTP(phone, 'balance_inquiry');
// Attendre l'OTP (géré dans le handler suivant)
await setState(phone, { expecting: 'otp', action: 'balance_inquiry', account_id: account.id });
},
handleOTPConfirm: async (phone, enteredOTP, sessionData) => {
const otpResult = await bankingBotAuth.verifyOTP(phone, enteredOTP, 'balance_inquiry');
if (!otpResult.valid) {
if (otpResult.locked) {
return sendMessage(phone, "⚠️ Trop de tentatives incorrectes. Votre accès est temporairement bloqué. Contactez le 3030.");
}
return sendMessage(phone, `Code incorrect. Il vous reste ${otpResult.attempts_remaining} essai(s).`);
}
// OTP valide : afficher le solde
const balance = await bankAPI.getBalance(sessionData.account_id);
await sendMessage(phone,
`💰 *Votre solde au ${formatDateTime(new Date())}*\n\n` +
`Solde disponible : *${formatCurrency(balance.available)} FCFA*\n` +
`Solde comptable : ${formatCurrency(balance.accounting)} FCFA\n` +
`${balance.pending > 0 ? `\n⏳ Opérations en attente : ${formatCurrency(balance.pending)} FCFA` : ''}`
);
await sendButtons(phone, "Que souhaitez-vous faire ?", [
{ id: 'transactions', title: 'Voir transactions' },
{ id: 'transfer', title: 'Faire un virement' },
{ id: 'menu', title: 'Menu principal' }
]);
}
};
Cas d'usage 2 : Historique des transactions
const transactionHistory = {
handle: async (phone, accountId) => {
const transactions = await bankAPI.getTransactions(accountId, { limit: 5, offset: 0 });
const txList = transactions.data.map(tx => {
const direction = tx.amount > 0 ? '📥 +' : '📤 ';
const color = tx.amount > 0 ? '' : '';
return `${direction}${formatCurrency(Math.abs(tx.amount))} FCFA\n ${tx.description}\n _${formatDate(tx.date)}_`;
}).join('\n\n');
await sendMessage(phone,
`📊 *Vos 5 dernières transactions :*\n\n${txList}`
);
if (transactions.has_more) {
await sendButtons(phone, "Voulez-vous voir plus de transactions ?", [
{ id: 'more_transactions', title: 'Voir plus' },
{ id: 'download_statement', title: '📄 Relevé PDF' }
]);
}
}
};
Cas d'usage 3 : Signalement de problème/fraude
const fraudReport = {
handle: async (phone) => {
await sendMessage(phone,
"⚠️ *Signalement de problème*\n\nQuel type de problème souhaitez-vous signaler ?"
);
await sendListMessage(phone, "Sélectionnez le type :", [{
title: "Problèmes fréquents",
rows: [
{ id: 'suspicious_transaction', title: 'Transaction suspecte / inconnue' },
{ id: 'card_stolen', title: 'Carte volée ou perdue' },
{ id: 'account_blocked', title: 'Compte bloqué sans raison' },
{ id: 'failed_payment', title: 'Paiement échoué injustifié' },
{ id: 'other', title: 'Autre problème' }
]
}]);
},
handleFraudReport: async (phone, reportType, details) => {
if (reportType === 'suspicious_transaction' || reportType === 'card_stolen') {
// URGENCE SÉCURITÉ : bloquer immédiatement si demandé
await sendMessage(phone,
"⛔ *Action immédiate recommandée*\n\nSouhaitez-vous bloquer votre carte IMMÉDIATEMENT en attendant d'être rappelé par notre équipe sécurité ?"
);
await sendButtons(phone, "", [
{ id: 'block_card_now', title: '🔴 Bloquer maintenant' },
{ id: 'wait_agent', title: 'Parler à un agent' }
]);
}
// Créer ticket sécurité prioritaire
const ticket = await createSecurityTicket({ phone, reportType, details, timestamp: new Date() });
// Notifier l'équipe fraude
await notifyFraudTeam(ticket);
await sendMessage(phone,
`🔐 Votre signalement a été enregistré sous le *n° ${ticket.id}*.\n\nNotre équipe sécurité vous rappelle dans l'heure.\n\nPour toute urgence : *${SECURITY_HOTLINE}*`
);
}
};
Pour approfondir, consultez notre guide sur l'API WhatsApp Business Guide et notre article sur la segmentation audience WhatsApp.
FAQ
Q: L'authentification OTP par SMS est-elle suffisamment sécurisée pour un bot bancaire WhatsApp ?
A: L'OTP SMS est un standard accepté dans la plupart des réglementations africaines pour les transactions à risque modéré. Pour les transactions de montants élevés, les banques peuvent requérir une authentification forte (biométrie, PIN secondaire). Le SMS OTP est le minimum recommandé — ne jamais afficher de données financières sans authentification.
Q: Comment se conformer aux réglementations de la BCEAO pour un bot WhatsApp bancaire ?
A: La BCEAO impose des exigences sur : le consentement client documenté, la sécurité des données personnelles, l'intégrité des opérations. Votre bot doit : (1) obtenir un consentement explicite du client pour les communications WhatsApp, (2) ne jamais transmettre de données financières vers des serveurs non conformes, (3) maintenir un audit trail complet. Faites valider l'architecture par votre compliance officer avant déploiement.
Q: Les clients bancaires africains font-ils confiance aux bots WhatsApp pour les questions d'argent ?
A: La confiance se construit progressivement. Commencez par des fonctionnalités à faible risque (FAQ produits, horaires agences, liste des distributeurs) et montez progressivement vers les fonctionnalités transactionnelles (solde, transactions). Une communication claire sur la sécurité ("Votre code ne sera jamais demandé par notre bot") est indispensable.
Q: Comment gérer les tentatives d'hameçonnage (phishing) utilisant un faux bot bancaire WhatsApp ?
A: Communiquez proactivement et clairement auprès de vos clients : votre numéro WhatsApp officiel, le fait que votre bot ne demande jamais de mots de passe ou de numéros de carte complets, et comment vérifier qu'ils interagissent avec le vrai numéro. Demandez la vérification du compte WhatsApp Business auprès de Meta (coche verte) pour signaler votre authenticité.
Un bot bancaire WhatsApp bien sécurisé est un levier puissant d'inclusion financière en Afrique. En mettant des services bancaires dans la poche de millions de clients via WhatsApp, les banques africaines peuvent servir des populations que les agences physiques n'atteignent pas.
Créez votre bot bancaire WhatsApp avec Whakup et offrez à vos clients un accès bancaire sécurisé 24h/24.

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.