Recette webhook n8n
Recevoir un événement PAYMENT_SUCCEEDED signé dans n8n et envoyer une confirmation WhatsApp ou e-mail.
Voici l’entrée sans code du contrat d’événements signés : lomi. envoie un POST vers n8n, vous vérifiez X-Lomi-Signature sur le corps brut, puis vous prévenez le client. Le même schéma s’applique à REFUND_COMPLETED si vous y souscrivez.
Vous n’avez pas besoin d’un serveur dédié. n8n est l’écouteur.
Ce qu’il vous faut
- Une instance n8n Cloud ou auto-hébergée
- Le secret de signature webhook lomi. (
whsec_…) du tableau de bord - Un nœud WhatsApp ou e-mail (Twilio, WhatsApp Cloud, Resend ou SMTP)
Créer le webhook dans lomi.
- Tableau de bord → Développeurs → Webhooks → Créer.
- URL : l’URL de production du nœud Webhook n8n (
https://<instance>/webhook/<chemin>). - Souscrire à
PAYMENT_SUCCEEDED(ajoutezREFUND_COMPLETEDsi un remboursement doit annuler une livraison). - Copier le secret
whsec_…. Stockez-le en identifiant n8n ou variable d’environnement. Ne le mettez pas dans un JSON de workflow public.
Nœud Webhook dans n8n
- Méthode :
POST - Réponse :
Immediatelyavec HTTP200pour que lomi. ne relance pas pendant l’envoi WhatsApp - Conserver le corps brut. Ne parsez pas le JSON avant la vérification de signature.
Vérifier la signature
HMAC-SHA256 hexadécimal du corps brut avec le secret de l’URL. Comparez à X-Lomi-Signature. Facultatif : si X-Lomi-Timestamp (ISO-8601, identique au timestamp du corps) a plus de 300 secondes, arrêtez le workflow (protection anti-rejeu). N’incluez pas l’horodatage dans le HMAC ; la signature porte uniquement sur le corps.
Exemple de nœud Code n8n :
const crypto = require('crypto');
const secret = $env.LOMI_WEBHOOK_SECRET;
const raw = $input.first().json.bodyRaw ?? JSON.stringify($input.first().json);
const expected = crypto.createHmac('sha256', secret).update(raw).digest('hex');
const signature = $input.first().json.headers['x-lomi-signature'];
if (expected !== signature) {
throw new Error('Invalid lomi. webhook signature');
}
return $input.all();Si le nœud Webhook a déjà parsé le JSON, passez-le en mode binaire/brut, sinon le HMAC ne correspondra pas.
Envoyer WhatsApp ou e-mail
Depuis l’objet data de l’enveloppe (une Transaction pour PAYMENT_SUCCEEDED) :
- Montant et devise
- Téléphone ou e-mail du client
transaction_idpour le support
Mappez ces champs dans votre modèle WhatsApp ou votre e-mail. Dédupliquez sur l’id de l’enveloppe pour qu’une relance n’envoie pas deux messages.
Tester
Utilisez Envoyer un test dans le tableau de bord, ou un paiement bac à sable. Les journaux de livraison doivent afficher 200. Un 401 signifie que n8n (ou un proxy) exige une clé API ; lomi. n’envoie que X-Lomi-Signature, X-Lomi-Event et X-Lomi-Timestamp.
Détails : Traiter les webhooks.