Je suis une salle de sport

Oui : abonnement qui expire avec bouton Renouveler, bienvenue à l'entrée avec le numéro de séance, cours annulé et réservation de cours avec places restantes, avec l'API.

Je suis une salle de sport

Astuce
Oui : abonnement qui expire avec bouton Renouveler, bienvenue à l'entrée avec le numéro de séance, cours annulé et réservation de cours avec places restantes, avec l'API.

Ce que vous pouvez automatiser

BesoinCommentRecette
Abonnement qui expire, bouton RenouvelerTemplate abonnement_expire_bientot avec le bouton de réponse rapide « Renouveler » ; le clic ouvre une conversation de 24 h.Alerte avec bouton · Boutons de template
Bienvenue à l'entrée, avec le numéro de séanceLe passage au badge ne vaut pas message du client : template bienvenue_entree_salle hors 24 h, texte libre dans les 24 h.Notification d'arrivée sur place · Reconnaître le client par son numéro
Cours annuléTemplate cours_annule à chaque inscrit, avec invitation à réserver un autre cours.Écrire le premier message
Réserver un cours avec places restantesDans les 24 h : liste des cours, la description de chaque ligne affiche « 6 places restantes », puis confirmation par boutons.Créneaux et places restantes · Menu en liste · Confirmer, annuler, modifier
Formules et tarifsFAQ puis conseiller : le coach reprend la conversation.FAQ, IA, humain

Hors des 24 h qui suivent le dernier message du client, seul un template approuvé par Meta peut partir. Dans les 24 h, vous composez librement : boutons (3 de 20 caractères au plus), liste (10 lignes de 24 caractères au plus) ou texte libre.

Les templates à créer

NomCatégorieTexteBoutons
abonnement_expire_bientotUTILITYBonjour {{1}}, votre abonnement {{2}} expire dans {{3}} jours, le {{4}}. Vous pouvez le renouveler à l'accueil ou en touchant le bouton ci-dessous.réponse rapide : « Renouveler »
bienvenue_entree_salleUTILITYBonjour {{1}}, bienvenue chez FitZone Exemple. C'est votre séance n° {{2}} ce mois-ci. Votre abonnement est valable jusqu'au {{3}}. Bon entraînement !—
cours_annuleUTILITYBonjour {{1}}, le cours de {{2}} prévu {{3}} à {{4}} est annulé. Votre place est libérée : vous pouvez réserver un autre cours en touchant le bouton ci-dessous.réponse rapide : « Réserver un cours »

Exemple complet

Alerte d'expiration avec le bouton « Renouveler ». Création, une seule fois.

curl

curl -X POST "https://wa-api.geskap.com/v1/templates" \
  -H "Authorization: Bearer $GESKAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "abonnement_expire_bientot",
  "language": "fr",
  "category": "UTILITY",
  "body_text": "Bonjour {{1}}, votre abonnement {{2}} expire dans {{3}} jours, le {{4}}. Vous pouvez le renouveler à l'\''accueil ou en touchant le bouton ci-dessous.",
  "example_values": ["Awa", "Mensuel", "3", "14 novembre"],
  "buttons": [{ "kind": "quick_reply", "text": "Renouveler" }]
}'

Node.js

const res = await fetch("https://wa-api.geskap.com/v1/templates", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GESKAP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "name": "abonnement_expire_bientot",
    "language": "fr",
    "category": "UTILITY",
    "body_text": "Bonjour {{1}}, votre abonnement {{2}} expire dans {{3}} jours, le {{4}}. Vous pouvez le renouveler à l'accueil ou en touchant le bouton ci-dessous.",
    "example_values": ["Awa", "Mensuel", "3", "14 novembre"],
    "buttons": [{ "kind": "quick_reply", "text": "Renouveler" }]
  }),
});
console.log(res.status, await res.json());

PHP

$ch = curl_init("https://wa-api.geskap.com/v1/templates");
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("GESKAP_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "name" => "abonnement_expire_bientot",
    "language" => "fr",
    "category" => "UTILITY",
    "body_text" => "Bonjour {{1}}, votre abonnement {{2}} expire dans {{3}} jours, le {{4}}. Vous pouvez le renouveler à l'accueil ou en touchant le bouton ci-dessous.",
    "example_values" => ["Awa", "Mensuel", "3", "14 novembre"],
    "buttons" => [["kind" => "quick_reply", "text" => "Renouveler"]],
  ]),
]);
$res = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $res;

