Je suis un cabinet d'avocats

Oui : audience fixée, pièce réclamée à renvoyer en photo, dossier qui avance (lien + PIN) et pré-qualification de la situation avant le rendez-vous, avec l'API.

Je suis un cabinet d'avocats

Astuce
Oui : audience fixée, pièce réclamée à renvoyer en photo, dossier qui avance (lien + PIN) et pré-qualification de la situation avant le rendez-vous, avec l'API.

Ce que vous pouvez automatiser

BesoinCommentRecette
Audience fixéeTemplate audience_fixee : date et juridiction seulement, plus un bouton à lien variable vers l'espace sécurisé (PIN).Lien variable dans un bouton · Données sensibles : lien et PIN
Pièce réclamée, à renvoyer en photoTemplate piece_reclamee nommant la pièce ; le client répond par une photo, qui arrive sur votre webhook avec media_id.Recevoir photo et document · Boutons de template
Dossier qui avanceTemplate dossier_avance sans aucun détail, avec lien personnel + code PIN pour lire l'étape.Données sensibles : lien et PIN · Lien variable dans un bouton
Pré-qualification de la situationDans les 24 h : questions pas à pas (particulier ou entreprise, urgence), puis récit libre ; l'avocat étudie avant de rappeler.Formulaire pas à pas · Répondre en texte libre
Rappel de consultation la veilleTemplate rappel_consultation avec boutons Confirmer / Annuler.Rappel de rendez-vous la veille

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
audience_fixeeUTILITYBonjour {{1}}, une audience est fixée dans votre dossier {{2}} le {{3}} devant {{4}}. Maître {{5}} vous recontactera pour la préparer. Le détail est disponible dans votre espace sécurisé, avec votre code PIN.lien variable : « Ouvrir mon dossier »
piece_reclameeUTILITYBonjour {{1}}, pour avancer sur votre dossier {{2}}, Maître {{3}} a besoin de la pièce suivante : {{4}}. Vous pouvez l'envoyer en photo lisible en répondant à ce message, ou la déposer au cabinet.réponse rapide : « Je l'envoie en photo », « Je la dépose »
dossier_avanceUTILITYBonjour {{1}}, votre dossier {{2}} avance : une nouvelle étape est enregistrée. Par respect du secret professionnel, le détail n'est pas envoyé ici ; consultez-le dans votre espace sécurisé avec votre code PIN.lien variable : « Voir mon dossier »
rappel_consultationUTILITYBonjour {{1}}, nous vous rappelons votre consultation de {{2}} demain à {{3}} ({{4}}) avec Maître {{5}}. Pensez à préparer vos pièces.réponse rapide : « Je confirme », « Je dois annuler »

Exemple complet

Notification « dossier qui avance » : aucune information sur l'affaire, seulement un lien personnel. 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": "dossier_avance",
  "language": "fr",
  "category": "UTILITY",
  "body_text": "Bonjour {{1}}, votre dossier {{2}} avance : une nouvelle étape est enregistrée. Par respect du secret professionnel, le détail n'\''est pas envoyé ici ; consultez-le dans votre espace sécurisé avec votre code PIN.",
  "example_values": ["Awa", "DOS-0142"],
  "buttons": [
    {
      "kind": "url",
      "text": "Voir mon dossier",
      "url": "https://cabinet-exemple.test/dossier/{{1}}",
      "url_example": "https://cabinet-exemple.test/dossier/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": "dossier_avance",
    "language": "fr",
    "category": "UTILITY",
    "body_text": "Bonjour {{1}}, votre dossier {{2}} avance : une nouvelle étape est enregistrée. Par respect du secret professionnel, le détail n'est pas envoyé ici ; consultez-le dans votre espace sécurisé avec votre code PIN.",
    "example_values": ["Awa", "DOS-0142"],
    "buttons": [
      {
        "kind": "url",
        "text": "Voir mon dossier",
        "url": "https://cabinet-exemple.test/dossier/{{1}}",
        "url_example": "https://cabinet-exemple.test/dossier/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" => "dossier_avance",
    "language" => "fr",
    "category" => "UTILITY",
    "body_text" => "Bonjour {{1}}, votre dossier {{2}} avance : une nouvelle étape est enregistrée. Par respect du secret professionnel, le détail n'est pas envoyé ici ; consultez-le dans votre espace sécurisé avec votre code PIN.",
    "example_values" => ["Awa", "DOS-0142"],
    "buttons" => [
      [
        "kind" => "url",
        "text" => "Voir mon dossier",
        "url" => "https://cabinet-exemple.test/dossier/{{1}}",
        "url_example" => "https://cabinet-exemple.test/dossier/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": "dossier_avance",
        "language": "fr",
        "category": "UTILITY",
        "body_text": "Bonjour {{1}}, votre dossier {{2}} avance : une nouvelle étape est enregistrée. Par respect du secret professionnel, le détail n'est pas envoyé ici ; consultez-le dans votre espace sécurisé avec votre code PIN.",
        "example_values": ["Awa", "DOS-0142"],
        "buttons": [
            {
                "kind": "url",
                "text": "Voir mon dossier",
                "url": "https://cabinet-exemple.test/dossier/{{1}}",
                "url_example": "https://cabinet-exemple.test/dossier/ab12cd",
            },
        ],
    },
    timeout=15,
)
print(res.status_code, res.json())

Envoi quand le dossier change d'étape ; button_url_param complète le lien de votre espace sécurisé.

curl

curl -X POST "https://wa-api.geskap.com/v1/messages" \
  -H "Authorization: Bearer $GESKAP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "to": "+237690000015",
  "template": {
    "name": "dossier_avance",
    "language": "fr",
    "variables": ["Awa", "DOS-0142"],
    "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": "+237690000015",
    "template": {
      "name": "dossier_avance",
      "language": "fr",
      "variables": ["Awa", "DOS-0142"],
      "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" => "+237690000015",
    "template" => [
      "name" => "dossier_avance",
      "language" => "fr",
      "variables" => ["Awa", "DOS-0142"],
      "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": "+237690000015",
        "template": {
            "name": "dossier_avance",
            "language": "fr",
            "variables": ["Awa", "DOS-0142"],
            "button_url_param": "ab12cd",
        },
    },
    timeout=15,
)
print(res.status_code, res.json())

Conversation

Cabinet : Maître Fotso a besoin d'une pièce pour avancer (DOS-0142) : acte de naissance.
          [ Je l'envoie en photo ]  [ Je la dépose ]
Client  : (touche « Je l'envoie en photo », puis envoie une photo)
Webhook : message.inbound  type=image  media_id="1203…"  media_url="…"
Cabinet : Pièce bien reçue, merci. Maître Fotso l'examine et vous tient informé.
          [ Mon dossier ]  [ Menu ]
Client  : Je voudrais exposer ma situation
Cabinet : Vous êtes plutôt…  [ Un particulier ]  [ Une entreprise ]
Client  : (touche « Un particulier »)
Cabinet : Y a-t-il une échéance ?  (liste : Moins de 7 jours, Ce mois-ci, Pas de date)

La photo reçue se télécharge comme dans Recevoir photo et document ; les questions suivent Formulaire pas à pas et chaque réponse se lit avec Récupérer le clic.

Attention
Piège : Secret professionnel : ne mettez jamais la nature de l'affaire, un nom de partie ou un montant dans un template ou un message. Un template nomme seulement le type de pièce (« acte de naissance ») ; tout le reste est derrière un lien personnel + code PIN.

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