Aller au contenu principal

WhatsApp pour le programme de fidélité via l'API : cas pratique pour les éditeurs

Cas pratique fidélité WhatsApp API : architecture événementielle, templates points et récompenses, gestion des opt-ins et intégration multi-enseigne pour SaaS retail.

Un programme de fidélité qui communique par WhatsApp atteint ses membres là où ils sont déjà actifs, sans dépendre d'une app mobile propriétaire ni d'un e-mail ignoré. Ce cas pratique décrit l'intégration complète d'un canal WhatsApp dans une plateforme de fidélisation SaaS, de l'architecture technique jusqu'à la gestion des campagnes.


Contexte : une plateforme SaaS de fidélité multi-enseignes

Prenons le cas d'un éditeur SaaS qui fournit un moteur de fidélité à des enseignes retail (mode, beauté, restauration). La plateforme gère les points, les paliers membres, les récompenses et les campagnes. Elle envoie déjà des e-mails et des SMS. L'objectif : ajouter WhatsApp comme canal de notification sans refaire l'architecture existante.

Contraintes :

  • Plusieurs dizaines d'enseignes clientes, chacune avec sa propre base membres
  • Chaque enseigne doit apparaître avec son nom et son numéro sur WhatsApp (pas le numéro SaaS)
  • Volume : jusqu'à 500 000 messages/mois en pic (soldes, fêtes)
  • RGPD : données membres hébergées en UE

Architecture : événements, workers, webhooks

Le modèle événementiel

Le moteur de fidélité émet des événements internes à chaque action membre :

Événement Déclencheur Canal WhatsApp
points.credited Achat validé Template Utility (notification points)
reward.available Seuil de points atteint Template Utility ou Marketing
reward.expiring J-7 avant expiration Template Marketing
campaign.send Planification manuelle Template Marketing (campagne)
member.reply Message entrant membre Réponse session (gratuit Meta)

Ces événements sont publiés sur une file (dans ce cas pratique, une queue Redis simple suffit pour commencer). Un worker consomme la queue et appelle l'API Whakup.

Le worker d'envoi

import redis
import json
import requests

queue = redis.Redis()

def process_event(event):
    enseigne_id = event["enseigne_id"]
    membre = event["membre"]
    
    # Récupérer le phone_number_id de l'enseigne
    config = get_enseigne_config(enseigne_id)
    
    # Construire le payload selon le type d'événement
    if event["type"] == "points.credited":
        payload = build_points_template(membre, config, event["data"])
    elif event["type"] == "campaign.send":
        payload = build_campaign_template(membre, config, event["data"])
    
    # Envoyer via Whakup
    resp = requests.post(
        "https://api.whakup.com/v1/messages",
        headers={"Authorization": f"Bearer {config['api_key']}"},
        json=payload
    )
    
    # Stocker le message_id
    store_message_log(event["id"], resp.json().get("message_id"))

while True:
    _, raw = queue.blpop("whatsapp_notifications")
    event = json.loads(raw)
    process_event(event)

La table de configuration par enseigne

Chaque enseigne a son propre phone_number_id Whakup. La table de configuration ressemble à :

CREATE TABLE enseigne_whatsapp_config (
    enseigne_id UUID PRIMARY KEY,
    phone_number_id VARCHAR(50) NOT NULL,
    api_key_encrypted TEXT NOT NULL,
    templates JSONB,  -- {"points": "notification_points_v1", "campaign": "offre_membre_v2"}
    optout_marketing_count INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT NOW()
);

Gestion des enseignes : l'embedded signup en pratique

Avec plusieurs dizaines d'enseignes, il est exclu de connecter les numéros manuellement. Whakup fournit un flux d'embedded signup intégrable dans votre interface d'administration SaaS.

Le flux côté enseigne :

  1. L'enseigne accède à la section "Canaux" de votre plateforme
  2. Elle clique "Connecter WhatsApp"
  3. Une fenêtre iframe/popup Whakup s'ouvre
  4. L'enseigne s'authentifie avec son compte Facebook Business et sélectionne son numéro
  5. Le phone_number_id est automatiquement transmis à votre back-end via callback

En moins de 5 minutes, l'enseigne est prête à envoyer. Vous ne touchez à rien. Pas de certification Meta à gérer pour chaque client.

Pour comprendre la différence entre construire cette intégration soi-même et passer par un partenaire certifié, lisez le comparatif Build vs Buy pour l'API WhatsApp.


