Les webhooks sortants

Disponible dans :Pro

Un webhook est un message que votre site envoie à un autre service dès qu’il se passe quelque chose. HappenBoard Pro peut en envoyer un quand quelqu’un s’inscrit, annule, change de statut, fait son check-in ou est supprimé : vous reliez ainsi vos événements à Zapier, Make, n8n ou votre CRM.

Les webhooks demandent HappenBoard Pro. Voir ce que Pro ajoute.

Ajouter un webhook

Commencez par récupérer, dans le service qui recevra les messages, l’adresse où les envoyer. Dans Zapier, par exemple, c’est l’URL d’un déclencheur Catch Hook.

  1. Allez dans HappenBoard → Integrations et cliquez sur Configure sur la carte Webhooks (Pro).
  2. Cliquez sur Add webhook.
  3. Renseignez un Label, par exemple « Zapier, nouvelles inscriptions ». Il n’apparaît que dans votre liste.
  4. Collez l’adresse dans Endpoint URL.
  5. Laissez Signing secret vide pour que HappenBoard crée un secret, ou saisissez le vôtre.
  6. Laissez Active activé.
  7. Sous Events, cochez ce que vous voulez envoyer (au moins un événement).
  8. Cliquez sur Create webhook.

HappenBoard affiche alors le secret de signature au-dessus de la liste. Copiez-le tout de suite si le service destinataire vérifie les signatures : il ne sera plus jamais affiché.

Choisir les événements

ÉvénementEnvoyé quand
RSVP created (rsvp.created)Quelqu’un s’inscrit avec le formulaire d’inscription ou obtient un billet, gratuit ou payant.
RSVP cancelled (rsvp.cancelled)Un participant annule avec le lien de son e-mail, ou un remboursement annule une inscription payante.
Attendee status changed (attendee.status_changed)Votre équipe change un statut sur l’écran Participants, par exemple de liste d’attente à inscrit. Une annulation faite à cet endroit arrive sous cet événement.
Attendee checked in (attendee.checked_in)Un billet est scanné à l’entrée avec le check-in par QR code, à chaque scan.
Check-in undone (attendee.checkin_undone)Un scan fait par erreur est annulé à l’entrée.
Attendee deleted (attendee.deleted)Un participant est supprimé définitivement (et non mis à la corbeille).

Le nom entre parenthèses est celui que le service destinataire voit dans le message.

Conserver le secret de signature

Avec le secret de signature, le service destinataire peut vérifier qu’un message vient bien de votre site. HappenBoard ne l’affiche qu’une fois : à la création du webhook, puis à chaque remplacement. Ensuite, le formulaire de modification n’en montre que les quatre derniers caractères.

Pour le remplacer, cliquez sur Edit sur le webhook, puis sur Generate a new secret. Vous pouvez aussi saisir un nouveau secret dans Signing secret et enregistrer. Les messages sont signés avec le nouveau secret immédiatement : transmettez-le sans attendre au service destinataire.

Tester un webhook

Cliquez sur Test sur la ligne du webhook. HappenBoard envoie tout de suite un message de test (webhook.test) et vous dit si le destinataire l’a accepté, ou pourquoi il l’a refusé. Le test fonctionne même quand le webhook est désactivé, et il n’est jamais retenté.

Comment partent les messages

  • Les messages partent en arrière-plan, juste après l’événement : vos visiteurs n’attendent jamais. Sur un site peu fréquenté, ils partent au prochain passage des tâches planifiées de WordPress.
  • Le destinataire a cinq secondes pour répondre par un code de succès.
  • Sans réponse, ou en cas d’erreur passagère, HappenBoard réessaie 1, 4, 16, 64 puis 256 minutes plus tard : six tentatives en tout, sur environ six heures. Tout autre refus est définitif.
  • Chaque ligne indique le résultat du dernier envoi : Last delivery succeeded, ou Last delivery failed avec la raison et le nombre d’échecs d’affilée.
  • Après 50 échecs d’affilée, HappenBoard désactive le webhook. Sa ligne affiche Paused et en donne la raison, et l’adresse e-mail d’administration du site (Réglages → Général) reçoit un e-mail « Webhook switched off ». Réparez le destinataire, puis réactivez le webhook : le compteur repart de zéro.
  • Désactiver ou supprimer un webhook arrête aussi les envois encore en attente.

Utiliser une adresse acceptée

L’Endpoint URL doit commencer par http:// ou https:// et viser un serveur public sur Internet, pas une adresse privée ou locale. Elle doit utiliser le port 80, 443 ou 8080, ou aucun port. HappenBoard vérifie l’adresse à l’enregistrement et indique ce qui ne va pas.

HappenBoard ne suit jamais une redirection : collez l’adresse finale.

Pour les développeurs : vérifier une requête

Chaque requête est un POST avec un corps JSON qui contient event, delivered_at, delivery_id et data, le détail de l’événement. Deux en-têtes comptent surtout :

  • X-HappenBoard-Delivery reste identique à chaque nouvelle tentative. Servez-vous-en pour ignorer les doublons.
  • X-HappenBoard-Signature-V1 a la forme t=<horodatage>,v1=<signature>. La signature est le HMAC SHA-256 de l’horodatage, d’un point et du corps brut, calculé avec le secret de signature.

Refusez une requête dont l’horodatage s’écarte de plus de cinq minutes de votre horloge : une requête interceptée ne pourra pas être rejouée.

Code
parse_str( str_replace( ',', '&', $_SERVER['HTTP_X_HAPPENBOARD_SIGNATURE_V1'] ?? '' ), $sig );
$t  = $sig['t'] ?? '';
$ok = ctype_digit( $t ) && abs( time() - (int) $t ) <= 300
	&& hash_equals( hash_hmac( 'sha256', $t . '.' . file_get_contents( 'php://input' ), $secret ), $sig['v1'] ?? '' );

L’ancien en-tête X-HappenBoard-Signature (un HMAC du corps seul) est toujours envoyé pour les destinataires existants. Les hooks déclenchés autour de chaque envoi sont décrits dans Hooks synchronisation, webhooks et contrôle d’accès.

En cas de problème

  • L’adresse est refusée à l’enregistrement : lisez le message. Il s’agit en général d’une adresse privée ou d’un port autre que 80, 443 ou 8080.
  • Le test échoue avec une erreur HTTP : vérifiez l’adresse dans le service destinataire, puis son secret de signature.
  • Un webhook affiche Paused : le destinataire a échoué 50 fois d’affilée. Réparez-le, puis réactivez le webhook.
  • Les messages arrivent en retard : ils attendent les tâches planifiées de WordPress. Voir Santé et maintenance.

Pour aller plus loin