Je suis une association

Oui : cotisation due avec lien de paiement, convocation à l'assemblée avec réponse en un clic, reçu de cotisation en PDF et rappel d'événement, avec l'API.

Je suis une association

Astuce
Oui : cotisation due avec lien de paiement, convocation à l'assemblée avec réponse en un clic, reçu de cotisation en PDF et rappel d'événement, avec l'API.

Ce que vous pouvez automatiser

BesoinCommentRecette
Cotisation dueTemplate cotisation_due avec un bouton à lien variable vers la page de paiement du membre.Lien variable dans un bouton · Relance d'impayé
Convocation à l'assembléeTemplate convocation_assemblee avec deux boutons : présent ou excusé.Boutons de template · Récupérer le clic
Reçu de cotisation en PDFTemplate recu_cotisation avec le reçu en PDF en en-tête.PDF en en-tête
Rappel d'événementTemplate rappel_evenement pour les inscrits. Une annonce à tous les membres est de la promotion : MARKETING.Rappel de rendez-vous la veille · Panier abandonné et promo
Inscription à un événementDans les 24 h : liste des événements, puis confirmation par boutons.Menu en liste · Oui, non, plus tard

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
cotisation_dueUTILITYBonjour {{1}}, votre cotisation {{2}} de {{3}} est à régler avant le {{4}}. Vous pouvez la payer en ligne avec le bouton ci-dessous. Si c'est déjà fait, merci d'ignorer ce message.lien variable : « Payer ma cotisation »
convocation_assembleeUTILITYBonjour {{1}}, vous êtes convoqué(e) à l'assemblée générale de l'Association Exemple le {{2}} à {{3}}, à {{4}}. Merci de nous indiquer si vous serez présent(e).réponse rapide : « Je serai présent(e) », « Je suis excusé(e) »
recu_cotisationUTILITYBonjour {{1}}, nous avons bien reçu votre cotisation {{2}} de {{3}} le {{4}}. Votre reçu est joint à ce message en PDF. Merci pour votre soutien.en-tête PDF
rappel_evenementUTILITYBonjour {{1}}, rappel : l'événement {{2}} auquel vous êtes inscrit(e) a lieu le {{3}} à {{4}}, à {{5}}. Nous comptons sur votre présence.—

Exemple complet

Cotisation due, avec un bouton de paiement dont la fin du lien est propre à chaque membre. 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": "cotisation_due",
  "language": "fr",
  "category": "UTILITY",
  "body_text": "Bonjour {{1}}, votre cotisation {{2}} de {{3}} est à régler avant le {{4}}. Vous pouvez la payer en ligne avec le bouton ci-dessous. Si c'\''est déjà fait, merci d'\''ignorer ce message.",
  "example_values": ["Awa", "annuelle", "10 000 F", "30 novembre"],
  "buttons": [
    {
      "kind": "url",
      "text": "Payer ma cotisation",
      "url": "https://association-exemple.test/cotisation/{{1}}",
      "url_example": "https://association-exemple.test/cotisation/ab12cd"
    }
  ]
}'

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": "cotisation_due",
    "language": "fr",
    "category": "UTILITY",
    "body_text": "Bonjour {{1}}, votre cotisation {{2}} de {{3}} est à régler avant le {{4}}. Vous pouvez la payer en ligne avec le bouton ci-dessous. Si c'est déjà fait, merci d'ignorer ce message.",
    "example_values": ["Awa", "annuelle", "10 000 F", "30 novembre"],
    "buttons": [
      {
        "kind": "url",
        "text": "Payer ma cotisation",
        "url": "https://association-exemple.test/cotisation/{{1}}",
        "url_example": "https://association-exemple.test/cotisation/ab12cd"
      }
    ]
  }),
});
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" => "cotisation_due",
    "language" => "fr",
    "category" => "UTILITY",
    "body_text" => "Bonjour {{1}}, votre cotisation {{2}} de {{3}} est à régler avant le {{4}}. Vous pouvez la payer en ligne avec le bouton ci-dessous. Si c'est déjà fait, merci d'ignorer ce message.",
    "example_values" => ["Awa", "annuelle", "10 000 F", "30 novembre"],
    "buttons" => [
      [
        "kind" => "url",
        "text" => "Payer ma cotisation",
        "url" => "https://association-exemple.test/cotisation/{{1}}",
        "url_example" => "https://association-exemple.test/cotisation/ab12cd",
      ],
    ],
  ]),
]);
$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": "cotisation_due",
        "language": "fr",
        "category": "UTILITY",
        "body_text": "Bonjour {{1}}, votre cotisation {{2}} de {{3}} est à régler avant le {{4}}. Vous pouvez la payer en ligne avec le bouton ci-dessous. Si c'est déjà fait, merci d'ignorer ce message.",
        "example_values": ["Awa", "annuelle", "10 000 F", "30 novembre"],
        "buttons": [
            {
                "kind": "url",
                "text": "Payer ma cotisation",
                "url": "https://association-exemple.test/cotisation/{{1}}",
                "url_example": "https://association-exemple.test/cotisation/ab12cd",
            },
        ],
    },
    timeout=15,
)
print(res.status_code, res.json())

Envoi à chaque membre en retard de cotisation, depuis votre registre des adhérents.

curl

curl -X POST "https://wa-api.geskap.com/v1/messages" \
  -H "Authorization: Bearer $GESKAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+237690000020",
  "template": {
    "name": "cotisation_due",
    "language": "fr",
    "variables": ["Awa", "annuelle", "10 000 F", "30 novembre"],
    "button_url_param": "ab12cd"
  }
}'

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": "+237690000020",
    "template": {
      "name": "cotisation_due",
      "language": "fr",
      "variables": ["Awa", "annuelle", "10 000 F", "30 novembre"],
      "button_url_param": "ab12cd"
    }
  }),
});
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" => "+237690000020",
    "template" => [
      "name" => "cotisation_due",
      "language" => "fr",
      "variables" => ["Awa", "annuelle", "10 000 F", "30 novembre"],
      "button_url_param" => "ab12cd",
    ],
  ]),
]);
$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": "+237690000020",
        "template": {
            "name": "cotisation_due",
            "language": "fr",
            "variables": ["Awa", "annuelle", "10 000 F", "30 novembre"],
            "button_url_param": "ab12cd",
        },
    },
    timeout=15,
)
print(res.status_code, res.json())

Conversation

Association : Bonjour Awa, vous êtes convoquée à l'assemblée générale le 22 novembre à 10h00.
              [ Je serai présent(e) ]  [ Je suis excusé(e) ]
Membre      : (touche « Je serai présent(e) »)
Webhook     : message.inbound  type=text  text="Je serai présent(e)"  button_id="Je serai présent(e)"
Association : Merci Awa, votre présence est enregistrée. Souhaitez-vous vous inscrire au repas ?
              [ Oui ]  [ Non ]  [ Plus tard ]

Les réponses courtes suivent Oui, non, plus tard ; le clic d'un bouton de template se lit comme dans Boutons de template.

Attention
Piège : Un template porte au plus deux boutons : « Oui / Non / Plus tard » (trois choix) ne s'envoie que dans les 24 h, comme message interactif. Hors 24 h, restez à deux boutons.
Attention
Piège : Un appel aux dons ou une annonce à l'ensemble des membres relève du MARKETING, bloqué par défaut tant que l'administrateur du compte ne l'a pas activé. Une cotisation due ou une convocation de membres inscrits reste UTILITY.

Preuve — vérifié dans le code de l'API : api_schemas.py.