Passer au contenu

Essayez un sujet, un nom de fonction ou un code d’erreur comme FORM_CLOSED.

English formerie.com

n8n

Lancez un flux de travail n8n à chaque nouvelle réponse, puis envoyez-la partout où n8n se rend. Formerie envoie un webhook, et le nœud Webhook de n8n le reçoit.

Nous avons suivi ces étapes sur n8n 2.45.7 auto-hébergé, avec de vraies livraisons signées venant d’une copie locale de Formerie. Nous ne les avons pas suivies sur n8n Cloud.

Relier votre formulaire

  1. Dans n8n, créez un flux de travail et ajoutez un nœud Webhook.
  2. Réglez HTTP Method à POST, et choisissez un Path, comme formerie-responses.
  3. Copiez la Production URL. La Test URL fonctionne seulement quand n8n écoute dans l’éditeur, et elle ne recevra donc pas les réponses suivantes de votre formulaire.
  4. Dans Formerie, ouvrez votre formulaire, puis Livraison, et ajoutez un webhook avec cette adresse. Gardez le secret de signature.
  5. Dans n8n, publiez le flux de travail, ce qui active l’adresse de production.
  6. Dans Formerie, choisissez Envoyer un test. Trouvez l’exécution sous Executions dans le flux de travail.

Pendant que vous construisez, vous pouvez recevoir un test dans l’éditeur : sélectionnez Listen for Test Event, et utilisez un moment la Test URL dans un deuxième webhook.

Utiliser les réponses

Le contenu est sous body, et les en-têtes sous headers :

Text
{{ $json.body.data.fields.email }}
{{ $json.body.data.submission.language }}
{{ $json.headers['webhook-id'] }}

La première ligne est le champ nommé email de votre formulaire. Un champ imbriqué suit ses groupes, comme fields.contact.email.

Vérifier la signature

L’adresse d’un flux de travail est secrète, mais quiconque l’a pourrait envoyer de fausses réponses. Pour les refuser, vérifiez la signature. Il faut trois nœuds de plus et un réglage :

  1. Dans le nœud Webhook, réglez Respond à Using ‘Respond to Webhook’ Node, et activez l’option Raw Body sous Add Option.
  2. Si vous hébergez n8n, autorisez le module crypto en réglant NODE_FUNCTION_ALLOW_BUILTIN=crypto sur votre instance.
  3. Ajoutez ensuite un nœud Code, en JavaScript, avec ceci et votre propre secret :
JavaScript
const crypto = require('crypto');

const secret = 'whsec_your_secret';
const item = $input.first();
const headers = item.json.headers;
const rawBody = Buffer.from(item.binary.data.data, 'base64').toString('utf8');

const id = headers['webhook-id'];
const timestamp = headers['webhook-timestamp'];
const fresh = Math.abs(Date.now() / 1000 - Number(timestamp)) <= 300;
const key = Buffer.from(secret.replace(/^whsec_/, ''), 'base64');
const expected = crypto.createHmac('sha256', key).update(`${id}.${timestamp}.${rawBody}`).digest('base64');
const valid = fresh && (headers['webhook-signature'] ?? '').split(' ').some((part) => part === `v1,${expected}`);

return [{ json: { valid, event: valid ? JSON.parse(rawBody) : null } }];
  1. Ajoutez un nœud If avec la condition {{ $json.valid }} à vrai.
  2. Sur sa branche vraie, continuez votre flux de travail et terminez avec un nœud Respond to Webhook qui répond 200. Sur sa branche fausse, ajoutez-en un qui répond 401.

Ensuite, vos réponses sont dans $json.event.data.fields. Une requête falsifiée a reçu un 401 lors de notre essai. Une vraie a reçu 200, et l’a gardé pendant un changement de secret jusqu’à la fin de l’ancien, puis a reçu 401 tant que le nœud n’avait pas le nouveau secret.

Gardez le secret dans un identifiant n8n si votre installation le permet, plutôt que dans le nœud.

Si ça ne fonctionne pas

  • Rien n’arrive après la publication : le webhook dans Formerie a peut-être encore la Test URL. Remplacez-la par la Production URL.
  • n8n n’est pas joignable : Formerie a besoin d’une adresse https publique sur le port standard. Un n8n auto-hébergé a besoin d’un proxy inverse ou d’un tunnel devant lui.
  • Le nœud Code s’arrête sur require : le module crypto n’est pas encore autorisé. Voir l’étape 2.
  • Le nœud Code ne peut pas lire binary : l’option Raw Body est désactivée.

Ensuite : envoyer les réponses à Google Sheets ou à HubSpot.