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

WhatsApp analytics et segmentation avancée : personnaliser à grande échelle

Utiliser les analytics WhatsApp pour segmenter finement votre audience et personnaliser les interactions à grande échelle. RFM, comportements, géographie et préférences linguistiques.

La puissance réelle d'un chatbot WhatsApp n'est pas de répondre aux questions — c'est de personnaliser chaque interaction selon qui est l'utilisateur, ce qu'il a fait par le passé, et ce dont il a probablement besoin maintenant. La segmentation avancée basée sur les analytics WhatsApp transforme votre bot d'un répondeur générique en un conseiller qui semble vous connaître.

Ce guide présente les méthodes de segmentation les plus efficaces appliquées au contexte africain.

Les 4 dimensions de segmentation WhatsApp

Dimension 1 : Comportementale (ce que l'utilisateur fait)

// Segmentation comportementale basée sur les interactions bot
const behavioralSegmentation = {
  
  classifyUser: async (phone) => {
    const history = await db.getUserConversationHistory(phone, { days: 90 });
    
    const segments = [];
    
    // Segment "Power User" : interagit fréquemment avec le bot
    if (history.conversation_count >= 10 && history.avg_session_depth >= 3) {
      segments.push('power_user');
    }
    
    // Segment "FAQ Only" : ne consulte que la FAQ, jamais de commandes
    if (history.intent_distribution.faq > 0.80) {
      segments.push('faq_only');
    }
    
    // Segment "Acheteur" : a déjà complété au moins 1 commande
    if (history.completed_orders > 0) {
      segments.push('buyer');
      if (history.completed_orders >= 3) segments.push('repeat_buyer');
    }
    
    // Segment "Abandonniste" : commence souvent des flows sans terminer
    if (history.avg_flow_completion_rate < 0.40) {
      segments.push('high_abandoner');
    }
    
    // Segment "Récent" : premier contact dans les 7 derniers jours
    if (history.first_contact_days_ago <= 7) {
      segments.push('new_user');
    }
    
    return segments;
  }
};

Dimension 2 : RFM (Récence, Fréquence, Montant)

Le modèle RFM, classique en marketing, s'adapte très bien aux interactions WhatsApp.

// Calcul du score RFM pour un utilisateur WhatsApp
async function calculateRFMScore(phone) {
  const data = await db.getUserMetrics(phone);
  
  // Récence : jours depuis la dernière interaction
  const R = data.days_since_last_contact <= 7 ? 5
           : data.days_since_last_contact <= 30 ? 4
           : data.days_since_last_contact <= 60 ? 3
           : data.days_since_last_contact <= 90 ? 2 : 1;
  
  // Fréquence : nombre d'interactions sur 90 jours
  const F = data.interactions_90d >= 20 ? 5
           : data.interactions_90d >= 10 ? 4
           : data.interactions_90d >= 5 ? 3
           : data.interactions_90d >= 2 ? 2 : 1;
  
  // Montant : valeur des commandes (ou engagement pour les services)
  const M = data.total_order_value_fcfa >= 500000 ? 5
           : data.total_order_value_fcfa >= 200000 ? 4
           : data.total_order_value_fcfa >= 50000 ? 3
           : data.total_order_value_fcfa >= 10000 ? 2 : 1;
  
  const rfmScore = `${R}${F}${M}`;
  
  // Segments RFM clés
  const rfmSegment = getRFMSegment(R, F, M);
  
  return { R, F, M, rfmScore, rfmSegment };
}

function getRFMSegment(R, F, M) {
  if (R >= 4 && F >= 4 && M >= 4) return 'champions'; // Vos meilleurs clients
  if (R >= 4 && F >= 3) return 'loyal_customers'; // Clients fidèles actifs
  if (R >= 4 && F <= 2) return 'new_promising'; // Nouveaux mais engagés
  if (R <= 2 && F >= 4) return 'at_risk'; // Anciennement actifs, en train de partir
  if (R <= 2 && M >= 4) return 'cant_lose'; // Gros acheteurs inactifs — priorité absolue
  if (R <= 1 && F <= 1) return 'lost'; // Churned
  return 'potential'; // Tous les autres
}

Dimension 3 : Géographique et linguistique

// Segmentation géo-linguistique pour l'Afrique
const geoLinguisticSegmentation = {
  
  detectProfile: async (phone, conversationHistory) => {
    const profile = {
      country: detectCountryFromPhone(phone), // CI, SN, MA, CM, etc.
      city_tier: null,
      language: null,
      dialect: null
    };
    
    // Détecter la ville depuis les messages (si mentionné)
    const locationMentions = extractLocationMentions(conversationHistory);
    if (locationMentions.length > 0) {
      profile.city_tier = classifyCityTier(locationMentions[0]);
    }
    
    // Détecter la langue depuis les messages
    const detectedLang = await langDetect(conversationHistory.map(m => m.text).join(' '));
    
    if (detectedLang === 'fr') {
      // Détecter les dialectes africains
      if (hasNouchiMarkers(conversationHistory)) {
        profile.language = 'fr';
        profile.dialect = 'nouchi'; // Côte d'Ivoire
      } else if (hasWolofMarkers(conversationHistory)) {
        profile.language = 'fr';
        profile.dialect = 'wolof_francais'; // Sénégal
      } else {
        profile.language = 'fr';
        profile.dialect = 'standard';
      }
    } else if (detectedLang === 'ar' || hasDarijaMarkers(conversationHistory)) {
      profile.language = 'fr_ar_darija';
      profile.dialect = 'darija'; // Maghreb
    }
    
    return profile;
  },
  
  // Message personnalisé selon profil linguistique
  getGreeting: (profile) => {
    const greetings = {
      'fr_nouchi': "Wesh, tu vas bien ? 🤙 Comment je peux t'aider ?",
      'fr_wolof_francais': "Bonjour ! Nanga def ? Comment puis-je vous aider ?",
      'fr_darija': "Salam ! كيف داير؟ Comment puis-je vous aider ?",
      'fr_standard': "Bonjour ! Comment puis-je vous aider ?"
    };
    const key = `fr_${profile.dialect}`;
    return greetings[key] || greetings['fr_standard'];
  }
};

Dimension 4 : Préférences et intérêts

// Inférer les intérêts depuis l'historique de conversations
async function inferUserInterests(phone) {
  const history = await db.getUserConversationHistory(phone, { days: 180 });
  
  const interests = {};
  
  // Analyser les catégories de produits consultés
  const productViews = history.filter(c => c.intent === 'product_view');
  for (const view of productViews) {
    const category = view.product_category;
    interests[category] = (interests[category] || 0) + 1;
  }
  
  // Analyser les FAQ consultées
  const faqTopics = history
    .filter(c => c.intent_category === 'faq')
    .map(c => c.faq_topic);
  
  // Inférer la sensibilité au prix
  const priceQuestions = faqTopics.filter(t => ['price', 'discount', 'promo'].includes(t));
  const priceSensitive = priceQuestions.length > 3;
  
  return {
    top_categories: Object.entries(interests).sort((a, b) => b[1] - a[1]).slice(0, 3).map(([cat]) => cat),
    price_sensitive: priceSensitive,
    preferred_contact_hour: getMostFrequentHour(history),
    preferred_payment: getMostUsedPayment(history)
  };
}

Utiliser la segmentation pour personnaliser les messages

// Personnalisation des messages basée sur les segments
async function getPersonalizedMessage(phone, messageType) {
  
  const [rfm, behavioral, geoLing, interests] = await Promise.all([
    calculateRFMScore(phone),
    behavioralSegmentation.classifyUser(phone),
    geoLinguisticSegmentation.detectProfile(phone, []),
    inferUserInterests(phone)
  ]);
  
  switch (messageType) {
    case 'welcome_back':
      if (rfm.rfmSegment === 'champions') {
        return `Bienvenue ! 🌟 En tant que client premium, voici votre accès prioritaire à nos nouvelles collections.`;
      }
      if (rfm.rfmSegment === 'at_risk') {
        return `Ça fait un moment ! 😊 Nous avons de nouvelles offres qui pourraient vous plaire. Voulez-vous voir ?`;
      }
      return `Bon retour ! Comment puis-je vous aider aujourd'hui ?`;
      
    case 'product_recommendation':
      const categories = interests.top_categories;
      if (categories.length > 0) {
        return `Basé sur vos achats précédents, voici nos nouveautés ${categories[0]} qui pourraient vous intéresser :`;
      }
      return `Voici nos meilleures ventes du moment :`;
  }
}

Pour approfondir, consultez notre guide sur la segmentation audience WhatsApp et notre article sur le reporting WhatsApp Marketing mensuel.

FAQ

Q: La segmentation RFM est-elle vraiment applicable aux PME africaines avec peu de données ?

A: La segmentation RFM nécessite un minimum de données historiques — au moins 3-6 mois d'interactions. Pour une PME avec 100-200 contacts WhatsApp actifs, le RFM complet est prématuré. Commencez par une segmentation simple : nouveaux contacts (< 30 jours), actifs (interaction dans les 30 derniers jours), inactifs (pas d'interaction depuis 60+ jours). La sophistication augmente avec le volume de données disponibles.

