Intégration
Imprimer du ZPL depuis S3 ou Azure Blob - et y archiver les étiquettes imprimées
Le stockage objet est l'endroit où les fichiers d'impression se trouvent déjà : étiquettes de transporteur fournies par le prestataire d'expédition, lots pré…
Le stockage objet est l'endroit où les fichiers d'impression se trouvent déjà : étiquettes de transporteur fournies par le prestataire d'expédition, lots pré-rendus par l'ERP, archives conservées pour les obligations de conservation. Ce guide couvre les deux sens - imprimer du ZPL depuis un bucket, et réécrire le ZPL imprimé dans un bucket.
Tout s'applique à Amazon S3 et à Azure Blob Storage. Comme l'interface S3 est standardisée, MinIO, Cloudflare R2, Wasabi, Backblaze B2 et Ceph fonctionnent aussi.
Créer une connexion de stockage
Sous Flux de données → Stockage → Nouvelle connexion, tu crées la connexion une seule fois. Le nom compte : c'est par lui que les messages s'adressent ensuite à la connexion.
| Champ | S3 | Azure Blob |
|---|---|---|
| Bucket / conteneur | nom du bucket | nom du conteneur |
| Région | p. ex. eu-central-1 | non utilisé |
| Point de terminaison | vide pour AWS, sinon p. ex. https://minio.example.com | non utilisé |
| Path-style | à activer pour MinIO et Ceph | non utilisé |
| Préfixe | facultatif, p. ex. zpl/ | facultatif |
| Identifiants | AccessKey=…;SecretKey=… | chaîne de connexion ou URL SAS du conteneur |
Les identifiants sont stockés chiffrés en AES dans la base de données de la plateforme. Ils ne repartent jamais vers le navigateur - le formulaire indique seulement que des identifiants existent. Avec S3, tu peux même les omettre entièrement : la chaîne d'identifiants AWS habituelle s'applique alors, par exemple le rôle IAM de l'environnement.
Test vérifie que le bucket et les permissions sont corrects avant que quoi que ce soit ne soit imprimé.
Sens 1 : imprimer du ZPL depuis le bucket
Un message de bus peut transporter du ZPL fini. Pour les gros fichiers, c'est peu pratique - de nombreux brokers limitent la taille des messages, et une étiquette avec un graphique intégré grossit vite. Mieux vaut que le message se contente d'y renvoyer.
{
"schemaVersion": 1,
"printer": "rp:7",
"zplRef": { "storage": "archive", "key": "orders/4711.zpl" }
}
storage est le nom de ta connexion, key la clé de l'objet dans cette connexion. Un préfixe configuré est ajouté devant : avec le préfixe zpl/, l'exemple ci-dessus donne zpl/orders/4711.zpl.
Le fichier est récupéré au moment de l'impression, pas à la réception. Le nom n'est résolu que dans ton propre périmètre ou celui de ton entreprise - la connexion de quelqu'un d'autre ne peut pas être atteinte par un message, même par une personne qui connaît son nom.
Sens 2 : stocker le ZPL imprimé et le signaler
Le sens inverse s'appelle une cible de sortie. Elle regroupe trois étapes qui s'exécutent après une impression réussie, et chacune s'active séparément :
1. Stocker - le ZPL imprimé est écrit sous forme de fichier dans une connexion de stockage.
2. Notifier - un message part vers un bus, n'importe lequel des sept.
3. Déclencher - un HTTP POST vers ta propre URL, signé HMAC-SHA256.
Le nom de fichier provient d'un modèle. Toutes les heures sont en UTC :
Modèle : {yyyy}/{MM}/{dd}/{subscription}/{id}.zpl
Résultat : 2026/09/09/Outbound/8f3c1e2a9b7d4c0e.zpl
Sont disponibles {yyyy} {MM} {dd} {HH} {mm} {ss}, {subscription}, {printer}, {key} (la clé du message de bus) et {id} pour un identifiant unique par étiquette.
La notification et le webhook reçoivent le même payload :
{
"schemaVersion": 1,
"event": "label.printed",
"utc": "2026-09-09T12:34:56.7890000Z",
"subscription": "Outbound",
"printer": "rp:7",
"storageKey": "zpl/2026/09/09/Outbound/8f3c1e2a.zpl",
"storageUrl": "https://archive.s3.eu-central-1.amazonaws.com/zpl/2026/09/09/...",
"zplBytes": 812,
"zpl": null
}
Le ZPL lui-même n'est inclus que si tu le demandes explicitement. Sinon, le champ vaut null et l'URL suffit - ce qui garde le message léger.
À quoi cela sert
- Obligations de conservation. Les étiquettes d'expédition sont des pièces à conserver. Une archive dans ton propre bucket, soumise aux règles de cycle de vie de ton fournisseur, y répond sans second système.
- Réimpressions sans nouveau rendu. Ce qui a été imprimé une fois existe octet pour octet. Une réimpression est le même fichier, pas un nouveau rendu.
- Transmission aux systèmes en aval. Le webhook indique à l'ERP que le carton 12 a été étiqueté, et lui transmet en même temps le lien vers la pièce.
Une panne de stockage n'arrête jamais l'impression
Le stockage, la notification et le webhook s'exécutent tous après l'impression. Si le bucket est brièvement injoignable, l'étiquette est imprimée malgré tout ; l'erreur apparaît sous forme de texte dans le journal de l'abonnement. Une archive ne doit pas freiner l'exploitation.
Une cible de sortie peut être testée à tout moment avec Test : elle stocke un ZPL d'exemple et déclenche la notification et le webhook sans rien imprimer.