Zu Content springen
Shopware

Shopware Order Status: State Machine, Custom States und Flow Builder

von Tim Kelle

Shopware Order Status: State Machine, Custom States und Flow Builder
24:56

Es ist Freitag, 17:30 Uhr. Das Support-Telefon klingelt. Am anderen Ende meldet sich ein Kunde, leicht verunsichert: „Meine Bestellung zeigt ‚offen' – heißt das, ihr habt die Zahlung noch nicht erhalten? Oder liegt das Paket schon bei DHL?" Du öffnest die Bestellübersicht, siehst „offen" und „bezahlt" nebeneinander stehen und merkst: Die Information ist da, aber für den Kunden nicht verständlich aufbereitet. Solche Situationen kennst du? Dann bist du nicht allein. Der Shopware Order Status ist das Herzstück deiner Prozesssteuerung – aber nur, wenn du ihn richtig nutzt, technisch sauber implementierst und mit klarer Governance steuerst – zum Beispiel gemeinsam mit einer Shopware Agentur.

IT-Spezialist analysiert Monitoring-Dashboard mit Performance- und Statusanzeigen am großen Monitor in moderner Büroumgebung

In diesem Artikel zeige ich dir, wie du mit dem Shopware Order Status nicht nur interne Abläufe optimierst, sondern auch technische Mechaniken wie State Machine, Flow Builder und API-Integration meisterst. Du lernst, wie Bestell-, Zahlungs- und Lieferstatus zusammenspielen, welche Entwicklungsarbeit für Custom States nötig ist, wie du Statuswechsel sauber automatisierst ohne doppelte Mails oder Dokumente, wann welche Source of Truth gilt und wie du Performance und Skalierung im Griff behältst. Schritt für Schritt, technisch fundiert und praxisnah – genau so, wie du es im professionellen E-Commerce-Umfeld brauchst.

Die drei Ebenen des Shopware Order Status: Bestell-, Zahlungs- und Lieferstatus verstehen

Bevor wir in die Praxis und technische Umsetzung einsteigen, schauen wir uns an, was der Begriff Shopware Order Status eigentlich umfasst. In Shopware 6 wird nicht einfach nur „ein Status" gesetzt – du steuerst drei parallel laufende Prozessebenen über eine State Machine, die jeweils unterschiedliche Fragen beantworten:

Bestellstatus (Order State): Hier geht es um den Bearbeitungsfortschritt der Bestellung als Ganzes. Typische Zustände sind „offen", „in Bearbeitung", „abgeschlossen" oder „storniert". Dieser Status zeigt dir und deinem Team, ob eine Bestellung noch geprüft werden muss, freigegeben ist oder bereits erledigt wurde. Der Order State ist die zentrale Steuerungsebene für interne Workflows und gibt Auskunft darüber, in welcher Phase sich die Bestellung gerade befindet.

Zahlungsstatus (Transaction / Payment State): Diese Ebene bildet den finanziellen Fortschritt ab. Ist die Zahlung autorisiert, bezahlt, fehlgeschlagen oder bereits erstattet? Der Zahlungsstatus kommt oft direkt aus deinem Payment-Plugin (PayPal, Klarna, Stripe etc.) und ist entscheidend dafür, ob du eine Bestellung überhaupt ausliefern darfst. Hier wird die finanzielle Transaktion abgebildet – unabhängig davon, ob die Ware schon verpackt ist oder noch im Lager liegt.

Lieferstatus (Delivery State): Hier wird die physische Erfüllung abgebildet. Ist die Ware bereit zum Versand, bereits teilweise verschickt, vollständig geliefert oder retourniert? Gerade bei Teillieferungen oder Retouren ist dieser Status Gold wert. Der Delivery State zeigt dir, was logistisch passiert – und ist für Kunden die wichtigste Information, wenn sie wissen wollen, wo ihr Paket ist.

