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

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.

Un taux d'abandon de flow élevé est l'un des problèmes les plus coûteux d'un chatbot WhatsApp. Chaque flow abandonné représente un client qui n'a pas été servi, un lead qui n'a pas été qualifié, une commande qui n't pas été passée. Pourtant, la plupart des équipes ne mesurent pas précisément le taux d'abandon ni l'étape où il se produit — et donc ne peuvent pas le corriger.

Ce guide vous explique comment diagnostiquer et réduire significativement vos taux d'abandon.

Comprendre les types d'abandon

Tous les abandons ne sont pas créés égaux. Il faut distinguer :

Abandon par friction : l'utilisateur voulait terminer mais a rencontré un obstacle (question confuse, étape trop longue, bug).

Abandon par désintérêt : l'utilisateur a obtenu l'information dont il avait besoin à mi-chemin (souvent légitime — le flow est peut-être trop long).

Abandon par interruption : l'utilisateur a été interrompu et n'est pas revenu (externe au bot, peu actionnable).

Abandon par méfiance : l'utilisateur a refusé de continuer à cause d'une demande d'information sensible (numéro de carte, pièce d'identité).

// Classification des abandons par pattern
function classifyAbandon(conversation) {
  const lastMessage = conversation.last_message;
  const abandonStep = conversation.last_completed_step;
  const timeSinceLastMessage = Date.now() - new Date(conversation.last_message_at).getTime();
  
  // Abandon immédiat après une demande d'info sensible
  if (abandonStep?.requires_sensitive_data) {
    return { type: 'distrust', actionable: true, fix: 'add_trust_signals' };
  }
  
  // Abandon après un message de bot long (> 300 caractères)
  if (conversation.last_bot_message?.length > 300) {
    return { type: 'friction_long_message', actionable: true, fix: 'shorten_message' };
  }
  
  // Abandon après step 1 (avant même de commencer)
  if (conversation.completed_steps === 0) {
    return { type: 'wrong_entry_point', actionable: true, fix: 'review_welcome_message' };
  }
  
  // Abandon rapide (< 2 minutes sur le flow entier)
  if (timeSinceLastMessage < 120000 && conversation.completed_steps > 2) {
    return { type: 'friction', actionable: true, fix: 'simplify_problematic_step' };
  }
  
  return { type: 'external_interruption', actionable: false };
}

Mesurer précisément l'abandon par étape

La clé est de mesurer l'abandon à chaque étape spécifique, pas seulement le taux global.

// Analyse granulaire des abandons par étape
async function analyzeFlowFunnel(flowId, period) {
  const sessions = await db.getFlowSessions(flowId, period);
  
  // Toutes les étapes définies dans le flow
  const flowDefinition = await db.getFlowDefinition(flowId);
  const steps = flowDefinition.steps;
  
  const funnel = steps.map(step => {
    const startedStep = sessions.filter(s => 
      s.completed_steps.includes(step.id) || s.current_step === step.id
    ).length;
    
    const completedStep = sessions.filter(s => 
      s.completed_steps.includes(step.id)
    ).length;
    
    const abandonedOnStep = sessions.filter(s => 
      s.current_step === step.id && s.status === 'abandoned'
    ).length;
    
    return {
      step_id: step.id,
      step_name: step.name,
      started: startedStep,
      completed: completedStep,
      abandoned_here: abandonedOnStep,
      step_completion_rate: completedStep / (startedStep || 1),
      drop_off_pct: ((abandonedOnStep / (startedStep || 1)) * 100).toFixed(1)
    };
  });
  
  // Identifier les étapes les plus problématiques
  const problemSteps = funnel
    .filter(s => parseFloat(s.drop_off_pct) > 20) // Seuil d'alerte : >20% abandon
    .sort((a, b) => b.abandoned_here - a.abandoned_here);
  
  return {
    flow_id: flowId,
    period,
    overall_completion: funnel[funnel.length - 1]?.completed / sessions.length,
    funnel,
    problem_steps: problemSteps,
    total_abandoned: sessions.filter(s => s.status === 'abandoned').length,
    total_started: sessions.length
  };
}

Les 7 causes d'abandon les plus fréquentes et leurs corrections

Cause 1 : Message trop long ou trop complexe

// Avant : message trop long
const tooLongMessage = `
Pour votre commande, nous avons besoin de plusieurs informations importantes. 
D'abord, nous allons vous demander votre adresse complète incluant le quartier, 
la rue, le numéro, et tout point de repère utile pour notre livreur. 
Ensuite, nous vous demanderons de confirmer votre numéro de téléphone pour 
le suivi et la livraison. Enfin, vous choisirez votre mode de paiement parmi 
Wave, Orange Money ou paiement à la livraison. Prêt à commencer ?
`;

// Après : message court avec bouton d'action
const optimizedMessage = {
  text: "📦 Pour livrer votre commande, j'ai besoin de 3 infos rapides.\n\nÇa prend 2 minutes ! Prêt ?",
  buttons: [{ id: 'start_order', title: '✅ C\'est parti !' }]
};

Cause 2 : Trop d'étapes avant la valeur

Appliquez le principe "valeur d'abord". Ne demandez pas 5 questions avant de montrer le résultat.

