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_iddu numéro expéditeur - Template Utility approuvé avec boutons
QUICK_REPLY(confirmation/annulation) - Endpoint webhook configuré pour recevoir les
button_replyet 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.

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 gratuitArticles similaires
WhatsApp pour la confirmation de commande via l'API : tutoriel pour les éditeurs
Tutoriel pas à pas pour envoyer une confirmation de commande WhatsApp via l'API Business : appel REST, template Utility, variables et gestion des statuts.
WhatsApp pour le programme de fidélité via l'API : tutoriel pour les éditeurs
Tutoriel fidélité WhatsApp API : créer un template de points, configurer les webhooks, gérer l'opt-in marketing et envoyer des offres membres via l'API REST.
WhatsApp pour le rappel de rendez-vous via l'API : cas pratique pour les éditeurs
Cas pratique rappel rendez-vous WhatsApp via l'API Business : architecture, templates, gestion des confirmations et intégration pour éditeurs SaaS.