Intégrations : webhooks et Google Sheets
Sur cette page
Intégrations, dans le menu de votre site, envoie ce qui se passe sur votre site vers d’autres outils au moment même où cela se produit :
- Les Webhooks envoient les nouvelles demandes, les nouveaux abonnés et les commandes payées à toute application qui les accepte : Zapier, Make, n8n, Pabbly, votre CRM ou votre propre serveur.
- Google Sheets ajoute chaque nouvelle demande comme une ligne dans une feuille de calcul, sans connecter de compte Google à Closer.
Chaque site a ses propres intégrations. Vous pouvez ajouter jusqu’à 5 adresses par site (webhooks et feuilles de calcul confondus).
Webhooks
Un webhook est une adresse (URL) que Closer appelle avec les détails d’un événement. La plupart des outils d’automatisation vous en fournissent une : dans Zapier, c’est le déclencheur Webhooks by Zapier → Catch Hook, dans Make le module Webhooks → Custom webhook, dans n8n le nœud Webhook.
Ajouter un webhook
- Ouvrez Intégrations.
- Collez l’adresse sous Adresse du webhook. Elle doit commencer par
https://. - Cochez les événements souhaités :
- Nouvelle demande : un visiteur a envoyé un formulaire de contact (ou un quiz avec formulaire).
- Nouvel abonné : quelqu’un s’est inscrit via un formulaire de newsletter.
- Nouvelle commande : une commande de votre boutique a été payée.
- Cliquez sur Ajouter un webhook.
- Closer affiche le secret de signature (
whsec_…) une seule fois. Copiez-le et conservez-le dans l’application réceptrice si vous voulez vérifier que les requêtes viennent bien de Closer. Si vous le perdez, cliquez sur Nouveau secret ; l’ancien cesse de fonctionner immédiatement. - Cliquez sur Envoyer un test. L’application réceptrice reçoit un événement d’exemple (avec
"test": true), et le résultat apparaît dans le Journal des envois.
Vous pourrez ensuite activer ou désactiver des événements en cliquant dessus, mettre un webhook en pause avec son interrupteur, ou le Retirer.
Pour des raisons de sécurité, Closer n’appelle que des adresses Internet publiques. Les adresses de réseaux privés ou internes (comme
localhost,10.x.x.x,192.168.x.x) sont refusées.
Ce que Closer envoie
Chaque requête est un POST avec un corps JSON :
{
"id": "1f6c2a9e-…",
"event": "inquiry.created",
"created_at": "2026-10-22T09:30:00+00:00",
"test": false,
"site": { "id": 12, "name": "My site", "url": "https://mysite.closer.li" },
"data": { … }
}
L’event vaut inquiry.created, subscriber.created ou order.paid. Contenu de data :
| Événement | Champs dans data |
|---|---|
inquiry.created |
id, created_at, language, page (où le formulaire a été envoyé, p. ex. /contact), name, email, fields (une liste de key, label, value pour chaque champ du formulaire), quiz (réponses et résultat, ou null) |
subscriber.created |
id, email, name, language, source (le formulaire), created_at |
order.paid |
id, code, email, name, language, items (id, name, price), subtotal, discount, coupon_code, total, currency, mode (test, live ou free), paid_at |
Les montants sont en centimes (la plus petite unité de la devise) : 4500 avec "currency": "EUR" signifie 45,00 €.
En-têtes envoyés avec chaque requête :
X-Closer-Event: le nom de l’événement.X-Closer-Delivery: un identifiant unique de l’événement. Les nouvelles tentatives pour le même événement gardent le même identifiant, vous pouvez donc ignorer les doublons.X-Closer-Signature:t=1761125400,v1=5d41…, oùtest l’heure d’envoi (secondes Unix) etv1le HMAC-SHA256 det + "." + corps brut, calculé avec votre secret de signature.
Pour vérifier une requête, calculez le même HMAC avec votre secret et comparez-le à v1, et rejetez les requêtes dont le t date de plus de quelques minutes. En PHP :
[$t, $v1] = sscanf($_SERVER['HTTP_X_CLOSER_SIGNATURE'], 't=%d,v1=%s');
$body = file_get_contents('php://input');
$valid = hash_equals(hash_hmac('sha256', $t.'.'.$body, $secret), $v1) && abs(time() - $t) < 300;
Nouvelles tentatives et journal des envois
L’adresse réceptrice doit répondre avec un statut 2xx dans les 15 secondes. Sinon (erreur, délai dépassé, 500), Closer réessaie encore deux fois : après environ 30 secondes, puis après environ 5 minutes. Les redirections ne sont pas suivies, utilisez donc l’adresse finale.
Le Journal des envois affiche les 50 dernières requêtes du site : heure, événement, adresse, numéro de la tentative (1/3, 2/3, 3/3), code de statut renvoyé par l’adresse et erreur éventuelle.
Google Sheets
Chaque nouvelle demande devient une ligne dans une feuille Google Sheets : Date, Page, Nom, E-mail, puis une colonne pour chaque autre champ du formulaire (selon son libellé). Les nouveaux champs reçoivent automatiquement une nouvelle colonne. Cela fonctionne grâce à un petit script Google Apps Script que vous ajoutez à votre propre feuille de calcul : Closer n’a donc jamais besoin d’accéder à votre compte Google.
Configuration (environ 3 minutes)
- Créez une nouvelle feuille de calcul dans Google Sheets (le plus rapide est d’ouvrir
sheets.new). Les demandes arrivent dans son premier onglet. - Dans la feuille de calcul, ouvrez Extensions → Apps Script.
- Supprimez le code d’exemple dans l’éditeur. Dans Closer, sous Google Sheets, cliquez sur Copier le script et collez-le dans l’éditeur Apps Script. Cliquez sur Enregistrer (l’icône de disquette).
- Cliquez sur Déployer → Nouveau déploiement (Deploy → New deployment). Cliquez sur la roue dentée à côté de Sélectionner le type (Select type) et choisissez Application Web (Web app). Réglez :
- Exécuter en tant que (Execute as) : Moi (Me)
- Qui peut accéder (Who has access) : Tout le monde (Anyone)
- Cliquez sur Déployer (Deploy). Google vous demande d’autoriser le script : choisissez votre compte. Si vous voyez « Google n’a pas validé cette application », cliquez sur Paramètres avancés → Accéder à (votre projet) (Advanced → Go to …) puis sur Autoriser (Allow). C’est votre propre script, qui s’exécute dans votre propre compte.
- Copiez l’URL de l’application Web (Web app URL). Elle ressemble à
https://script.google.com/macros/s/…/exec. - Dans Closer, collez-la sous URL de l’application Web et cliquez sur Connecter. Closer envoie aussitôt une ligne de test ; vérifiez qu’elle apparaît dans la feuille (vous pouvez la supprimer).
Utilisez Envoyer une ligne de test à tout moment pour vérifier la connexion. L’interrupteur met la feuille en pause, et le bouton corbeille la déconnecte.
Gardez l’URL de l’application Web privée : quiconque la possède peut ajouter des lignes à cette feuille. Si elle a fuité, créez un nouveau déploiement dans Apps Script et connectez la nouvelle URL.
Bon à savoir
- Seules les demandes vont dans la feuille de calcul. Pour les abonnés et les commandes, utilisez un webhook (par exemple vers Zapier ou Make, qui peuvent eux aussi écrire dans Google Sheets).
- Si vous modifiez le script plus tard, utilisez Déployer → Gérer les déploiements → Modifier → Nouvelle version (Deploy → Manage deployments → Edit → New version), pour que l’URL reste la même.
- Un texte qui commence comme une formule (
=,+,-,@) est écrit en texte brut : une saisie de formulaire ne peut donc pas exécuter de formule dans votre feuille. - Chaque ligne est ajoutée dès que la demande arrive. Les tentatives échouées sont relancées comme pour les webhooks et apparaissent dans le Journal des envois.
- Les demandes au-delà de la limite mensuelle de votre offre sont enregistrées dans la Boîte de réception, mais ne sont pas envoyées aux intégrations.
Vous ne trouvez pas de réponse ?
Écrivez-nous, nous répondons sous un jour ouvré.