Je suis une salle de jeux

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.

Je suis une salle de jeux

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.

Ce que vous pouvez automatiser

BesoinCommentRecette
Poste prêtSi 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 hTemplate 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 sessionTemplate 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 rappelInscription 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.

Les templates à créer

NomCatégorieTexteBoutons
poste_pretUTILITYBonjour {{1}}, votre poste {{2}} est prêt. Présentez le code {{3}} à l'accueil de GameZone Exemple. Bonne partie !—
dix_minutes_restantesUTILITYBonjour {{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_sessionUTILITYMerci {{1}}, votre session est terminée. Vous avez gagné {{2}} points : votre total est de {{3}} points (niveau {{4}}). À bientôt !—
rappel_tournoiUTILITYBonjour {{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.—

Exemple complet

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())

Conversation

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.