Oui : « poste prêt », « 10 minutes restantes » avec bouton Prolonger 1 h, points fidélité après la session et rappel de tournoi, avec l'API.
Astuce
Oui : « poste prêt », « 10 minutes restantes » avec bouton Prolonger 1 h, points fidélité après la session et rappel de tournoi, avec l'API.
| Besoin | Comment | Recette |
|---|---|---|
| Poste prêt | Si le joueur a réservé par WhatsApp il y a moins de 24 h : texte libre. Sinon : template poste_pret. | Répondre en texte libre · Notification d'arrivée sur place |
| 10 minutes restantes, bouton Prolonger 1 h | Template dix_minutes_restantes avec le bouton « Prolonger 1 h » ; dans les 24 h, mêmes boutons en message libre. | Boutons de template · Boutons de réponse rapide · Récupérer le clic |
| Points fidélité après la session | Template points_fidelite_session à la fin de la session ; le solde de points se consulte en texte libre ensuite. | Répondre en texte libre · Reconnaître le client par son numéro |
| Tournoi : inscription et rappel | Inscription dans les 24 h par liste des tournois puis formulaire (pseudo). Rappel aux inscrits : template rappel_tournoi. | Menu en liste · Formulaire pas à pas · Écrire le premier message |
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.
| Nom | Catégorie | Texte | Boutons |
|---|---|---|---|
| poste_pret | UTILITY | Bonjour {{1}}, votre poste {{2}} est prêt. Présentez le code {{3}} à l'accueil de GameZone Exemple. Bonne partie ! | — |
| dix_minutes_restantes | UTILITY | Bonjour {{1}}, il vous reste 10 minutes sur le poste {{2}}. Souhaitez-vous prolonger votre session d'une heure ? | réponse rapide : « Prolonger 1 h », « Terminer » |
| points_fidelite_session | UTILITY | Merci {{1}}, votre session est terminée. Vous avez gagné {{2}} points : votre total est de {{3}} points (niveau {{4}}). À bientôt ! | — |
| rappel_tournoi | UTILITY | Bonjour {{1}}, votre inscription au tournoi {{2}} est confirmée pour {{3}} à {{4}}. Votre numéro de joueur est le {{5}}. Merci d'arriver 15 minutes avant le début. | — |
Alerte « 10 minutes restantes » avec le bouton « Prolonger 1 h ». 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": "dix_minutes_restantes",
"language": "fr",
"category": "UTILITY",
"body_text": "Bonjour {{1}}, il vous reste 10 minutes sur le poste {{2}}. Souhaitez-vous prolonger votre session d'\''une heure ?",
"example_values": ["Kevin", "PS5"],
"buttons": [
{ "kind": "quick_reply", "text": "Prolonger 1 h" },
{ "kind": "quick_reply", "text": "Terminer" }
]
}'
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": "dix_minutes_restantes",
"language": "fr",
"category": "UTILITY",
"body_text": "Bonjour {{1}}, il vous reste 10 minutes sur le poste {{2}}. Souhaitez-vous prolonger votre session d'une heure ?",
"example_values": ["Kevin", "PS5"],
"buttons": [
{ "kind": "quick_reply", "text": "Prolonger 1 h" },
{ "kind": "quick_reply", "text": "Terminer" }
]
}),
});
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" => "dix_minutes_restantes",
"language" => "fr",
"category" => "UTILITY",
"body_text" => "Bonjour {{1}}, il vous reste 10 minutes sur le poste {{2}}. Souhaitez-vous prolonger votre session d'une heure ?",
"example_values" => ["Kevin", "PS5"],
"buttons" => [
["kind" => "quick_reply", "text" => "Prolonger 1 h"],
["kind" => "quick_reply", "text" => "Terminer"],
],
]),
]);
$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": "dix_minutes_restantes",
"language": "fr",
"category": "UTILITY",
"body_text": "Bonjour {{1}}, il vous reste 10 minutes sur le poste {{2}}. Souhaitez-vous prolonger votre session d'une heure ?",
"example_values": ["Kevin", "PS5"],
"buttons": [
{"kind": "quick_reply", "text": "Prolonger 1 h"},
{"kind": "quick_reply", "text": "Terminer"},
],
},
timeout=15,
)
print(res.status_code, res.json())
Envoi 10 minutes avant la fin de session, par votre logiciel de caisse.
curl
curl -X POST "https://wa-api.geskap.com/v1/messages" \
-H "Authorization: Bearer $GESKAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"to": "+237690000014",
"template": {
"name": "dix_minutes_restantes",
"language": "fr",
"variables": ["Kevin", "PS5"]
}
}'
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": "+237690000014",
"template": {
"name": "dix_minutes_restantes",
"language": "fr",
"variables": ["Kevin", "PS5"]
}
}),
});
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" => "+237690000014",
"template" => [
"name" => "dix_minutes_restantes",
"language" => "fr",
"variables" => ["Kevin", "PS5"],
],
]),
]);
$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": "+237690000014",
"template": {
"name": "dix_minutes_restantes",
"language": "fr",
"variables": ["Kevin", "PS5"],
},
},
timeout=15,
)
print(res.status_code, res.json())
Salle : Il vous reste 10 minutes sur PS5. Prolonger ? [ Prolonger 1 h ] [ Terminer ]
Joueur : (touche « Prolonger 1 h »)
Webhook : message.inbound type=text text="Prolonger 1 h" button_id="Prolonger 1 h"
Salle : Session prolongée d'une heure sur PS5 : 1 500 F, à régler à l'accueil.
[ Mes points ] [ Tournois ]
Joueur : (touche « Tournois »)
Salle : Quel tournoi ? (liste : FIFA 26 · sam. 18h, Mortal Kombat · dim. 16h, Tekken 8 · ven. 19h…)
Les boutons viennent de Boutons de réponse rapide, la liste des tournois de Menu en liste, et le choix de Récupérer le clic.
Attention
Piège : Le bouton « Prolonger 1 h » ne prolonge rien tout seul : il prévient votre serveur par button_id, c'est votre logiciel de poste qui ajoute l'heure. Et un titre de bouton de template dépasse vite 25 caractères : restez courts.
Attention
Piège : Annoncer un tournoi à toute votre base est de la promotion : template MARKETING, bloqué par défaut tant que l'administrateur ne l'a pas activé pour le compte. Le rappel aux seuls inscrits reste UTILITY.
Preuve — vérifié dans le code de l'API : api_schemas.py ; appliqué par la démo WhatsApp : gaming.