Q: Comment respecter la vie privée des utilisateurs tout en faisant de la segmentation avancée ?

A: La règle de base : ne collecter que les données nécessaires à la personnalisation, ne les garder que le temps utile, et ne jamais les partager. Stockez les numéros de téléphone sous forme hashée dans vos systèmes analytics. Mentionnez dans vos messages d'opt-in que vous personnalisez les communications. En Afrique, les réglementations RGPD-équivalentes (CDVP en Côte d'Ivoire, CNIL au Maroc) s'appliquent de plus en plus.

Q: Les utilisateurs africains réagissent-ils positivement à la personnalisation ou la trouvent-ils intrusive ?

A: La réception dépend du type de personnalisation. La personnalisation linguistique (parler nouchi avec un Ivoirien) est très appréciée. La personnalisation basée sur les achats précédents ("vous avez commandé X, voici Y qui va avec") est généralement bien perçue. La personnalisation trop précise qui révèle une surveillance ("je sais que vous regardez nos chaussures tous les jours") peut déclencher de la méfiance. Restez dans une personnalisation utile et transparente.

Q: Comment maintenir les segments à jour sans ralentir le système ?

A: Calculez les segments de façon asynchrone, pas en temps réel. Recalculez les scores RFM une fois par jour (batch nocturne). Mettez à jour les segments comportementaux à chaque fin de conversation (événement léger). Stockez les segments dans Redis avec un TTL de 24h pour un accès rapide pendant les interactions. Cette architecture donne accès aux segments en < 5ms sans impact sur le temps de réponse du bot.


La segmentation avancée transforme votre chatbot WhatsApp en un outil de marketing one-to-one à grande échelle. Plus vous connaissez vos utilisateurs africains, plus vos interactions sont pertinentes — et plus votre taux de conversion augmente.

Activez la segmentation avancée sur votre bot avec Whakup et commencez à personnaliser vos interactions WhatsApp à grande échelle.

#whatsapp-business-api-guide#automatisation-whatsapp-flows#chatbot-whatsapp-guide
Arthur Lyonnet
Arthur LyonnetCo-fondateur & CEO

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 gratuit