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

File d'attente WhatsApp : gérer le flux de demandes et réduire l'attente

Gérez efficacement les files d'attente WhatsApp dans votre service client. Messages d'attente, estimation du temps, priorisation des demandes urgentes et mesure de la satisfaction.

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 :

  1. L'admission : quand une conversation entre en file
  2. La priorisation : qui passe avant qui
  3. La communication : tenir le client informé de son attente
  4. L'affectation : matcher chaque conversation avec le bon agent
  5. Le monitoring : surveiller et optimiser en temps réel
  6. 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.

#whatsapp-business-api-guide#automatisation-whatsapp-flows#chatbot-whatsapp-guide
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.

🚀

Prêt à passer à l'action ?

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

Démarrer l'essai gratuit