Introduction
L'import en masse de commande vous permettra de créer de nombreuses commandes directement depuis l'interface WOOP, et ce, en quelques clics.
Cette fonctionnalité est accessible depuis la page livraison, via le bouton "action" située en haut à droite des livraisons.
Une fois la fonctionnalité sélectionnée, plusieurs champs seront à remplir:
- Enseigne : Entité pour laquelle vous souhaitez générer des commandes (le champ sera présélectionné si vous détenez un compte paramétré sur un contexte enseigne)
- L'import d'un fichier de commande: Fichier qui servira de base à la génération des commandes
- Modèles: Il s'agit de modèles de fichier pour vous guider dans la génération des commandes (Si vous n'êtes pas familier du format JSON, nous vous conseillons de récupérer le format CSV et de l'ouvrir dans Excel ou Google GSheet).
Remplissage du fichier de commandes
Fonctionnement général
Le fichier à importer est converti en JSON (si le fichier reçu était de type CSV) puis passe par plusieurs étapes de traitement. Ces traitements se font commande par commande:
- Transformation des données en JSON (si le fichier est un CSV)
- Récupération de chaque clé à enregistrer en base de données (champ entre parenthèses dans l’entête du CSV).
- Vérification pour voir si les types de données correspondent bien à ce qui est attendu.
- Vérification pour voir si tous les champs obligatoires de notre API possèdent bien une valeur.
- Si un point relais/exchange place est renseigné en tant qu’adresse de picking ou delivery, nous vérifions qu’il existe réellement et nous récupérons ses informations
Durant les différentes étapes, nous vérifions les potentielles erreurs du fichier et ces erreurs sont stockées afin de pouvoir les afficher dans le résultat de l’import du fichier, à la fin du traitement.
Une fois ces vérifications terminées, les commandes n’ayant aucune erreur sont envoyées à notre API afin d’être enregistrées.
Lorsque toutes les commandes sont enregistrées, l’interface passe à la phase résultat pour vous informer du nombre de commandes validées et en erreur.
Remplissage du fichier de commandes
Champs (* obligatoire) | Format de données | Commentaires |
Numéro de commande (externalOrderId)* |
36 caractères maximum Chaîne de caractères |
Numéro unique de la commande. Ex: ORDER12345678 |
Numéro de référence (referenceNumber) | Chaîne de caractères |
Référence de la commande, peut être identique au numéro de commande Ex: REF12345678 |
ID du magasin (storeId)* | Chaîne de caractères |
ID du magasin associé à la commande Ex: 5412EE |
Code d'état de la commande (state.code) |
Valeurs autorisées: ORDER_TO_BE_COMPLETED, ORDER_WITHOUT_SHIPMENT |
Ex: “ORDER_TO_BE_COMPLETED” |
ID de livraison (state.options.deliveryId) | Chaîne de caractères |
ID de livraison de la commande Ex: delivery1 |
Numéros de colis (state.options.parcelIds) | Liste de chaînes de caractères |
Liste des ID de colis Ex: “parcel1,parcel14” |
Type de lieu de collecte (picking.location.type)* |
Chaîne de caractères Valeurs autorisées: address, exchangePlace, pickupPoint |
Type d’adresse du lieu de collecte Ex: pickupPoint |
ID de lieu de collecte (picking.location.id) | Chaîne de caractères |
ID du lieu de collecte (si le type d’adresse est exchangePlace ou pickupPoint) Ex: FR00149 |
Code transporteur pour point relais (picking.location.carrierCode) | Chaîne de caractères |
Code du transporteur (si le type d’adresse est pickupPoint) Ex: mondial-relay |
Adresse ligne 1 de collecte (picking.location.addressLine1)* | Chaîne de caractères |
Adresse complète du lieu de collecte Ex: 65 Rue de Luxembourg |
Adresse ligne 2 de collecte (picking.location.addressLine2) | Chaîne de caractères | Complément d’adresse |
Ascenseur? (picking.location.elevator) | Booléen |
Présence d’un ascenseur Ex: true (si oui), false (si non) |
Étage numéro (picking.location.floor) | Nombre |
Etage du lieu de collecte Ex: 4 |
Code porte (picking.location.doorCode) | Chaîne de caractères |
Code de la porte du lieu de collecte Ex: 1234A |
Code postal de collecte (picking.location.postalCode)* | Chaîne de caractères |
Code postal du lieu de collecte Ex: 59800 |
Ville de collecte (picking.location.city)* | Chaîne de caractères |
Ville du lieu de collecte Ex: Lille |
Quartier de collecte (picking.location.district) | Chaîne de caractères | Quartier du lieu de collecte |
Pays de collecte (picking.location.country)* | Chaîne de caractères |
Code du pays de collecte Ex: FR |
Commentaire (picking.location.comment) | Chaîne de caractères | |
Latitude (picking.location.coordinates.latitude) | Nombre | |
Longitude (picking.location.coordinates.longitude) | Nombre | |
Début intervalle de collecte (picking.interval.start)* | Datetime |
Ex: 2025-01-10T13:00:00 Il est possible d'entrer uniquement la date 2025-01-10, l'heure de début de collecte sera 00h par défaut |
Fin intervalle de collecte (picking.interval.end)* | Datetime |
Ex: 2025-01-10T14:59:59 Il est possible d'entrer uniquement la date 2025-01-10, l'heure de fin de collecte sera 23h59 par défaut |
Prénom contact de collecte (picking.contact.firstName)* | Chaîne de caractères |
Prénom du contact du lieu de collecte Ex: Joe |
Nom contact de collecte (picking.contact.lastName)* | Chaîne de caractères |
Nom du contact du lieu de collecte Ex: DOE |
Téléphone contact de collecte (picking.contact.phone)* | Chaîne de caractères |
Numéro de téléphone du contact du lieu de collecte Ex: +33601020304 |
Email contact de collecte (picking.contact.email)* | Chaîne de caractères |
Adresse email du contact du lieu de collecte Ex: joedoe@gmail.com |
Langue contact de collecte (picking.contact.language)* | Chaîne de caractères |
Code du langage du contact du lieu de collecte Ex: fr |
Fuseau horaire contact de collecte (picking.contact.timezone)* | Chaîne de caractères |
Fuseau horaire du contact de collecte Ex: Europe/Paris |
Contact principal? (picking.contact.main) | Booléen | Ex: true (si oui), false (si non) |
Titre contact de collecte (picking.contact.title) | Chaîne de caractères | Ex: Manager |
Contact professionnel? (picking.contact.isProfessional) | Booléen | Ex: true (si oui), false (si non) |
Nom entreprise contact de collecte (picking.contact.companyName) | Chaîne de caractères | Ex: Woop |
Type de lieu de livraison (delivery.location.type)* |
Chaîne de caractères Valeurs autorisées: address, exchangePlace, pickupPoint |
Type d’adresse du lieu de livraison Ex: address |
ID de lieu de livraison (delivery.location.id) | Chaîne de caractères | ID du lieu de livraison (si le type d’adresse est exchangePlace ou pickupPoint) |
Code transporteur pour point relais - livraison (delivery.location.carrierCode) | Chaîne de caractères | Code du transporteur (si le type d’adresse est pickupPoint) |
Adresse ligne 1 de livraison (delivery.location.addressLine1)* | Chaîne de caractères |
Adresse complète du lieu de livraison Ex: 65 Rue de Luxembourg |
Adresse ligne 2 de livraison (delivery.location.addressLine2) | Chaîne de caractères | Complément d’adresse |
Ascenseur? (delivery.location.elevator) | Booléen |
Présence d’un ascenseur Ex: true (si oui), false (si non) |
Étage numéro (delivery.location.floor) | Nombre |
Etage du lieu de livraison Ex: 4 |
Code porte (delivery.location.doorCode) | Chaîne de caractères |
Code de la porte du lieu de livraison Ex: 1234A |
Code postal de livraison (delivery.location.postalCode)* | Chaîne de caractères |
Code postal du lieu de livraison Ex: 59800 |
Ville de livraison (delivery.location.city)* | Chaîne de caractères |
Ville du lieu de livraison Ex: Lille |
Quartier de livraison (delivery.location.district) | Chaîne de caractères | Quartier du lieu de livraison |
Pays de livraison (delivery.location.country)* | Chaîne de caractères |
Code du pays de livraison Ex: FR |
Commentaire (delivery.location.comment) | Chaîne de caractères | |
Latitude (delivery.location.coordinates.latitude) | Nombre | |
Longitude (delivery.location.coordinates.longitude) | Nombre | |
Début intervalle de livraison (delivery.interval.start)* | Datetime |
Ex: 2025-01-10T15:00:00 Il est possible d'entrer uniquement la date 2025-01-10, l'heure de début de livraison sera 00h par défaut |
Fin intervalle de livraison (delivery.interval.end)* | Datetime |
Ex: 2025-01-10T16:59:59 Il est possible d'entrer uniquement la date 2025-01-10, l'heure de fin de livraison sera 23h59 par défaut |
Prénom contact de livraison (delivery.contact.firstName)* | Chaîne de caractères |
Prénom du contact du lieu de livraison Ex: Joe |
Nom contact de livraison (delivery.contact.lastName)* | Chaîne de caractères |
Nom du contact du lieu de livraison Ex: DOE |
Téléphone contact de livraison (delivery.contact.phone)* | Chaîne de caractères |
Numéro de téléphone du contact du lieu de collecte Ex: +33601020304 |
Email contact de livraison (delivery.contact.email)* | Chaîne de caractères |
Adresse email du contact du lieu de collecte Ex: joedoe@gmail.com |
Langue contact de livraison (delivery.contact.language)* | Chaîne de caractères |
Code du langage du contact du lieu de livraison Ex: fr |
Fuseau horaire contact de livraison (delivery.contact.timezone)* | Chaîne de caractères |
Fuseau horaire du contact de livraison Ex: Europe/Paris |
Méthode de contact satisfaction (delivery.contact.optIn.survey) |
Liste de chaînes de caractères Valeurs autorisées : SMS,MAIL |
Méthode de contact pour les questionnaires de satisfaction Ex: “SMS,MAIL” |
Méthode de contact livraison (delivery.contact.optIn.delivery) |
Liste de chaînes de caractères Valeurs autorisées : SMS,MAIL |
Méthode de contact pour le suivi de livraison Ex: “SMS” |
Contact professionnel? (delivery.contact.isProfessional) | Booléen | Ex: true (si oui), false (si non) |
Nom entreprise contact de livraison (delivery.contact.companyName) | Chaîne de caractères | Ex: Woop |
ID colis (packages.packageId)* | Chaîne de caractères |
ID servant à différencier les colis (uniquement pour les fichiers CSV, information non enregistré avec la commande) Ex: PACKAGE1 |
Référence colis (packages.references.reference) | Chaîne de caractères |
Référence du colis Ex: 12345B |
Valeur du code-barres colis (packages.references.barcode.value) | Chaîne de caractères |
Valeur du code-barres Ex: 54fd56g4f5gfd456sd |
Format du code-barres colis (packages.references.barcode.format) | Chaîne de caractères |
Format du code-barres Ex: 128 |
Type du code-barres colis (packages.references.barcode.type) | Chaîne de caractères |
Type d’affichage du code-barres Ex: barcode |
État de la référence colis (packages.references.state.value) | Chaîne de caractères |
Etat du colis Ex: ON_DOCK |
Date de l'état de la référence colis (packages.references.state.date) | Datetime |
Date de l’état du colis Ex: 2025-01-10T15:00:00 Il est possible d'entrer uniquement la date 2025-01-10, l'heure de l'état du colis sera 23h59 par défaut |
ID de la remorque (packages.references.containerId.trailerId) | Chaîne de caractères | Ex: TRAILER1 |
ID de la palette (packages.references.containerId.palletId) | Chaîne de caractères | Ex: PALLET1 |
Catégorie colis (packages.category) | Chaîne de caractères |
Catégorie du colis Ex: ALIMENTATION |
Longueur colis (packages.length.value)* | Nombre |
Longueur du colis Ex: 20 |
Unité longueur colis (packages.length.unit)* |
Chaîne de caractères Valeurs autorisées: mm, cm, m, in, ft-us, ft |
Unité de la longueur du colis Ex: cm |
Largeur colis (packages.width.value)* | Nombre |
Largeur du colis Ex: 20 |
Unité largeur colis (packages.width.unit)* |
Chaîne de caractères Valeurs autorisées: mm, cm, m, in, ft-us, ft |
Unité de la largeur du colis Ex: cm |
Hauteur colis (packages.height.value)* | Nombre |
Hauteur du colis Ex: 60 |
Unité hauteur colis (packages.height.unit)* |
Chaîne de caractères Valeurs autorisées: mm, cm, m, in, ft-us, ft |
Unité de la hauteur du colis Ex: cm |
Poids colis (packages.weight.value)* | Nombre |
Poids du colis EX: 2.04 |
Unité poids colis (packages.weight.unit)* |
Chaîne de caractères Valeurs autorisées: mg, g, kg, oz, lb, mt, t |
Unité du poids du colis Ex: kg |
Type de produit dans le colis (packages.products.type)* |
Chaîne de caractères Valeurs autorisées: TYPOLOGY_GENERIC, TYPOLOGY_PALLET_GENERIC, TYPOLOGY_GROCERY, TYPOLOGY_FRESH, TYPOLOGY_FROZEN, TYPOLOGY_DANGEROUS, TYPOLOGY_HOUSEHOLD, TYPOLOGY_LARGE_HOUSEHOLD, TYPOLOGY_VOLUMINOUS, TYPOLOGY_FRAGILE, TYPOLOGY_VOLUMINOUS_FRAGILE, TYPOLOGY_NON_STANDARD, TYPOLOGY_SMALL_HOUSEHOLD, TYPOLOGY_DANGEROUS_LIMITED_QUANTITY, TYPOLOGY_HIGHT_VALUE, TYPOLOGY_FURNITURE, TYPOLOGY_LIVING_ANIMALS, TYPOLOGY_MEDICAL_PRODUCTS, TYPOLOGY_FRAGILE_FURNITURE, TYPOLOGY_SMALL_FURNITURE, TYPOLOGY_LARGE_FURNITURE, TYPOLOGY_ASSEMBLED_FURNITURE |
Type de produit dans le colis Ex: TYPOLOGY_FRESH |
EAN du produit (packages.products.ean) | Chaîne de caractères |
Code EAN du produit Ex: 0123456789012 |
CUG du produit (packages.products.cug) | Chaîne de caractères |
Code CUG du produit Ex: 012345678 |
Étiquette produit (packages.products.label) | Chaîne de caractères |
Étiquette du produit Ex: Lot de paquets de pâtes |
Quantité de produits (packages.products.quantity)* | Nombre |
Quantité du produit dans le colis Ex: 1 |
Quantité colis (packages.quantity)* | Nombre |
Quantité du colis Ex: 1 |
Empreinte carbone du colis (packages.attributes.footprint.value) | Nombre |
Empreinte carbone du colis Ex: 13 |
Unité de l'empreinte carbone du colis (packages.attributes.footprint.unit) |
Chaîne de caractères Valeurs autorisées: m2, cm2, pallet |
Unité de l'empreinte carbone du colis Ex: m2 |
Type de colis (packages.type) |
Chaîne de caractères Valeurs autorisées: PACKAGE, TRAY, PALLET |
Type de colis Ex: PACKAGE |
Volume du colis (packages.volume.value) | Chaîne de caractères |
Volume du colis Ex: 15 |
Unité volume colis (packages.volume.unit) |
Chaîne de caractères Valeurs autorisées: mm3, cm3, ml, l, kl, m3, km3, tsp, tbs, in3, fi-oz, cup, pnt, qt, gal, ft3, yd3 |
Unité de volume du colis Ex: cm3 |
Services (services)* |
Liste de chaînes de caractères Valeurs autorisées: SERVICE_ASSEMBLY, SERVICE_INSTALL ,SERVICE_RECOVERY, SERVICE_UNPACKING, SERVICE_FRONT_HOME, SERVICE_REGULAR_FRONT_HOME, SERVICE_PICKUP_POINT, SERVICE_RETURN, SERVICE_SELECTED_ROOM, SERVICE_SIMPLE_INSTALL, SERVICE_COMPLEX_INSTALL, SERVICE_PAY_ON_DELIVERY, SERVICE_STANDARD_TAXI, SERVICE_XL_TAXI, SERVICE_WITH_SIGNATURE, SERVICE_GREEN, SERVICE_SHUTTLE, SERVICE_TWO_DRIVERS, SERVICE_EXHIBITION_MODEL, SERVICE_WHITE_GLOVE, SERVICE_EXCHANGE, SERVICE_DELIVERY_TO_MAILBOX, SERVICE_SCHEDULED, SERVICE_FREIGHT_ELEVATOR |
Liste des services associés à la commande Ex: SERVICE_FRONT_HOME,SERVICE_WITH_SIGNATURE |
Reste à payer (expectedPayment.value) | Nombre |
Prix restant à payer Ex: 15.20 |
Devise (expectedPayment.currency) | Chaîne de caractères |
Devise du restant à payer Ex: EUR |
Méthode de paiement (expectedPayment.paymentMethod) |
Chaîne de caractères Valeurs autorisées: CASH, CREDIT_CARD, DEBIT_CARD, DIRECT_DEBIT, BANK_TRANSFER, CHECK |
Méthode de paiement du reste à payer Ex: CASH |
Clé du tag (tags.key) | Chaîne de caractères |
Clé du tag Ex: origin |
Valeur du tag (tags.value) | Chaîne de caractères |
Valeur associé Ex: web |
Application du tag à l'orchestration (tags.applyToOrchestration) | Vooléen | Ex: true (si oui), false (si non) |
Mode de sélection du transporteur (carrierSelection.mode) |
Chaîne de caractères Valeurs autorisées: INCLUSION, EXCLUSION |
Champ réservé à ‘inclusion ou exclusion d’un transporteur dans le processus d’orchestration |
Codes des transporteurs sélectionnés (carrierSelection.carrierCodes) |
Champ réservé au code transporteur. Rapprochez-vous d’un admin WOOP pour obtenir la liste |
|
Clé des données supplémentaires (additionalData.key) |
Chaîne de caractères champ libre |
Champ réservé pour l’ajout de données additionnelles ex: Date_installation |
Valeur des données supplémentaires (additionalData.value |
Chaîne de caractères champ libre |
Champ réservé pour l’ajout de données additionnelles ex: 18/02/2025 |
Avancé
Champ services, state.options.parcelIds, carrierSelection.carrierCodes et delivery.contact.optIn
Ces champs sont de type "tableau" afin de pouvoir renseigner plusieurs données. Si vous utilisez un fichier CSV, il faut donc renseigner toutes les données sur la même ligne et entre guillemets “”
Exemples:
- services: "SERVICE_FRONT_HOME,SERVICE_WITH_SIGNATURE"
- state.options.parcelIds: "PARCEL1,PARCEL2”
- carrierSelection.carrierCodes: “chronopost,mondial-relay”
- delivery.contact.optIn.survey: “SMS”
- delivery.contact.optIn.survey: “SMS, MAIL”
Tableaux d’objets
Cette partie ne concerne que les fichiers CSV.
Voici la liste des données étant des tableaux d’objets et qui vont être concernés par cette partie:
- packages
- packages.references
- packages.products
- tags
- additionalData
Ces données nécessitent une attention particulière car il faut créer une ligne pour chaque objet de la même famille. Concrètement, si votre commande possède trois tags, il faut dupliquer la commande sur trois lignes et changer à chaque ligne le tag. Si votre commande possède trois tags et quatre additionalData, elle sera donc sur quatre lignes.
Lorsque vous dupliquez une ligne pour ajouter des données à un tableau de données, il ne faut pas modifier les autres données de la commande => ⚠️ Le numéro de commande doit rester identique.
A noter qu’il est possible d’ajouter sur une même ligne un nouveau tag, un additionalData, un package…
Cas particulier pour les packages:
Comme dit précédemment, s'il y a deux packages à renseigner pour la commande, nous devons créer deux lignes CSV pour pouvoir les créer. A chaque ligne, il faudra changer le packageId. Cette valeur importe peu car elle n’est pas enregistrée, mais elle sert à différencier les packages lors du traitement de la commande.
Si chaque package possède deux produits et trois références, alors la commande se fera sur six lignes CSV:
- Première ligne: package 1 produit 1 référence 1
- Deuxième ligne: package 1 produit 2 référence 2
- Troisième ligne: package 1 produit 2 référence 3
- Quatrième ligne: package 2 produit 1 référence 1
- Cinquième ligne: package 2 produit 2 référence 2
- Sixième ligne: package 2 produit 2 référence 3
Le produit doit toujours être renseigné car c’est un champ obligatoire. Si le produit renseigné est déjà présent sur une autre ligne CSV de la commande, il ne sera pas ajouté une deuxième fois à la commande.
Certaines données sont obligatoires et il sera obligatoire de garder par exemple un package par ligne. Aucune donnée ne sera dupliquée si elle est déjà présentes sur une autre ligne CSV de la commande.