Die State Machine in Shopware 6 ist das Kernkonzept: Status sind Zustände (States) mit erlaubten Übergängen (Transitions). Nicht jeder Status lässt sich direkt in jeden anderen überführen. Stattdessen gibt es definierte Regeln, welche Wechsel möglich sind – das verhindert Fehler, macht Prozesse nachvollziehbar und erlaubt dir, Event Hooks (wie order.state_changed oder checkout.order.placed) gezielt für Automatisierung zu nutzen. Technisch bedeutet das: StateMachineState-Entitäten in der Datenbank, StateMachineTransition-Logik im Core und klar definierte Permissions, wer welche Transitionen ausführen darf.

Wie die State Machine in Shopware 6 technisch funktioniert

Um Custom States oder automatisierte Workflows sauber zu bauen, musst du verstehen, wie die State Machine in Shopware 6 arbeitet. Jede State Machine (Order, Transaction, Delivery) hat eine eigene Tabelle mit States und Transitions. States haben technische Namen (z.B. „open", „paid", „shipped") und übersetzte Labels. Transitions definieren, welcher Übergang von welchem State zu welchem Ziel-State erlaubt ist.

Wenn du einen Status änderst – manuell im Admin oder programmatisch via API – prüft Shopware, ob die gewünschte Transition erlaubt ist. Ist sie es nicht, gibt es eine Exception. Ist sie erlaubt, wird der neue State gesetzt, die History geschrieben und Events gefeuert: state_enter.order_state.{stateName}, state_leave.order_state.{stateName} und das globale order.state_changed. Diese Events sind der Schlüssel für Automatisierung: Flow Builder, Event Subscriber, Message Queue, Mail-Trigger – alles hängt hier dran.

Wichtig: Die State Machine kennt keine Seiteneffekte per Default. Wenn du einen Status auf „versendet" setzt, wird nicht automatisch eine Mail rausgeschickt oder der Bestand angepasst. Du musst diese Aktionen explizit konfigurieren – etwa über den Flow Builder (Admin → Einstellungen → Flow Builder) oder eigene Event Subscriber (PHP-Entwicklung). Das gibt dir maximale Kontrolle, erfordert aber auch saubere Planung.

Die State Machine ist somit das technische Rückgrat deiner Prozesssteuerung. Sie stellt sicher, dass Statuswechsel nur dann stattfinden, wenn sie logisch erlaubt sind, und bietet dir gleichzeitig die Hooks, um Aktionen gezielt zu triggern. Du arbeitest nicht gegen das System, sondern mit ihm – und das macht deine Prozesse robust, nachvollziehbar und skalierbar.

Custom States in Shopware 6: Entwicklungsaufwand und realistische Einschätzung

Viele Artikel suggerieren, dass du Custom States „einfach im Admin anlegen" kannst. Die Realität in Shopware 6 ist: Ohne Plugin oder Entwicklungsarbeit geht es nicht. Out-of-the-box kannst du nur vorhandene States nutzen und umbenennen (Übersetzungen anpassen) – aber keine neuen States oder Transitions hinzufügen.

Um echte Custom States zu erstellen, brauchst du:

  • Migration-Dateien: PHP-Migrations, die neue StateMachineState- und StateMachineTransition-Einträge in die Datenbank schreiben (Tabellen: state_machine_state, state_machine_transition, state_machine_state_translation).
  • Übersetzungen: Für jeden neuen State und jede Transition musst du Übersetzungen in allen Shopsprachen hinterlegen (z.B. DE, EN), sonst werden technische Namen angezeigt.
  • Berechtigungen / ACL: Du musst definieren, welche Admin-Rollen welche Transitionen ausführen dürfen. Das geschieht über ACL-Regeln und ggf. custom Guards.
  • Event-Integration: Wenn dein Custom State Mails, Dokumente oder andere Aktionen auslösen soll, musst du Flow Builder Rules oder Event Subscriber implementieren.
  • UI-Anpassung (optional): Farben, Icons oder Reihenfolge der States im Admin kannst du über JavaScript/Admin-Extension anpassen.

Konkret: Du erstellst ein Plugin (oder Extension), schreibst eine Migration wie z.B. Migration1234567890AddCustomOrderStates.php, die per SQL INSERT neue States und Transitions anlegt, packst Übersetzungen in die snippet-Dateien und registrierst ggf. Services oder Subscriber. Das ist kein Hexenwerk, aber auch kein „Klick im Admin". Wenn du das Thema intern nicht abdecken kannst, brauchst du Entwickler-Support oder ein fertiges Plugin aus dem Shopware-Store.

Plane realistisch: Für einfache Custom States (z.B. „Wartet auf Freigabe", „In Produktion", „Qualitätsprüfung") rechne mit 1–3 Tagen Aufwand inklusive Tests, Übersetzungen und Dokumentation. Bei komplexeren Anforderungen (mehrere neue Transitions, Guards, UI-Anpassungen) kann es mehr werden. Der Vorteil: Einmal sauber implementiert, läuft das System stabil und gibt dir die Prozess-Klarheit, die du für professionelle E-Commerce-Abläufe brauchst.

Flow Builder: Statuswechsel ohne Code automatisieren

Der Flow Builder in Shopware 6 (verfügbar ab Version 6.4.6.0, erweitert in späteren Versionen) ist dein Werkzeug, um Aktionen an Statuswechsel zu koppeln – ohne eine Zeile Code zu schreiben. Du definierst Trigger (Events), Bedingungen (Conditions) und Aktionen (Actions). Wenn du tiefer einsteigen willst: In unserem Guide zum Flow Builder in Shopware 6 findest du zusätzliche Praxisbeispiele.

Beispiel-Flow: „Wenn Order State auf ‚in Bearbeitung' wechselt UND Payment State = ‚paid', dann sende Mail ‚Bestellung wird bearbeitet' an Kunden und setze Delivery State auf ‚open'."

Wichtige Events für Order Status:

  • checkout.order.placed: Bestellung wurde angelegt (erster Einstiegspunkt).
  • state_enter.order_state.open / in_progress / completed / cancelled: Wird gefeuert, wenn Order State auf diesen Wert wechselt.
  • state_enter.order_transaction.state.paid / authorized / failed / refunded: Payment State Wechsel.
  • state_enter.order_delivery.state.shipped / partially_shipped / returned: Delivery State Wechsel.

Im Flow Builder kannst du dann Aktionen konfigurieren:

  • Mail senden (inkl. Anhänge wie Rechnung, Lieferschein)
  • Status ändern (z.B. Delivery State auf „shipped" setzen, wenn Tracking-Code hinterlegt wurde)
  • Tag hinzufügen / entfernen
  • Webhook / HTTP-Request an externes System
  • Custom Action (wenn du eigene Actions per Plugin registriert hast)

Achtung vor doppelten Mails: Wenn du einen Flow hast, der bei „Order State = completed" eine Mail sendet, und gleichzeitig manuell im Admin „Mail senden" ankreuzt, gehen zwei Mails raus. Best Practice: Dokumentiere genau, welche Flows aktiv sind, und schalte redundante Mechanismen ab. Nutze Flow Builder Logs (Admin → Einstellungen → Flow Builder → Logs) um zu prüfen, welche Flows wann gefeuert haben.

Der Flow Builder ist besonders wertvoll, wenn du schnell iterieren willst: Du kannst neue Automatisierungen ohne Deployment live schalten, A/B-testen (z.B. zwei Flows für unterschiedliche Kundengruppen) und bei Bedarf sofort anpassen. Für komplexe Business-Logik (z.B. externe API-Calls mit Retry-Logik, komplexe Berechnungen) brauchst du weiterhin Custom Code – aber für 80 % der Standard-Workflows reicht der Flow Builder vollkommen aus.

Source of Truth: Wer steuert welchen Status in Multi-System-Umgebungen?

Sobald du Shopware mit ERP, Warenwirtschaft (Wawi) oder Versandtools verbindest, hast du mehrere Systeme, die Status setzen und ändern können. Die zentrale Frage: Wer ist die Source of Truth für welchen Status? Ohne klare Matrix entstehen Konflikte: Shopware zeigt „versendet", ERP zeigt „offen", Versandtool zeigt „Label erstellt" – und niemand weiß, was stimmt.

Empfohlene Source-of-Truth-Matrix (Beispiel, anpassen an dein Setup):

Status-Typ Source of Truth Sync-Richtung Konfliktlösung
Payment State Payment Provider / ERP Provider → Shopware → ERP Provider-Webhook gewinnt, ERP überschreibt nur bei manueller Korrektur
Order State Shopware / ERP (je nach Prozess) Shopware ↔ ERP (bidirektional) Timestamp-Vergleich oder explizites „ERP Master"-Flag
Delivery State Versandtool / Wawi Versandtool → Shopware Versandtool-Webhook gewinnt, Shopware read-only für Delivery State

Konkret bedeutet das: Wenn dein Versandtool (z.B. Sendcloud, Pickware, ShipStation) den Delivery State auf „shipped" setzt und eine Trackingnummer hinterlegt, darf Shopware diesen Status nicht überschreiben. Umgekehrt: Wenn Shopware Order State auf „cancelled" setzt, muss das ERP darüber informiert werden und ggf. Reservierungen aufheben.

Dokumentiere diese Matrix in deinem internen Wiki oder Runbook. Jeder im Team (Support, Entwicklung, Ops) muss wissen: Welches System ist führend für welchen Status? Wie werden Konflikte aufgelöst? Was passiert bei Netzwerkfehlern oder Timeouts? Diese Klarheit verhindert Fehler, beschleunigt Debugging und macht dein Setup wartbar.

Typische Sync-Probleme und wie du sie debuggst

In der Praxis wirst du auf diese Sync-Probleme stoßen:

Problem 1: Status „hängt" seit Stunden. Shopware zeigt „wird synchronisiert", ERP zeigt nichts. Ursache: Message Queue läuft nicht, Sync-Job fehlgeschlagen, API-Timeout. Debug: Prüfe message_queue_stats (Admin oder CLI: bin/console messenger:stats), schaue in var/log/prod.log nach Exceptions, prüfe enqueue-Tabelle auf failed messages. Lösung: Queue-Worker neustarten (bin/console messenger:consume), failed messages manuell requeuen oder verwerfen.

Problem 2: Doppelte Mails. Kunde erhält zwei „Versandbestätigung"-Mails. Ursache: Flow Builder + manuelles „Mail senden" im Admin + ERP sendet auch Mail. Debug: Prüfe Flow Builder Logs, prüfe order_mail-Tabelle (welche Mails wurden wann versendet), prüfe ERP-Logs. Lösung: Deaktiviere redundante Mail-Trigger, nutze idempotente Mail-Logik (z.B. „sende Mail nur, wenn noch nicht versendet").

Problem 3: Zahlung als „paid" markiert, aber ERP zeigt „offen". Ursache: Webhook vom Payment Provider kam in Shopware an, Sync zu ERP schlug fehl (Netzwerkfehler, API-Limit, Mapping-Fehler). Debug: Prüfe payment_transaction-Tabelle (State History), prüfe ERP-API-Logs, prüfe Shopware-DAL-Events (wurden Events gefeuert?). Lösung: Retry-Mechanismus für ERP-Sync implementieren, Monitoring aufsetzen (z.B. Grafana, Sentry), bei kritischen Fällen manuelle Nachbearbeitung.

Best Practice: Setze Monitoring und Alerting auf. Beispiel: „Wenn mehr als 10 Bestellungen länger als 1 Stunde im Status ‚wird synchronisiert' sind, sende Slack-Nachricht an Ops-Team." Das geht mit Tools wie Prometheus, Grafana, Datadog oder simplen Cronjobs, die die Datenbank abfragen. Proaktives Monitoring verhindert, dass Probleme eskalieren, bevor du davon erfährst.

Entwickler arbeitet am Schreibtisch mit Monitoren für Dashboard und Code, daneben Laptop mit Prozessdiagramm für Workflow-Automation

Performance und Skalierung: Admin-Filter, Indexing und Queue-Optimierung

Bei vielen Orders (> 10.000 pro Monat) merkst du schnell: Admin-Listen werden langsam, Filter dauern Sekunden, Exporte crashen. Hier musst du Performance-seitig ran:

Admin-Filter-Performance: Shopware 6 nutzt Elasticsearch (optional, aber empfohlen ab > 50.000 Orders). Wenn du ES nicht nutzt, arbeitet Shopware direkt auf MySQL – das ist bei vielen Orders langsam. Lösung: Aktiviere Elasticsearch für Orders, stelle sicher, dass Indexing läuft (bin/console es:index), nutze Admin-Search über ES statt SQL. Hintergrund und Best Practices dazu findest du auch in unserem Beitrag zu Elasticsearch in Shopware 6.

Indexing: Status-Änderungen triggern oft Indexing (z.B. für Suche, Listing, Analytics). Wenn du viele Orders gleichzeitig änderst (Batch Processing), kann das Indexing zum Bottleneck werden. Lösung: Nutze asynchrones Indexing (Message Queue), erhöhe Worker-Count, überwache Queue-Länge.

Queue-Optimierung: Message Queue verarbeitet viele Status-bezogene Tasks (Mails, Sync, Indexing, Webhooks). Wenn Worker zu langsam sind oder zu wenige laufen, stauen sich Messages. Lösung: Starte mehrere Worker parallel (bin/console messenger:consume async --limit=100 & mehrfach), nutze Redis oder RabbitMQ statt Doctrine-Transport (schneller), setze Memory-Limits und Time-Limits sinnvoll.

Export und Reporting: Große Order-Exports (CSV, Excel) blockieren den Admin. Lösung: Nutze CLI-basierte Exporte (bin/console order:export oder eigene Commands), oder async Export-Plugins, die Jobs in die Queue stellen und dich per Mail benachrichtigen, wenn der Export fertig ist.

Performance ist kein „Nice-to-have", sondern ein kritischer Erfolgsfaktor. Langsame Admin-Oberflächen frustrieren dein Team, langsame Sync-Prozesse führen zu veralteten Daten, und überlastete Queues blockieren kritische Automatisierungen. Plane Performance von Anfang an mit ein – und teste regelmäßig unter Last (z.B. mit Load-Testing-Tools wie Locust oder k6).

API-Integration: Statuswechsel programmatisch und State-Machine-konform steuern

Wenn du Status per API ändern willst (z.B. von einem externen Tool, ERP oder Custom-Script), nutzt du die Shopware Admin API. Wichtig: Du darfst nicht einfach den Status-Wert in der Datenbank überschreiben – das umgeht die State Machine und führt zu inkonsistenten Daten.

Der korrekte Weg: Nutze die StateMachineTransitionAction via API. Beispiel-Request (vereinfacht):

POST /api/_action/state-machine/order/{orderId}/state/{transitionName}

Wobei transitionName z.B. „process", „complete", „cancel" sein kann (je nach erlaubter Transition). Die API prüft, ob die Transition erlaubt ist, führt sie aus, feuert Events und schreibt History. So bleibst du State-Machine-konform.

Für Payment und Delivery States analog:

  • POST /api/_action/state-machine/order_transaction/{transactionId}/state/{transitionName}
  • POST /api/_action/state-machine/order_delivery/{deliveryId}/state/{transitionName}

Best Practice: Dokumentiere deine API-Integrationen (welche Endpoints, welche Transitionen, welche Auth), versioniere API-Calls (Shopware-API kann sich ändern), nutze Retry-Logik und Fehlerbehandlung (4xx = Client-Fehler, 5xx = Server-Fehler, Transition nicht erlaubt = 400 mit entsprechender Message). Teste API-Integrationen gründlich in Staging, bevor du auf Prod rollst – und überwache API-Calls in Produktion (z.B. via Logging, APM-Tools).

Rechtliche Anforderungen: E-Rechnung in Deutschland (B2B) ab 2025

Hinweis: Dieser Abschnitt ist Deutschland-spezifisch. Seit Januar 2025 gilt in Deutschland die E-Rechnungspflicht für inländische B2B-Transaktionen. Rechnungen müssen in einem strukturierten elektronischen Format (z.B. ZUGFeRD, XRechnung) ausgestellt werden. Shopware 6 unterstützt ab Version 6.6.10.0 ZUGFeRD (hybrid PDF/XML).

Was hat das mit Order Status zu tun? Dein Workflow „Rechnung erstellt" muss sicherstellen, dass eine rechtskonforme E-Rechnung erzeugt wurde. Das bedeutet:

  • Flow Builder Action „Rechnung erstellen" muss ZUGFeRD-Modus nutzen (konfigurierbar in Dokumenten-Einstellungen)
  • Status „Rechnung erstellt" darf nur gesetzt werden, wenn das Dokument tatsächlich erzeugt wurde (nicht nur geplant)
  • Bei Storno / Gutschrift: Referenz zur Original-Rechnung muss korrekt gesetzt sein (Shopware macht das automatisch, aber prüfe es)

Wenn du international tätig bist, gelten andere Regeln (z.B. EU-weite E-Invoicing-Standards ab 2028 geplant). Kläre mit deiner Rechtsabteilung / Steuerberater, welche Anforderungen für dich gelten, und bilde sie in Status-Workflows ab. Für nicht-deutsche Zielgruppen: Dieser Abschnitt ist optional, aber ein gutes Beispiel, wie rechtliche Anforderungen deine Status-Logik beeinflussen können.

Checkliste: Wann Custom States wirklich sinnvoll sind

Bevor du Custom States entwickelst, prüfe diese Checkliste:

  • Arbeiten mehrere Abteilungen (Support, Lager, Versand, Buchhaltung) an einer Bestellung und brauchen klare Übergabepunkte?
  • Hast du viele Sonderfälle (Fertigung, Nachlieferung, Reklamation, B2B-Freigaben, Vorkasse)?
  • Fragen Kunden regelmäßig nach, was „in Bearbeitung" konkret bedeutet?
  • Nutzt du Integrationen mit ERP, Wawi oder Versandtools, die eigene Status haben?
  • Willst du Automatisierung (Flow Builder, API) sauber fahren und brauchst granulare Trigger?
  • Hast du Reporting-Anforderungen, die Standard-Status nicht abdecken (z.B. „Durchlaufzeit von Freigabe bis Versand")?

Wenn du drei oder mehr Fragen mit „Ja" beantwortest, lohnen sich Custom States. Aber: Rechne mit Entwicklungsaufwand (1–3 Tage für einfache States inkl. Tests, mehr bei komplexen Transitions oder UI-Anpassungen) und Wartungsaufwand (bei Shopware-Updates müssen Migrations ggf. angepasst werden).

Wenn du weniger als drei „Ja" hast: Nutze Standard-Status, passe Übersetzungen an und arbeite mit Flow Builder, um Automatisierung zu erreichen. Das reicht für viele Szenarien und spart dir Entwicklungskosten.

Praxisbeispiel: Vorkasse-Workflow mit Custom State und Flow Builder

Szenario: Du bietest Vorkasse an. Standard-Status reichen nicht, weil du klar unterscheiden willst, ob Zahlung aussteht, eingegangen oder bestätigt ist. Hier der komplette Workflow:

Custom States (via Plugin/Migration):

  • Order State: „awaiting_payment" (Wartet auf Zahlung)
  • Order State: „payment_confirmed" (Zahlung bestätigt)

Transitions:

  • „open" → „awaiting_payment" (automatisch bei Bestellung mit Zahlungsart Vorkasse)
  • „awaiting_payment" → „payment_confirmed" (manuell oder via ERP/Buchhaltung, wenn Zahlung eingegangen)
  • „payment_confirmed" → „in_progress" (automatisch via Flow Builder)

Flow Builder Rules:

  • Flow 1: Event = checkout.order.placed, Condition = Zahlungsart = Vorkasse → Action = Order State auf „awaiting_payment" setzen + Mail „Bitte überweise Betrag X auf Konto Y"
  • Flow 2: Event = state_enter.order_state.payment_confirmed → Action = Order State auf „in_progress" setzen + Delivery State auf „open" + Mail „Zahlung erhalten, Bestellung wird bearbeitet"
  • Flow 3: Event = state_enter.order_delivery.state.shipped → Action = Mail „Versandbestätigung mit Tracking"

Integration: Dein ERP prüft täglich Kontoeingänge, matched sie mit offenen Bestellungen (via API: GET /api/order?filter[stateMachineState.technicalName]=awaiting_payment) und setzt via API den Status auf „payment_confirmed" (POST /api/_action/state-machine/order/{orderId}/state/confirm_payment).

Ergebnis: Klare Prozesse, automatische Mails, Team und Kunde wissen jederzeit Bescheid, kein manuelles Nachfragen nötig. Dieser Workflow zeigt exemplarisch, wie Custom States, Flow Builder und API-Integration zusammenspielen – und wie du komplexe Business-Anforderungen sauber abbilden kannst.

Governance und Monitoring: Rollen, Rechte und Alerts

Mit Custom States, Flow Builder und API-Integrationen wird dein Setup komplex. Ohne Governance entsteht Chaos: Jeder ändert Status nach Lust und Laune, Flows werden doppelt angelegt, API-Keys liegen im Klartext rum. Best Practices:

Rollen und Rechte: Definiere klar, welche Admin-Rolle welche Transitionen ausführen darf. Shopware ACL (Access Control List) erlaubt granulare Berechtigungen. Beispiel: Support darf „open" → „in_progress" setzen, aber nicht „in_progress" → „cancelled" (das darf nur Manager). Konfiguriere das in Admin → Einstellungen → Rollen.

Dokumentation: Führe ein internes „Status-Handbuch" (Wiki, Notion, Confluence): Für jeden Status dokumentiere Definition, Trigger, Zuständigkeit, Kundenmail, Flows. So weiß jeder Bescheid und Onboarding neuer Teammitglieder wird einfach.

Change Management: Neue Custom States oder Flows nur nach Review einführen. Nutze Dev/Staging-Umgebung für Tests, bevor du auf Prod rollst. Versioniere deine Plugins (Git, Semantic Versioning).

Monitoring: Setze Alerts auf kritische Metriken: „Mehr als X Bestellungen länger als Y Stunden in Status Z", „Flow XY hat in letzter Stunde mehr als Z mal gefeuert (Indikator für Fehler)". Tools: Shopware Monitoring Plugin, Prometheus + Grafana, externe APM (Datadog, New Relic).

Governance ist kein Overhead, sondern Investment in Stabilität und Skalierbarkeit. Wenn du heute Zeit in Rollen, Dokumentation und Monitoring investierst, sparst du morgen Stunden beim Debugging und Onboarding. Und dein Team arbeitet selbstständiger, weil klar ist, wer was darf und wo die Infos stehen.

Fazit: Shopware Order Status als Fundament professioneller E-Commerce-Prozesse

Der Shopware Order Status ist weit mehr als ein Label in der Bestellübersicht. Er ist das Fundament deiner Prozesssteuerung, Automatisierung und Kundenkommunikation. Die wichtigsten Erkenntnisse:

  • Order-, Payment- und Delivery-Status getrennt denken und über die State Machine steuern – das schafft Klarheit und Fehlerresistenz.
  • Custom States sind möglich, aber erfordern Plugin-Entwicklung (Migrations, Übersetzungen, ACL, Event-Integration) – plane Aufwand realistisch ein.
  • Flow Builder ist dein Werkzeug für Automatisierung ohne Code – nutze Events wie order.state_changed, state_enter.* gezielt, vermeide doppelte Trigger.
  • Integrationen (ERP, Wawi, Versandtools) brauchen klare Source-of-Truth-Matrix, asynchrone Sync-Logik und robustes Error-Handling (Retry, Monitoring, Queue).
  • Performance und Skalierung beachten: Elasticsearch für große Order-Mengen, Queue-Worker optimieren, Indexing asynchron fahren.
  • API-Integration State-Machine-konform nutzen (StateMachineTransitionAction), nicht direkt in DB schreiben.
  • Governance und Monitoring sind Pflicht: Rollen/Rechte definieren, dokumentieren, Alerts setzen, Change Management leben.

Starte klein: Definiere ein bis zwei Custom States (falls nötig), baue einen sauberen Flow, teste gründlich, sammle Feedback, iteriere. So baust du ein System, das nicht nur heute funktioniert, sondern auch morgen skaliert und wartbar bleibt. Viel Erfolg beim Umsetzen!

 

Diesen Beitrag teilen