// Principe : donner de la valeur avant de demander des infos
const progressiveFlow = {
  steps: [
    { id: 'show_value_first', type: 'catalogue_preview', message: 'Voici nos offres du moment...' },
    { id: 'interest_confirmation', type: 'button', message: 'Cela vous intéresse ?' },
    // Seulement APRÈS confirmation d'intérêt, demander les infos
    { id: 'collect_info', type: 'form', fields: ['name', 'phone', 'address'] }
  ]
};

Cause 3 : Demande d'information trop tôt (méfiance)

// Mauvaise pratique : demander le numéro de carte dès le début
const badFlow = {
  step2: { message: "Entrez votre numéro de carte Wave pour pré-autoriser..." }
  // → 60-70% d'abandon sur cette étape
};

// Bonne pratique : demander au dernier moment, avec context de confiance
const goodFlow = {
  step_penultimate: { 
    message: "✅ Votre commande est prête !\n\n🔒 Paiement sécurisé via Wave\n\nVotre numéro Wave ?"
    // → Demander APRÈS que le client a investi du temps dans le flow
  }
};

Cause 4 : Absence de progress indicator

Les utilisateurs abandonnent quand ils ne savent pas combien d'étapes il reste.

// Ajouter un indicateur de progression
function addProgressIndicator(stepNumber, totalSteps, message) {
  const dots = '●'.repeat(stepNumber) + '○'.repeat(totalSteps - stepNumber);
  return `${dots} Étape ${stepNumber}/${totalSteps}\n\n${message}`;
}

// Exemple : "●●○○ Étape 2/4\n\nQuelle est votre adresse de livraison ?"

Cause 5 : Message d'erreur qui décourage

// Mauvais : message d'erreur frustrant
const badError = "Je n'ai pas compris votre réponse. Veuillez réessayer.";

// Bon : message d'erreur avec aide concrète
const goodError = {
  text: "Je n'ai pas bien compris 😅 Pouvez-vous choisir parmi ces options ?",
  buttons: [
    { id: 'retry_a', title: 'Option A' },
    { id: 'retry_b', title: 'Option B' },
    { id: 'agent', title: '💬 Aide humaine' }
  ]
};

Relance des flows abandonnés

// Relancer les utilisateurs qui ont abandonné à mi-parcours
async function reengageAbandonedFlows() {
  const abandonedSessions = await db.getAbandonedSessions({
    min_completed_steps: 2, // A commencé mais pas terminé
    hours_since_abandon: { min: 2, max: 24 }, // Entre 2h et 24h après abandon
    not_reengaged: true // Pas déjà relancé
  });
  
  for (const session of abandonedSessions) {
    const stepName = session.last_completed_step_name;
    
    await whatsappAPI.sendMessage(session.phone, {
      text: `Bonjour ! Vous étiez en train de ${getFlowActionName(session.flow_id)} et vous vous êtes arrêté(e) à mi-chemin.\n\nReprenez là où vous en étiez ?`,
      buttons: [
        { id: `resume:${session.id}`, title: '▶️ Reprendre' },
        { id: `restart:${session.flow_id}`, title: '🔄 Recommencer' },
        { id: 'dismiss', title: '❌ Non merci' }
      ]
    });
    
    await db.markAsReengaged(session.id);
  }
}

Pour approfondir, consultez notre guide sur le taux de résolution chatbot WhatsApp et notre article sur les KPIs chatbot WhatsApp.

FAQ

Q: Quel est un taux d'abandon de flow acceptable pour un bot WhatsApp en Afrique ?

A: Cela dépend du type de flow. Un flow de qualification en 3 étapes devrait avoir moins de 30% d'abandon. Un flow de commande en 5-6 étapes, moins de 40% d'abandon (ce niveau est normal car l'intention d'achat filtre naturellement). Un flow FAQ simple, moins de 10% d'abandon. Si vous êtes significativement au-dessus de ces seuils, il y a des améliorations concrètes à apporter.

Q: Faut-il toujours raccourcir les flows pour réduire l'abandon ?

A: Pas nécessairement. Un flow plus long qui donne plus de valeur à chaque étape peut avoir un meilleur taux de complétion qu'un flow court mais peu clair. L'objectif est d'optimiser le rapport valeur perçue / effort demandé. Raccourcir un flow en supprimant des étapes utiles peut améliorer le taux de complétion mais dégrader la qualité des leads ou des commandes collectées.

Q: Comment distinguer un abandon "normal" d'un abandon "problématique" ?

A: Un abandon est normal quand l'utilisateur a obtenu ce dont il avait besoin avant la fin du flow — par exemple, quelqu'un qui demande vos horaires et quitte après avoir reçu la réponse. Un abandon est problématique quand l'utilisateur revient sur le même flow et abandonne au même endroit, ou quand l'abandon est suivi d'un message négatif ou d'une demande d'escalade vers un agent humain.

Q: Les relances des flows abandonnés ne risquent-elles pas d'agacer les utilisateurs ?

A: Si mal configurées, oui. Bonnes pratiques : (1) ne relancer qu'une seule fois par session abandonnée, (2) attendre au minimum 2 heures avant de relancer, (3) proposer clairement l'option "non merci", (4) ne pas relancer si l'utilisateur a eu d'autres interactions récentes. Une relance bien dosée récupère 15-25% des sessions abandonnées sans générer de plaintes.


Réduire l'abandon de flows est l'une des optimisations les plus rentables d'un chatbot WhatsApp — chaque point de taux de complétion gagné se traduit directement en plus de leads, de commandes ou de clients servis.

Analysez les abandons de vos flows avec Whakup Analytics et identifiez les étapes à optimiser en priorité.

#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