Eine Bestellung beginnt, wenn Ihr Kunde im Konfigurator ein Angebot bestätigt. Ab diesem Moment ist sie ein gespeicherter, signierter Datensatz, und CutOptim informiert Sie auf zwei Wegen darüber.
Was eine Bestellung ist
Ein Bestelldokument enthält die Zuschnittliste, die verwendeten ganzen Platten, Beschläge, verleimte Platten, den Schnittplan und das Angebot mit seinen Positionen und Summen in ganzen Einheiten der kleinsten Währungseinheit. Es ist signiert und kann daher nachträglich nicht geändert werden. Wird dieselbe Bestellanfrage zweimal gesendet, wird dieselbe Bestellung zurückgegeben, nie eine zweite.
Da der Preis auf dem Server aus Ihren veröffentlichten Regeln stammt, vertraut Ihr Shop dem Browser dafür nicht. Bevor Ihr Warenkorb eine Position annimmt, bittet Ihr Server CutOptim mit Ihrem geheimen Schlüssel, das Angebot zu prüfen. Der fertige Weg ist das WooCommerce-Plug-in; für andere Shops siehe individuelle Plattformen.
Webhook-Zustellung
Fügen Sie der Liste channels.webhooks Ihrer Konfiguration (Kategorie Advanced, JSON-Editor) einen Webhook hinzu und veröffentlichen Sie. Jeder Eintrag hat eine id, eine url und die gewünschten events. Die URL muss eine öffentliche HTTPS-Adresse sein; private, lokale und interne Adressen werden beim Speichern und erneut beim Senden abgewiesen. Es werden zwei Ereignisse gesendet:
- order.created, wenn ein Kunde eine Bestellung aufgibt.
- order.status_changed, wenn Sie eine Bestellung in einen neuen Status setzen.
Jede Zustellung ist ein POST mit einem kanonischen JSON-Body und diesen Headern: CutOptim-Signature, CutOptim-Event-Id, CutOptim-Event-Type, CutOptim-Delivery-Attempt und CutOptim-Delivery-Id. Die Signatur lautet t=<unix seconds>,v1=<hex>, ein HMAC-SHA256 von <t>.<raw body> mit dem Empfänger-Secret. Ihr Empfänger sollte:
- den rohen Body lesen, bevor er ihn parst;
- prüfen, dass der Zeitstempel innerhalb weniger Minuten liegt, und die Signatur in konstanter Zeit vergleichen;
- einen von mehreren
v1-Werten akzeptieren, die erscheinen, während ein Secret rotiert wird; - rasch mit einem 2xx-Status antworten und eine Ereignis-ID nur einmal verarbeiten.
Das Empfänger-Secret wird Ihrem Server mit POST /cfg/v1/admin/webhooks/<id>/secret beim Dienst und Ihrem geheimen Schlüssel offengelegt. Es wird nicht in der Konsole angezeigt.
Eine Antwort ohne 2xx, ein Timeout oder eine Weiterleitung zählt als Fehlschlag. Wiederholungen warten 1, 5, 25 und 125 Minuten, dann 6 Stunden, und der sechste fehlgeschlagene Versuch markiert die Zustellung als dead. Eine erneute Zustellung wiederholt dieselbe Ereignis-ID, sodass Ihr Empfänger sie erkennen kann. Andere Ereignistypen in der Konfiguration, etwa Angebots- oder Projektereignisse, werden akzeptiert, aber nie gesendet.
Im Abschnitt channels.email Ihrer Konfiguration listen Sie die Empfängeradressen des Shops auf (tenantRecipients) und können eine Kopie an den Kunden einschalten (sendCustomerCopy). Die Mail an den Shop enthält ein Arbeitsblatt und ein Etiketten-PDF; die Kundenkopie geht nur hinaus, wenn Sie sie aktiviert haben und die Bestellung eine Kundenreferenz mit hinterlegter Adresse trägt, und eine Antwort darauf erreicht Ihren ersten Empfänger. Die Status-Mail wird nur versendet, wenn Sie sie beim Ändern eines Status anfordern. Ein Versandfehler blockiert die Bestellung nie. Eine Sandbox sendet nur an die bestätigte Adresse des Inhabers und nie an einen Kunden.
Die Bestellkonsole
Der Bereich Orders der Konsole listet Bestellungen nach Status und Datum auf und öffnet eine Bestellung mit Zuschnittliste, Preispositionen, Summen und Verlauf. Inhaber und Administrator sehen außerdem die Zustellprotokolle für Webhook und E-Mail, mit einer Schaltfläche Redeliver, die eine Kopie einer abgeschlossenen, fehlgeschlagenen oder toten (dead) Zustellung einreiht. Eine Zustellung, die noch wartet oder läuft, kann nicht erneut zugestellt werden.
Um einen Status zu ändern, wählen Sie den nächsten Status, fügen eine optionale Notiz hinzu und entscheiden, ob der Kunde per E-Mail informiert wird. Die erlaubten Übergänge sind:
| Von | Nach |
|---|---|
| Eingegangen (received) | Bestätigt (confirmed), Storniert (cancelled) |
| Bestätigt (confirmed) | In Produktion (in production), Storniert (cancelled) |
| In Produktion (in production) | Versendet (shipped), Storniert (cancelled) |
| Versendet (shipped) | Abgeschlossen (completed) |
Abgeschlossene und stornierte Bestellungen ändern sich nicht mehr. Bestellungen werden nie aus der Konsole gelöscht; sie sind Geschäftsunterlagen.
Die Tracking-Seite
Der Tracking-Link des Kunden zeigt die Bestellnummer, den Namen Ihres Shops, die Statusschritte mit der Zeit jedes Schritts, die Anzahl der Teile und die Summe, in einer von zehn Sprachen. Er zeigt keine Adresse oder E-Mail, keine Zuschnittliste und nie Ihre Notizen und enthält keine Scripts. Der Link lässt sich nicht erraten, gehört zu genau einer Bestellung und läuft 365 Tage nach der Bestellung ab. Wenn Sie den Link für ein Telefonat brauchen, kann Ihr Server ihn mit dem geheimen Schlüssel anfordern; die Konsole zeigt ihn nicht an.
Produktionsdateien
Jede Bestellung kann in der Bestelldetailansicht als sieben Dateien heruntergeladen werden:
| Datei | Verwendung |
|---|---|
| Teileliste (CSV) | die Teile mit Maßen und Stückzahlen |
| Platzierungen (CSV) | wo jedes Teil auf jeder Platte liegt |
| Zeichnung (SVG) | der Plan, zum Ansehen oder Drucken |
| CNC-Zeichnung (DXF) | für CNC-Software |
| Etiketten (PDF) | Teileetiketten |
| Arbeitsblatt (PDF) | ein Blatt für die Werkstatt |
| ERP-Auszug (JSON) | für Ihr ERP-System |
Die PDFs werden aus der Bestellung neu aufgebaut und abgelehnt, wenn sich der Plan nicht exakt reproduzieren lässt; in diesem Fall stehen die übrigen Dateien weiterhin zur Verfügung. Die PDFs sind auf Englisch. Einen Excel-Export für eine Bestellung gibt es nicht, und 1D- oder Holzbestellungen gibt es noch nicht, daher wird dafür nichts exportiert.
Was nicht abgedeckt ist
- Der Konfigurator nimmt keine Zahlungen entgegen; Zahlung und Abwicklung bleiben in Ihrem Shop.
- Es gibt keine Status-Sammeländerung.
- Ein Tracking-Link kann nicht einzeln widerrufen werden; er läuft von selbst ab.