Campagnes : envoi en volume et gestion des paliers

Calculer le volume envoyable par numéro

Meta impose un palier de 1 000 conversations Marketing par 24h pour un numéro récent. Ce plafond monte à 10 000 puis 100 000 selon la qualité et le volume écoulé. Pour une enseigne avec 50 000 membres actifs, il faut anticiper la montée en puissance sur 2 à 3 semaines avant une campagne de soldes.

Recommandation pratique : commencez à envoyer 2 semaines avant la campagne principale (petits volumes de notifications utility) pour "chauffer" le numéro.

Batching et rate limiting

import time

def send_campaign_batch(membres, template_name, enseigne_config):
    batch_size = 100
    delay_between_batches = 1  # seconde
    
    for i in range(0, len(membres), batch_size):
        batch = membres[i:i+batch_size]
        for membre in batch:
            if not membre.get("optout_whatsapp_marketing"):
                send_message(membre, template_name, enseigne_config)
        
        time.sleep(delay_between_batches)

Coût d'une campagne marketing

Pour une campagne vers 10 000 membres en France (numéros FR) :

  • Frais Meta : 10 000 × 0,0712 € = 712 €
  • Frais Whakup : 10 000 × 0,0088 € = 88 €
  • Total : ~800 € pour 10 000 membres

À mettre en regard du taux de conversion attendu et du panier moyen. Pour les détails tarifaires complets, consultez l'article sur les prix de l'API WhatsApp Business en 2026.


Webhook : traitement des réponses membres

Le webhook Whakup reçoit les statuts et les messages entrants. Voici le traitement des cas principaux dans le contexte fidélité :

@app.route("/webhook", methods=["POST"])
def handle_webhook():
    data = request.json
    
    if data["type"] == "button":
        handle = data["button"]["payload"]
        sender = data["from"]
        
        if handle == "optout_marketing":
            update_member_optout(sender, "marketing")
        elif handle.startswith("redeem_"):
            reward_id = handle.split("_")[1]
            process_reward_redemption(sender, reward_id)
    
    elif data["type"] == "message":
        # Réponse texte libre : lancer un mini-chatbot
        handle_free_text(data["from"], data["text"]["body"])
    
    return "", 200

L'échange de récompenses via bouton WhatsApp est un cas d'usage à fort impact : le membre peut convertir ses points en bon de réduction directement depuis le message, sans connexion à une app ou à un site.


FAQ

Comment gérer les membres qui ont le même numéro dans deux enseignes différentes ?

Chaque enseigne a son propre numéro expéditeur. Un même consommateur peut recevoir des messages de plusieurs enseignes sur son WhatsApp. Chaque conversation est distincte côté WhatsApp. Il n'y a pas de conflit, mais assurez-vous que chaque enseigne gère son propre opt-in indépendamment.

Comment mesurer le ROI des notifications WhatsApp fidélité ?

Trackez les événements clés : messages envoyés, messages lus (statut read via webhook), clics sur boutons URL (via paramètre UTM dans l'URL), et conversions côté plateforme. La corrélation entre message_idread → achat dans les 48h vous donne un taux de conversion directement attribuable.

Peut-on envoyer des bons de réduction dans un template WhatsApp ?

Oui, via un bouton URL ou un code texte dans le corps du template. Attention : si le message contient une offre promotionnelle, il doit être catégorisé MARKETING, même si le membre a déjà des points. La catégorie est définie par le contenu, pas par la relation client.

Que se passe-t-il si le numéro d'une enseigne est suspendu par Meta ?

La suspension (rare) survient en cas de taux de spam élevé ou de violation des règles Meta. Whakup alertera via le dashboard. Les envois échoueront avec un code d'erreur spécifique dans les webhooks. La solution préventive est de maintenir une qualité d'opt-in élevée et de ne pas envoyer à des membres inactifs depuis plus de 6 mois sans re-consentement.


Conclusion

Ce cas pratique montre qu'un éditeur SaaS peut brancher WhatsApp sur son moteur de fidélité en quelques semaines, avec une architecture événementielle claire et l'API Whakup pour gérer le multi-enseigne. L'embedded signup supprime le principal frein opérationnel : intégrer chaque nouveau client.

Whakup fournit l'API REST, le multi-numéros, la marque blanche et l'hébergement EU. Pour démarrer, consultez la page API WhatsApp de Whakup.

#intégration whatsapp#fidélité whatsapp#cas pratique
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