Une commande commence quand votre client confirme un devis dans le configurateur. À partir de ce moment, c’est un enregistrement stocké et signé, et CutOptim vous en informe de deux façons.
Ce qu’est une commande
Un document de commande contient la liste de coupe, les panneaux entiers utilisés, la quincaillerie, les panneaux contrecollés, le plan de coupe, et le devis avec ses lignes et ses totaux en unités monétaires mineures entières. Il est signé, il ne peut donc plus être modifié par la suite. Envoyer deux fois la même requête de commande renvoie la même commande, jamais une seconde.
Comme le prix provient de vos règles publiées côté serveur, votre boutique ne se fie pas au navigateur pour celui-ci. Avant que votre panier n’accepte une ligne, votre serveur demande à CutOptim de vérifier le devis avec votre clé secrète. La solution prête à l’emploi est le plug-in WooCommerce ; pour les autres boutiques, voir les plateformes sur mesure.
Livraison par webhook
Ajoutez un webhook à la liste channels.webhooks de votre configuration (catégorie Advanced, éditeur JSON) et publiez. Chaque entrée comporte un id, une url et les events souhaités. L’URL doit être une adresse HTTPS publique ; les adresses privées, locales et internes sont refusées à l’enregistrement, puis de nouveau à l’envoi. Deux événements sont envoyés :
- order.created lorsqu’un client passe une commande.
- order.status_changed lorsque vous faites passer une commande à un nouveau statut.
Chaque livraison est une requête POST avec un corps JSON canonique et ces en-têtes : CutOptim-Signature, CutOptim-Event-Id, CutOptim-Event-Type, CutOptim-Delivery-Attempt et CutOptim-Delivery-Id. La signature est t=<unix seconds>,v1=<hex>, un HMAC-SHA256 de <t>.<raw body> avec le secret du récepteur. Votre récepteur doit :
- lire le corps brut avant de l’analyser ;
- vérifier que l’horodatage date de quelques minutes au plus et comparer la signature en temps constant ;
- accepter n’importe laquelle de plusieurs valeurs
v1, qui apparaissent pendant la rotation d’un secret ; - répondre rapidement par un statut 2xx, et ne traiter qu’une seule fois un identifiant d’événement.
Le secret du récepteur est révélé à votre serveur par POST /cfg/v1/admin/webhooks/<id>/secret sur le service, avec votre clé secrète. Il n’est pas affiché dans la console.
Une réponse non 2xx, un délai dépassé ou une redirection compte comme un échec. Les nouvelles tentatives attendent 1, 5, 25 et 125 minutes, puis 6 heures, et la sixième tentative échouée marque la livraison comme morte. Une nouvelle livraison répète le même identifiant d’événement afin que votre récepteur puisse la reconnaître. Les autres types d’événements présents dans la configuration, comme les événements de devis ou de projet, sont acceptés mais jamais envoyés.
Dans la section channels.email de votre configuration, vous listez les adresses destinataires de la boutique (tenantRecipients) et pouvez activer une copie au client (sendCustomerCopy). L’e-mail de la boutique contient une fiche de travail et un PDF d’étiquettes ; la copie au client n’est envoyée que si vous l’avez activée et que la commande porte une référence client avec une adresse enregistrée, et y répondre atteint votre premier destinataire. L’e-mail de statut n’est envoyé que si vous le demandez lors d’un changement de statut. Un échec d’envoi ne bloque jamais la commande. Un sandbox n’écrit qu’à l’adresse confirmée du propriétaire et jamais à un client.
La console des commandes
La zone Orders de la console liste les commandes par statut et par date, et ouvre une commande pour en afficher la liste de coupe, les lignes de prix, les totaux et l’historique. Le propriétaire et l’administrateur voient aussi les journaux de livraison des webhooks et des e-mails, avec un bouton Redeliver qui met en file une copie d’une livraison terminée, échouée ou morte. Une livraison encore en attente ou en cours ne peut pas être renvoyée.
Pour changer un statut, vous choisissez le statut suivant, ajoutez une note facultative et décidez d’envoyer ou non un e-mail au client. Les passages autorisés sont :
| De | Vers |
|---|---|
| reçue (received) | confirmée (confirmed), annulée (cancelled) |
| confirmée (confirmed) | en production (in production), annulée (cancelled) |
| en production (in production) | expédiée (shipped), annulée (cancelled) |
| expédiée (shipped) | terminée (completed) |
Les commandes terminées et annulées ne bougent plus. Les commandes ne sont jamais supprimées depuis la console ; ce sont des documents commerciaux.
La page de suivi
Le lien de suivi du client affiche le numéro de commande, le nom de votre boutique, les étapes du statut avec l’heure de chacune, le nombre de pièces et le total, dans l’une des dix langues. Il n’affiche ni adresse ni e-mail, ni liste de coupe, et jamais vos notes, et il ne contient aucun script. Le lien ne peut pas être deviné, appartient à une seule commande et expire 365 jours après la commande. Si vous avez besoin du lien pour un appel téléphonique, votre serveur peut le demander avec la clé secrète ; la console ne l’affiche pas.
Fichiers de production
Chaque commande peut être téléchargée sous forme de sept fichiers depuis le détail de la commande :
| Fichier | Usage |
|---|---|
| Liste de pièces (CSV) | les pièces avec dimensions et quantités |
| Positions (CSV) | l’emplacement de chaque pièce sur chaque panneau |
| Dessin (SVG) | le plan, à consulter ou à imprimer |
| Dessin CNC (DXF) | pour les logiciels de CNC |
| Étiquettes (PDF) | étiquettes de pièces |
| Fiche de travail (PDF) | une fiche pour l’atelier |
| Extrait ERP (JSON) | pour votre système ERP |
Les PDF sont reconstruits à partir de la commande, et refusés lorsque le plan ne peut pas être reproduit exactement ; dans ce cas, les autres fichiers restent disponibles. Les PDF sont en anglais. Il n’existe pas d’export Excel pour une commande, et les commandes 1D ou bois n’existent pas encore, rien n’est donc exporté pour elles.
Ce qui n’est pas couvert
- Le configurateur n’encaisse aucun paiement ; le paiement et l’exécution restent dans votre boutique.
- Il n’y a pas de changement de statut en masse.
- Un lien de suivi ne peut pas être révoqué individuellement ; il expire de lui-même.