Aller au contenu
colis

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.

parcel.approved
{
  "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.comment dit lesquelles.
parcel.deleted
Le code a été supprimé : par vous, ou par le téléchargement d’un colis à usage unique.
sur la page de livraison
DROP_WEBHOOK_URL=https://n8n.example.com/webhook/…,https://your.app/api/colis
DROP_WEBHOOK_SECRET=…   # 32 characters or more: openssl rand -base64 32

data 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.

ce qui arrive
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}">
ce que vous vérifiez
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 why

Cinq 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

  1. 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.
  2. 02Ajoutez un Colis Trigger, choisissez les événements, et copiez son URL de production.
  3. 03Collez cette URL dans DROP_WEBHOOK_URL du déploiement, le même secret dans DROP_WEBHOOK_SECRET, redéployez, et activez le workflow.
installez-le depuis n8n
# n8n: Settings → Community nodes → Install → n8n-nodes-colis
# self-hosted, without that screen:
cd ~/.n8n/nodes && npm install n8n-nodes-colis
# then restart n8n

Send 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.

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.