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.
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.
| Besoin | Comment | Recette |
|---|---|---|
| Audience fixée | Template 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 photo | Template 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 avance | Template 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 situation | Dans 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 veille | Template 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.
| Nom | Catégorie | Texte | Boutons |
|---|---|---|---|
| audience_fixee | UTILITY | Bonjour {{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_reclamee | UTILITY | Bonjour {{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_avance | UTILITY | 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. | lien variable : « Voir mon dossier » |
| rappel_consultation | UTILITY | Bonjour {{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 » |
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())
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.