Python

import os, requests

res = requests.request(
    "POST",
    "https://wa-api.geskap.com/v1/templates",
    headers={"Authorization": f"Bearer {os.environ['GESKAP_API_KEY']}"},
    json={
        "name": "abonnement_expire_bientot",
        "language": "fr",
        "category": "UTILITY",
        "body_text": "Bonjour {{1}}, votre abonnement {{2}} expire dans {{3}} jours, le {{4}}. Vous pouvez le renouveler à l'accueil ou en touchant le bouton ci-dessous.",
        "example_values": ["Awa", "Mensuel", "3", "14 novembre"],
        "buttons": [{"kind": "quick_reply", "text": "Renouveler"}],
    },
    timeout=15,
)
print(res.status_code, res.json())

Envoi trois jours avant l'échéance, par exemple depuis une tâche planifiée qui lit vos abonnements.

curl

curl -X POST "https://wa-api.geskap.com/v1/messages" \
  -H "Authorization: Bearer $GESKAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+237690000013",
  "template": {
    "name": "abonnement_expire_bientot",
    "language": "fr",
    "variables": ["Awa", "Mensuel", "3", "14 novembre"]
  }
}'

Node.js

const res = await fetch("https://wa-api.geskap.com/v1/messages", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.GESKAP_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "to": "+237690000013",
    "template": {
      "name": "abonnement_expire_bientot",
      "language": "fr",
      "variables": ["Awa", "Mensuel", "3", "14 novembre"]
    }
  }),
});
console.log(res.status, await res.json());

PHP

$ch = curl_init("https://wa-api.geskap.com/v1/messages");
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer " . getenv("GESKAP_API_KEY"),
    "Content-Type: application/json",
  ],
  CURLOPT_POSTFIELDS => json_encode([
    "to" => "+237690000013",
    "template" => [
      "name" => "abonnement_expire_bientot",
      "language" => "fr",
      "variables" => ["Awa", "Mensuel", "3", "14 novembre"],
    ],
  ]),
]);
$res = curl_exec($ch);
echo curl_getinfo($ch, CURLINFO_HTTP_CODE), " ", $res;

Python

import os, requests

res = requests.request(
    "POST",
    "https://wa-api.geskap.com/v1/messages",
    headers={"Authorization": f"Bearer {os.environ['GESKAP_API_KEY']}"},
    json={
        "to": "+237690000013",
        "template": {
            "name": "abonnement_expire_bientot",
            "language": "fr",
            "variables": ["Awa", "Mensuel", "3", "14 novembre"],
        },
    },
    timeout=15,
)
print(res.status_code, res.json())

Conversation

Membre  : (touche « Renouveler » sous l'alerte)
Webhook : message.inbound  type=text  text="Renouveler"  button_id="Renouveler"
Salle   : Quelle formule ?  [ Mensuel ]  [ Trimestriel ]  [ Annuel ]
Membre  : (touche « Mensuel »)
Salle   : Mensuel, 25 000 F. Réglez à l'accueil ou par Mobile Money, nous activons ensuite votre abonnement.
Membre  : Je voudrais réserver un cours
Salle   : Quel cours ?  (liste : Zumba · 6 places restantes, Yoga · 2 places restantes…)
Membre  : (choisit « Zumba »)
Salle   : Place réservée. Arrivez 10 minutes avant.  [ Planning ]  [ Menu ]

Le clic sur un bouton de template revient comme décrit dans Boutons de template ; la liste des cours suit Créneaux et places restantes.

Attention
Piège : Un bouton de template « Renouveler » est une réponse rapide, pas un lien : il n'ouvre aucune page. C'est votre webhook qui répond (dans les 24 h qui suivent le clic) avec les formules. Et on ne mélange pas, dans un même template, un bouton lien et un bouton de réponse rapide.
Attention
Piège : Un rappel d'échéance reste UTILITY tant qu'il informe. Dès que vous ajoutez « -20 % si vous renouvelez », il devient MARKETING, bloqué par défaut jusqu'à activation par l'administrateur du compte.

Preuve — vérifié dans le code de l'API : api_schemas.py ; appliqué par la démo WhatsApp : sport.