01 Étapes du scénario
01
Principe du webhook
Lorsqu'un client réserve un créneau sur Calendly, ce dernier envoie un webhook HTTP POST vers Anim'Gest qui crée automatiquement une séance en base.
- Client réserve sur Calendly → POST /api/webhooks/calendly → Séance créée
- Aucune ressaisie manuelle, pas d'oubli, pas de doublon
- Disponible 24/7 — même la nuit ou le week-end
- Traçabilité complète : log de chaque appel dans
param_config
02
Copier l'URL Webhook depuis Anim'Gest
- Paramètres → Calendly
- Encart « URL Webhook Calendly »
- Cliquer sur Copier pour copier l'URL complète
- Format :
https://votre-domaine.fr/api/webhooks/calendly
⚠ Attention : Le webhook Calendly nécessite que votre serveur Anim'Gest soit accessible depuis Internet (URL publique). En environnement local, utiliser un tunnel comme
ngrok pour les tests.
03
Configurer le webhook dans Calendly
- Dans Calendly.com : Settings → Integrations → Webhooks → + New Webhook
- URL : coller l'URL copiée depuis Anim'Gest
- Événement à écouter :
invitee.created - Scope : Organization ou User selon votre compte
- Sauvegarder — Calendly fournit une clé secrète (signature)
04
Tester l'intégration
- Faire une réservation test sur Calendly
- Vérifier dans Anim'Gest → Séances qu'une nouvelle séance apparaît
- Vérifier la liaison client (par email principalement)
- Vérifier le type de séance (selon mapping du slug)
- Consulter le log dans
param_config(groupe CALENDLY_LOG)
05
Mapping des types de RDV (slug)
Le système associe automatiquement le slug Calendly au type de séance Anim'Gest.
ec-1h30→ Bilan Comportemental (Comportementaliste)suivi-1h→ Séance de suivi (Comportementaliste)educ-cours→ Cours individuel éducationtoilettage→ Toilettage (Toiletteur)garde-visite→ Visite à domicile (Pet-sitter)garde-pension→ Garde / Pensioncours-equit→ Cours équitation individuel (Centre équestre)balade-equit→ Balade équestreconsult-elev→ Suivi portée (Éleveur)
💡 Conseil : Le slug correspond au nom de l'event type dans l'URL Calendly (ex:
calendly.com/votre-nom/ec-1h30). Nommez vos event types selon ces slugs pour un mapping automatique.
06
Comportement du système
- Client reconnu par email → séance liée au client existant (TIE_ID)
- Client reconnu par nom → séance liée (recherche approx.)
- Client inconnu → séance créée sans lien client (à compléter manuellement)
- Type RDV reconnu (slug) → STY_ID associé automatiquement
- Type RDV inconnu → séance créée sans type (à renseigner)
- Événement autre que
invitee.created→ ignoré (réponse 200 OK) - Toutes les séances sont en statut PLANIFIEE et FACTURABLE par défaut
07
Format API et payload
- Route :
POST /api/webhooks/calendly - Content-Type : application/json
- Payload Calendly « invitee.created » : event.start_time, event.end_time, invitee.name, invitee.email, event_type.slug
- Réponse OK :
{ "ok": true, "created": true } - Réponse ignorée :
{ "ok": true, "skipped": true } - Vérification signature HMAC SHA-256 (X-Calendly-Webhook-Signature)