Automatisations
Chaque étape d’une livraison, en événement.
Définissez deux variables sur votre page de livraison : elle publie un événement signé quand un colis est envoyé, ouvert, validé, renvoyé pour corrections ou supprimé. Vérifiez-le en un appel, ou laissez le nœud n8n s’en charger.
{
"id": "5f0c6f7e-…",
"type": "parcel.approved",
"createdAt": "2026-09-22T12:00:00.000Z",
"data": {
"code": "K7QP2M4X",
"url": "https://drop.example.com/K7QP2M4X",
"filename": "maquette-v2.pdf",
"size": 1843200,
"contentType": "application/pdf",
"expiresAt": "2026-09-29T10:00:00.000Z",
"note": "La version avec le logo corrigé",
"device": "Chrome sur macOS",
"protected": false,
"oneTime": false,
"status": "approved",
"sentAt": "2026-09-22T10:00:00.000Z",
"openedAt": "2026-09-22T11:00:00.000Z",
"decidedAt": "2026-09-22T12:00:00.000Z"
}
}01Événements
Cinq événements, une seule forme.
Chacun est un POST de JSON, envoyé après la réponse pour que personne ne l’attende. `data` est le colis tel qu’il est au départ de l’événement.
type
- parcel.sent
- Un colis a été créé : depuis la page, par un gros envoi terminé, ou par la CLI.
- parcel.opened
- Le client l’a ouvert : la page de retrait, un téléchargement ou une réponse. La première fois seulement.
- parcel.approved
- Le client l’a validé.
- parcel.changes_requested
- Le client demande des corrections ;
data.commentdit lesquelles. - parcel.deleted
- Le code a été supprimé : par vous, ou par le téléchargement d’un colis à usage unique.
DROP_WEBHOOK_URL=https://n8n.example.com/webhook/…,https://your.app/api/colis
DROP_WEBHOOK_SECRET=… # 32 characters or more: openssl rand -base64 32data ne contient jamais le mot de passe, son empreinte, ni le jeton de l’expéditeur. La note disparaît des événements avec le colis ; le nom, la taille et le type sont gardés avec l’accusé, si bien qu’une validation qui suit un téléchargement unique nomme toujours le fichier.
02Signature
Standard Webhooks, HMAC-SHA256.
Trois en-têtes sur chaque requête. Vérifiez-les avec la fonction même qui sert à signer.
POST https://your.receiver/colis
content-type: application/json
webhook-id: 5f0c6f7e-…
webhook-timestamp: 1790078400
webhook-signature: v1,<base64 HMAC-SHA256 of "${id}.${timestamp}.${body}">import { verifyWebhook } from '@colis/protocol'
const body = await request.text() // the raw body, before any JSON.parse
const result = await verifyWebhook(process.env.DROP_WEBHOOK_SECRET!, request.headers, body)
if (!result.valid) return new Response(null, { status: 401 }) // result.reason says whyCinq minutes
Un horodatage décalé de plus de cinq minutes est refusé : un ancien envoi ne peut pas être rejoué.
Trois tentatives
Espacées de 0,5 s puis 2 s, cinq secondes chacune. Un 4xx autre que 408 et 429 n’est pas retenté, et une redirection n’est pas suivie. Dédoublonnez sur webhook-id : une nouvelle tentative porte le même.
Jamais bloquant
Un destinataire qui reste injoignable manque l’événement, journalisé avec son origine seulement. Aucun envoi ni téléchargement n’échoue à cause de lui.
03n8n
Deux nœuds.
`n8n-nodes-colis` lance un workflow à chaque étape de la vie d’un colis, et en envoie, lit ou supprime depuis un workflow.
n8n-nodes-colis
- Colis Trigger
- Lance le workflow sur les événements choisis. Avec le secret dans ses identifiants, il répond 401 à tout ce qui est non signé, falsifié ou trop ancien, et 200 sans rien lancer à un événement non choisi.
- Colis
- Send envoie un fichier binaire avec les options de la page, Get lit ses métadonnées, Get Status le statut de sa livraison, Delete le supprime. Le champ code accepte un code tel que tapé, ou le lien de retrait.
Mise en place
- 01Créez des identifiants Colis API : l’URL de base du déploiement, son mot de passe d’envoi pour Send, et son secret de webhook pour le déclencheur.
- 02Ajoutez un Colis Trigger, choisissez les événements, et copiez son URL de production.
- 03Collez cette URL dans
DROP_WEBHOOK_URLdu déploiement, le même secret dansDROP_WEBHOOK_SECRET, redéployez, et activez le workflow.
# n8n: Settings → Community nodes → Install → n8n-nodes-colis
# self-hosted, without that screen:
cd ~/.n8n/nodes && npm install n8n-nodes-colis
# then restart n8nSend envoie en une seule requête : le fichier doit tenir dans le DROP_MAX_SIZE_MB du déploiement. Les gros fichiers passent par la page.
04Workflows
Quoi brancher.
Trois cas d’usage détaillés, chacun avec ses points de vigilance.
Vous envoyez. Ils valident. Vous le savez.
Votre stockage, une page de livraison à votre nom, un webhook à chaque étape. Rien d’hébergé chez un tiers.