Aller au contenu principal

WhatsApp pour le rappel de rendez-vous via l'API : tutoriel pour les éditeurs

Tutoriel pas à pas pour envoyer des rappels de rendez-vous WhatsApp via l'API Business : template interactif, appel REST, gestion des confirmations et annulations.

Mettre en place un rappel de rendez-vous WhatsApp via l'API demande quatre composants : un template avec boutons interactifs approuvé par Meta, un planificateur qui déclenche l'envoi au bon moment, un appel REST vers l'API, et un webhook pour traiter les réponses du client (confirmation ou annulation). Ce tutoriel détaille chaque étape.

Prérequis

Avant de commencer :

  • WABA actif avec un numéro dédié onboardé via l'embedded signup Whakup
  • Token d'accès Whakup et phone_number_id du numéro expéditeur
  • Template Utility approuvé avec boutons QUICK_REPLY (confirmation/annulation)
  • Endpoint webhook configuré pour recevoir les button_reply et les messages libres
  • Planificateur de tâches (cron, Celery, Sidekiq, BullMQ...) pour déclencher les envois

La configuration du webhook est détaillée dans notre guide webhooks WhatsApp API configuration.

Étape 1 : créer le template avec boutons interactifs

Soumettez ce template via l'interface Whakup ou l'API de gestion des templates :

Nom : appointment_reminder_confirm Catégorie : UTILITY Langue : fr

Corps :

Bonjour {{1}},

Votre rendez-vous est prévu le {{2}} à {{3}}.
📍 {{4}}

Confirmez-vous votre présence ?

Boutons :

"buttons": [
  {
    "type": "QUICK_REPLY",
    "text": "Confirmer ✓"
  },
  {
    "type": "QUICK_REPLY",
    "text": "Annuler"
  }
]

Attendez le statut APPROVED avant de poursuivre. Pour les templates bien structurés en catégorie Utility, l'approbation prend généralement moins d'une heure. Les règles de catégorisation des templates vous aident à éviter les rejets.

Étape 2 : planifier l'envoi du rappel

Dans votre logique métier, quand un rendez-vous est créé, planifiez une tâche asynchrone pour envoyer le rappel 24h avant :

from datetime import timedelta

def on_appointment_created(appointment):
    # Planifier le rappel 24h avant
    reminder_time = appointment.datetime - timedelta(hours=24)
    
    schedule_task(
        func=send_whatsapp_reminder,
        run_at=reminder_time,
        args={
            "appointment_id": appointment.id,
            "customer_phone": appointment.customer.phone,
            "customer_name": appointment.customer.first_name,
            "date": appointment.datetime.strftime("%d/%m/%Y"),
            "time": appointment.datetime.strftime("%H:%M"),
            "location": appointment.location
        }
    )

Si le rendez-vous est modifié ou annulé avant la date prévue, annulez la tâche planifiée pour éviter d'envoyer un rappel pour un créneau qui n'existe plus.

Étape 3 : appel API pour envoyer le rappel

Endpoint : POST https://api.whakup.com/v1/messages

Body :

{
  "messaging_product": "whatsapp",
  "to": "33612345678",
  "type": "template",
  "template": {
    "name": "appointment_reminder_confirm",
    "language": { "code": "fr" },
    "components": [
      {
        "type": "body",
        "parameters": [
          { "type": "text", "text": "Sophie" },
          { "type": "text", "text": "15/08/2026" },
          { "type": "text", "text": "10h00" },
          { "type": "text", "text": "12 rue de la Paix, Paris 75002" }
        ]
      }
    ]
  }
}

Réponse :

{
  "messages": [{ "id": "wamid.XXXXXXXXXXXXX" }]
}

Stockez le wamid et associez-le à l'appointment_id dans votre table de tracking.

Étape 4 : traiter les réponses du client

Votre webhook reçoit deux types d'événements quand le client interagit avec le message :

Cas 1 : le client appuie sur "Confirmer"

{
  "messages": [{
    "type": "interactive",
    "interactive": {
      "type": "button_reply",
      "button_reply": {
        "id": "btn_confirm",
        "title": "Confirmer ✓"
      }
    },
    "from": "33612345678"
  }]
}

