Votre service client WhatsApp reçoit 200 messages par jour et vous avez 3 agents. Même avec un excellent chatbot qui résout 70% des demandes automatiquement, il reste 60 conversations quotidiennes qui nécessitent un agent humain. Sans système de file d'attente, ces 60 clients attendent sans savoir combien de temps, certains relancent 3 fois, les agents sont débordés et la satisfaction chute.
Un système de file d'attente WhatsApp bien conçu transforme cette situation chaotique en un processus ordonné et transparent — avec des clients informés qui attendent (un peu) patiemment.
Anatomie d'un système de file d'attente WhatsApp
Un système de file d'attente complet comprend :
- L'admission : quand une conversation entre en file
- La priorisation : qui passe avant qui
- La communication : tenir le client informé de son attente
- L'affectation : matcher chaque conversation avec le bon agent
- Le monitoring : surveiller et optimiser en temps réel
- Les dépassements : gérer les pics et les situations exceptionnelles
Mise en place de la priorisation
Pas toutes les demandes ne sont égales. Un système de priorité basique divise vos conversations en 4 niveaux :
// Système de priorité file d'attente WhatsApp
function calculateQueuePriority(conversationContext) {
let priority = 0; // Plus le score est élevé, plus la priorité est haute
// Critères clients
if (conversationContext.customer.segment === 'VIP') priority += 40;
if (conversationContext.customer.lifetime_value > 200000) priority += 20;
if (conversationContext.customer.is_first_order_week) priority += 15; // Premier achat récent
// Critères situation
if (conversationContext.sentiment.score < -0.5) priority += 30; // Très mécontent
if (conversationContext.intent === 'reclamation') priority += 15;
if (conversationContext.intent === 'urgence') priority += 35;
// Critères temporels
const waitTime = getWaitTimeMinutes(conversationContext.entered_queue_at);
if (waitTime > 30) priority += 10; // Bonus si attend depuis longtemps
if (waitTime > 60) priority += 20; // Bonus renforcé
// Heures de pointe (moins de pénalité pour les attentes longues)
if (isPeakHour()) priority += 5;
return Math.min(100, priority); // Cap à 100
}
const PRIORITY_LEVELS = {
URGENT: { min: 80, color: 'red', max_wait: 5 },
HIGH: { min: 50, color: 'orange', max_wait: 15 },
NORMAL: { min: 20, color: 'yellow', max_wait: 30 },
LOW: { min: 0, color: 'green', max_wait: 60 }
};
function getPriorityLevel(score) {
for (const [level, config] of Object.entries(PRIORITY_LEVELS)) {
if (score >= config.min) return level;
}
return 'LOW';
}
Messages d'attente : l'art de bien communiquer
Le secret d'une file d'attente acceptable est la communication proactive. Le client qui sait combien il attend est beaucoup plus patient que celui qui attend dans le vide.
Message d'entrée en file d'attente
function generateQueueEntryMessage(queuePosition, estimatedWait, category) {
const templates = {
normal: `Votre demande a bien été prise en compte ✅
Notre équipe vous répond dans environ *${estimatedWait} minutes*.
Vous êtes le(a) ${queuePosition}e dans la file.
Pas besoin de rester devant votre téléphone — nous vous répondrons dès que possible !`,
short_wait: `Votre message a été reçu 📥
Un agent vous répond dans *${estimatedWait} minutes* ⏰`,
long_wait: `Votre demande est bien enregistrée ✅
Notre équipe est actuellement très sollicitée. Temps d'attente estimé : *${estimatedWait} minutes*.
Préférez-vous :
[Attendre ici] [Être rappelé] [Rappeler demain]`,
out_of_hours: `Merci de nous avoir contacté !
Nos conseillers reprennent le service à *${getNextOpeningTime()}*.
Votre message est bien enregistré — vous serez notre première priorité à l'ouverture. 🌅`
};
if (!isBusinessHours()) return templates.out_of_hours;
if (estimatedWait <= 5) return templates.short_wait;
if (estimatedWait > 45) return templates.long_wait;
return templates.normal;
}
Mises à jour de position en temps réel
// Notification automatique de progression en file
async function sendQueueProgressUpdate(phone, newPosition, estimatedWait) {
// Ne notifier que si la position a changé significativement
const lastNotifiedPosition = await getLastNotifiedPosition(phone);
if (Math.abs(lastNotifiedPosition - newPosition) >= 3 || newPosition === 1) {
if (newPosition === 1) {
await sendMessage(phone,
"Vous êtes maintenant *le(a) prochain(e)* ! Un agent vous répond dans 1-2 minutes ⏳"
);
} else if (newPosition <= 3) {
await sendMessage(phone,
`Encore *${newPosition} personnes* avant vous. Moins de ${estimatedWait} minutes d'attente ✅`
);
}
await updateLastNotifiedPosition(phone, newPosition);
}
}
Algorithme d'affectation agent-conversation
Affecter la bonne conversation au bon agent améliore à la fois la résolution et la satisfaction :
async function assignConversationToAgent(conversation) {
const availableAgents = await getAvailableAgents();
if (availableAgents.length === 0) {
// File d'attente si personne de disponible
await addToQueue(conversation);
return null;
}
// Score chaque agent pour cette conversation spécifique
const agentScores = availableAgents.map(agent => ({
agent,
score: calculateAgentFitScore(agent, conversation)
}));
// Choisir l'agent avec le meilleur score
const best = agentScores.sort((a, b) => b.score - a.score)[0];
await assignConversation(conversation.phone, best.agent.id);
return best.agent;
}
function calculateAgentFitScore(agent, conversation) {
let score = 50; // Score de base
// Compétence matching
if (agent.skills.includes(conversation.required_skill)) score += 30;
// Langue
if (agent.languages.includes(conversation.customer_language)) score += 20;
// Charge de travail (moins un agent a de conversations actives, mieux c'est)
score -= agent.active_conversations * 5;
// Historique client-agent (si ont déjà interagi, c'est mieux)
if (agent.previous_customers.includes(conversation.customer_phone)) score += 15;
// Spécialisation VIP
if (conversation.priority === 'VIP' && agent.is_vip_specialist) score += 25;
return score;
}
Gestion des pics de charge
Les pics sont inévitables : promotions, fêtes, problèmes service. Préparez des protocoles :
// Détection et gestion des pics de charge
const queueMonitor = {
checkQueueHealth: async () => {
const stats = await getQueueStats();
if (stats.average_wait_time > 45) {
// Alerte management
await notifyManagement('QUEUE_OVERLOAD', stats);
// Activer les protocoles d'urgence
await activateOvertimeProtocol(); // Notifier agents hors service
await activateBotFallback(); // Le bot gère plus de cas
// Informer les clients en file
await sendQueueDelayNotification(
`Notre service est exceptionnellement sollicité aujourd'hui. Temps d'attente actuel : ${stats.average_wait_time} minutes.`
);
}
}
};
Pour approfondir, consultez notre guide sur les SLA et temps de réponse WhatsApp et notre article sur les outils de ticketing compatibles WhatsApp.
FAQ
Q: Quel est le temps d'attente maximum acceptable pour un client WhatsApp africain ?
A: La tolérance varie selon le contexte. Pour une question urgente (problème de paiement, livraison en retard) : 15 minutes maximum. Pour une question standard : 30 minutes. Pour les horaires de nuit ou weekend : les clients acceptent généralement d'attendre jusqu'au lendemain matin si clairement communiqué. Au-delà, la satisfaction chute dramatiquement.
Q: Comment gérer les clients qui envoient plusieurs messages pendant leur attente en file ?
A: Ignorez les messages supplémentaires pour ne pas les perdre de vue (gérez-les comme un seul dossier), mais envoyez un accusé de réception qui confirme que vous avez bien leurs messages : "Nous avons bien vu vos messages. Un agent vous répond bientôt." Évitez de laisser les messages dans le vide.
Q: Un système de callback (rappel téléphonique) vaut-il la peine pour les files d'attente longues ?
A: Très oui, notamment pour les marchés africains où la voix reste importante. Proposez une option "Être rappelé" quand l'attente dépasse 30 minutes. Les clients qui choisissent le callback sont généralement plus satisfaits que ceux qui attendent passivement, même si le rappel prend le même temps.
Q: Comment éviter que les clients en file d'attente ne partent voir la concurrence ?
A: La communication proactive est la réponse principale. Un client qui sait exactement ce qui l'attend est 3x moins susceptible d'abandonner qu'un client dans l'incertitude. Ajoutez-y du contenu utile pendant l'attente ("En attendant, voici notre guide de retours") pour maintenir l'engagement.
Un système de file d'attente bien conçu transforme l'attente inévitable en expérience gérée. La patience des clients est infinie quand ils sont informés et respectés.
Créez votre système de file d'attente WhatsApp avec Whakup et offrez à chaque client une expérience d'attente digne de votre marque.

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 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.