
Foto von Luke Heibert auf Unsplash
Die meisten Shops, mit denen wir sprechen, hatten nicht geplant, an drei Orten zu verkaufen. Es ist einfach passiert. Zuerst kam Shopify, dann eine WooCommerce-Seite für eine zweite Marke, dann ein Marktplatz oder ein B2B-Portal, das dienstags eine Tabelle per E-Mail schickt.
Jeder davon führt seine eigene Bestellliste. Jeder hat seine eigene Vorstellung davon, was eine Bestellung ist. Und die Person, die packt, muss alle drei im Kopf behalten.
Was ein Verkaufskanal ist
In Zippendo kommt jede Bestellung über einen Verkaufskanal an, und ein Kanal ist die Verbindung zu einem Quellsystem. Es gibt vier Arten:
- Shopify. Du installierst die App, und Bestellungen kommen an, sobald sie aufgegeben werden. Ausführungen und Sendungsnummern gehen den umgekehrten Weg zurück.
- WooCommerce. Dasselbe über unser Plugin, dazu Live-Versandpreise und Paketshops im Checkout.
- Eigener Kanal. Dein eigener Onlineshop, dein ERP oder deine Marktplatz-Anbindung schickt uns Bestellungen über einen signierten Webhook.
- Manuell. Gar kein Quellsystem. Bestellungen, die du selbst eintippst, oder solche, die ein Importer beim Umzug von einem anderen System angelegt hat.
Egal welcher Kanal es ist, die Bestellung sieht gleich aus, sobald sie beim Versand ankommt. Genau darum geht es bei dieser Abstraktion.
Der eigene Kanal, weil alle danach fragen
Wenn wir keine Integration für dein System haben, bekommst du einen Kanal mit eigenem Signatur-Secret und einer Ingest-URL. Dein System sendet die Bestellung per POST, signiert den Body mit HMAC-SHA256 und setzt einen Topic-Header für erstellt, geändert oder storniert.
Die Prüfung ist fail-closed. Kein Secret, keine Signatur oder eine Signatur, die nicht passt, und du bekommst einen 401, statt dass wir raten, was du gemeint hast.
Das wichtigste Feld ist externalId, deine eigene ID für die Bestellung. Darüber identifizieren wir sie. Sendest du dieselbe Bestellung zweimal, aktualisiert die zweite die erste, statt einen Zwilling anzulegen. Wenn deine Retry-Schleife also um zwei Uhr nachts dreimal feuert, weil unsere Antwort langsam war, hast du am Ende trotzdem nur eine Bestellung.
Es gibt auch einen REST-Endpunkt, falls Webhooks auf deiner Seite umständlich sind. Gleiche Regeln, nur dass eine doppelte externalId einen 409 statt einer Aktualisierung bekommt, weil du dort darum gebeten hast, etwas zu erstellen, und nicht, es zu synchronisieren.
Wo die Kanäle keine Rolle mehr spielen
Sind die Bestellungen erst einmal da, ist der Kanal meist nur noch eine Bezeichnung. Versandregeln ist es egal, woher eine Bestellung kommt, außer du sagst ihnen etwas anderes. Schreib die Regel einmal, dieses Gewicht zu jenem Versanddienstleister, dieses Land an einen Paketshop, und sie gilt für alle Kanäle.
An zwei Stellen spielt der Kanal noch eine Rolle. Die Ausführung geht an das System zurück, aus dem die Bestellung kam: Shopify bekommt seine Ausführung und Woo seine Sendungsnummer. Und wenn du Marken nutzt, gehört ein Kanal zu genau einer Marke. So bekommt ein zweiter Shop seinen eigenen Namen auf dem Lieferschein, ohne dass du ein zweites Konto brauchst.
Der Teil, der wirklich nervt
Bestellstatus bedeuten nicht auf jeder Plattform dasselbe, und kein noch so ausgefeiltes Mapping behebt das vollständig. Was wir tun: Wir lassen keinen Status zurückfallen. Hat eine Sendung schon einen späteren Zustand erreicht, kann ein verspätetes Update sie nicht zurückziehen. Das verhindert das Schlimmste. Es sorgt aber nicht dafür, dass sich drei Plattformen einig sind, was „in Bearbeitung“ bedeutet, und wir haben aufgehört, so zu tun, als könnte es das.
Wenn du mehr als einen Shop in mehr als einem Browser-Tab betreibst, ist dieser Teil von Zippendo für dich gebaut. Verbinde den zweiten Kanal und schau, ob man am Packtisch überhaupt einen Unterschied merkt.