Action : mettre à jour le statut du rendez-vous à confirmé, notifier le professionnel, envoyer un accusé de réception libre (dans la fenêtre 24h, sans frais de template) :

"Parfait Sophie, votre présence est confirmée pour demain à 10h. À bientôt !"

Cas 2 : le client appuie sur "Annuler"

{
  "interactive": {
    "button_reply": {
      "id": "btn_cancel",
      "title": "Annuler"
    }
  }
}

Action : déclencher le flux d'annulation. Dans la même fenêtre de 24h (ouverte par la réponse du client), envoyez un message libre pour proposer une alternative :

def handle_cancellation(appointment_id, customer_phone):
    # Mettre à jour le statut
    update_appointment_status(appointment_id, "cancellation_requested")
    
    # Notifier le professionnel
    notify_professional(appointment_id, "Annulation demandée via WhatsApp")
    
    # Proposer un créneau alternatif (message libre, fenêtre 24h)
    send_free_message(
        to=customer_phone,
        text="Pas de problème. Souhaitez-vous prendre un autre rendez-vous ? "
             "Choisissez un créneau ici : https://reservation.exemple.com/rebook"
    )

Cas 3 : le client répond librement

Si le client tape "Je serai en retard de 15 minutes" plutôt que d'appuyer sur un bouton, votre webhook reçoit un text message. Traitez-le comme une conversation ouverte et routez vers un agent ou un bot de gestion.

Étape 5 : gérer les cas d'erreur

Code erreur Signification Action recommandée
131047 Numéro non joignable WhatsApp Fallback SMS
132000 Template suspendu Fallback SMS + vérifier le score qualité
130429 Rate limit dépassé Retry avec backoff exponentiel
100 Paramètre invalide Logger, vérifier le format E.164 du numéro

Pour le fallback SMS, déclenchez l'envoi dès réception de l'erreur webhook. Ne laissez pas un client sans rappel parce que WhatsApp a renvoyé une erreur.

FAQ

Peut-on envoyer le rappel depuis le numéro personnel du professionnel ?

Non. L'API WhatsApp Business fonctionne uniquement avec des numéros enregistrés dans un WABA. Le numéro doit être un numéro dédié (fixe ou mobile non utilisé sur WhatsApp personnel). Consulter notre guide sur le choix d'un numéro dédié WhatsApp Business API pour les critères de sélection.

Si le client a déjà confirmé sur J-2, faut-il quand même envoyer le rappel J-1 ?

C'est un choix produit. Certaines plateformes suppriment le rappel J-1 si la confirmation est déjà reçue (moins de messages = meilleure expérience). D'autres envoient systématiquement le rappel J-1 mais sans les boutons (juste les informations pratiques). Le deuxième rappel sans boutons est un nouveau template à faire approuver par Meta.

Les boutons QUICK_REPLY fonctionnent-ils sur tous les appareils ?

Les boutons interactifs WhatsApp sont supportés sur toutes les versions récentes de l'application (iOS et Android). Sur les versions très anciennes de WhatsApp ou via certains agrégateurs de messagerie tiers, les boutons peuvent apparaître comme du texte simple. C'est marginal en pratique.

Peut-on utiliser ce même flux pour des rappels de réunions B2B (pas seulement des rendez-vous grand public) ?

Oui. Le flux est identique. En B2B, le template peut inclure un lien vers la salle de réunion virtuelle (Zoom, Teams, Meet) en bouton URL dynamique, ce qui est particulièrement utile. L'API WhatsApp Business Whakup supporte ce cas d'usage sans configuration spécifique.


Pour déployer cette intégration en production pour vos clients, Whakup vous fournit l'accès API, les outils d'onboarding des numéros et le support technique éditeur. Accédez à la page API WhatsApp Whakup pour démarrer.

#intégration whatsapp#rappel rendez-vous whatsapp#tutoriel
Stéphane Haouzi
Stéphane HaouziHead of Growth

Head of Growth chez Whakup, Stéphane pilote la stratégie d'acquisition et les partenariats en Afrique francophone. Expert en marketing digital et expansion marché.

🚀

Prêt à passer à l'action ?

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

Démarrer l'essai gratuit