[{"data":1,"prerenderedAt":2550},["ShallowReactive",2],{"content-translation-map":3,"navigation:de":62,"auto-image:entries:\u002Fblog\u002Fshopware-nexus-oder-eigene-middleware":145,"blog:de:\u002Fblog\u002Fshopware-nexus-oder-eigene-middleware":146},{"lex-hesse":4,"mezcrafts":7,"schork":10,"ai-content-creation":13,"ai-integration":16,"devops":19,"ecommerce":22,"edi-integration":25,"erp-integration":28,"individual-development":31,"system-integration":34,"system-modernization-migration":37,"ux-ui-design":40,"agentic-commerce":43,"edi4jtl":45,"own-ai-server-tco":48,"shopware-6-redis-configuration-mistakes":51,"shopware-6-use-cases":54,"shopware-frontends-headless-storefront-nuxt":57,"shopware-nexus-vs-custom-middleware":59},{"en":5,"de":6},"\u002Freferences\u002Flex-hesse","\u002Freferenzen\u002Flex-hesse",{"en":8,"de":9},"\u002Freferences\u002Fmezcrafts","\u002Freferenzen\u002Fmezcrafts",{"en":11,"de":12},"\u002Freferences\u002Fschork","\u002Freferenzen\u002Fschork",{"en":14,"de":15},"\u002Fservices\u002Fai-content-creation","\u002Fleistungen\u002Fki-contentproduktion",{"en":17,"de":18},"\u002Fservices\u002Fai-integration","\u002Fleistungen\u002Fki-integration",{"en":20,"de":21},"\u002Fservices\u002Fdevops","\u002Fleistungen\u002Fdevops",{"en":23,"de":24},"\u002Fservices\u002Fecommerce","\u002Fleistungen\u002Fecommerce-entwicklung",{"en":26,"de":27},"\u002Fservices\u002Fedi-integration","\u002Fleistungen\u002Fedi-integration",{"en":29,"de":30},"\u002Fservices\u002Ferp-integration","\u002Fleistungen\u002Ferp-integration",{"en":32,"de":33},"\u002Fservices\u002Findividual-development","\u002Fleistungen\u002Findividuelle-softwareentwicklung",{"en":35,"de":36},"\u002Fservices\u002Fsystem-integration","\u002Fleistungen\u002Fsystemintegration",{"en":38,"de":39},"\u002Fservices\u002Fsystem-modernization-migration","\u002Fleistungen\u002Fmigration-systemmodernisierung",{"en":41,"de":42},"\u002Fservices\u002Fux-ui-design","\u002Fleistungen\u002Fux-ui-design",{"en":44,"de":44},"\u002Fblog\u002Fagentic-commerce",{"en":46,"de":47},"\u002Fblog\u002Fedi4jtl","\u002Fblog\u002Fedi-integration-jtl",{"en":49,"de":50},"\u002Fblog\u002Fown-ai-server-when-it-pays-off","\u002Fblog\u002Feigener-ki-server-wann-rechnet-er-sich",{"en":52,"de":53},"\u002Fblog\u002Fshopware-6-redis-configuration-mistakes","\u002Fblog\u002Fshopware-6-redis-fehlkonfiguration",{"en":55,"de":56},"\u002Fblog\u002Fshopware-6-use-cases","\u002Fblog\u002Fshopware-6-wann-sinnvoll",{"en":58,"de":58},"\u002Fblog\u002Fshopware-frontends-headless-storefront-nuxt",{"en":60,"de":61},"\u002Fblog\u002Fshopware-nexus-or-custom-middleware","\u002Fblog\u002Fshopware-nexus-oder-eigene-middleware",[63],{"title":64,"path":65,"stem":66,"children":67,"page":123},"De","\u002Fde","de",[68,124],{"title":69,"path":70,"stem":71,"children":72,"page":123},"Leistungen","\u002Fde\u002Fleistungen","de\u002Fleistungen",[73,78,83,88,93,98,103,108,113,118],{"title":74,"path":75,"stem":76,"translationKey":77,"icon":77},"DevOps","\u002Fde\u002Fleistungen\u002Fdevops","de\u002Fleistungen\u002Fdevops","devops",{"title":79,"path":80,"stem":81,"translationKey":82,"icon":82},"E-Commerce Entwicklung","\u002Fde\u002Fleistungen\u002Fecommerce-entwicklung","de\u002Fleistungen\u002Fecommerce-entwicklung","ecommerce",{"title":84,"path":85,"stem":86,"translationKey":87,"icon":87},"EDI Integration","\u002Fde\u002Fleistungen\u002Fedi-integration","de\u002Fleistungen\u002Fedi-integration","edi-integration",{"title":89,"path":90,"stem":91,"translationKey":92,"icon":92},"ERP Integration","\u002Fde\u002Fleistungen\u002Ferp-integration","de\u002Fleistungen\u002Ferp-integration","erp-integration",{"title":94,"path":95,"stem":96,"translationKey":97,"icon":97},"Individualentwicklung","\u002Fde\u002Fleistungen\u002Findividuelle-softwareentwicklung","de\u002Fleistungen\u002Findividuelle-softwareentwicklung","individual-development",{"title":99,"path":100,"stem":101,"translationKey":102,"icon":102},"KI-gestützte Contentproduktion","\u002Fde\u002Fleistungen\u002Fki-contentproduktion","de\u002Fleistungen\u002Fki-contentproduktion","ai-content-creation",{"title":104,"path":105,"stem":106,"translationKey":107,"icon":107},"KI-Integration","\u002Fde\u002Fleistungen\u002Fki-integration","de\u002Fleistungen\u002Fki-integration","ai-integration",{"title":109,"path":110,"stem":111,"translationKey":112,"icon":112},"Migration & Systemmodernisierung","\u002Fde\u002Fleistungen\u002Fmigration-systemmodernisierung","de\u002Fleistungen\u002Fmigration-systemmodernisierung","system-modernization-migration",{"title":114,"path":115,"stem":116,"translationKey":117,"icon":117},"System Integration","\u002Fde\u002Fleistungen\u002Fsystemintegration","de\u002Fleistungen\u002Fsystemintegration","system-integration",{"title":119,"path":120,"stem":121,"translationKey":122,"icon":122},"UX\u002FUI Design","\u002Fde\u002Fleistungen\u002Fux-ui-design","de\u002Fleistungen\u002Fux-ui-design","ux-ui-design",false,{"title":125,"path":126,"stem":127,"children":128,"page":123},"Referenzen","\u002Fde\u002Freferenzen","de\u002Freferenzen",[129,135,140],{"title":130,"path":131,"stem":132,"translationKey":133,"icon":134},"Lex & Hesse – B2B-Shop für Fahrzeugteile mit 400.000 Produkten","\u002Fde\u002Freferenzen\u002Flex-hesse","de\u002Freferenzen\u002Flex-hesse","lex-hesse",null,{"title":136,"path":137,"stem":138,"translationKey":139,"icon":134},"MEZ Crafts – B2B-Shop für Wolle und Garne mit PWA-Storefront","\u002Fde\u002Freferenzen\u002Fmezcrafts","de\u002Freferenzen\u002Fmezcrafts","mezcrafts",{"title":141,"path":142,"stem":143,"translationKey":144,"icon":134},"Walter Schork – Online-Shop für Kfz-Zubehör mit 200.000 Artikeln","\u002Fde\u002Freferenzen\u002Fschork","de\u002Freferenzen\u002Fschork","schork",{},{"id":147,"title":148,"body":149,"description":2513,"draft":123,"extension":2514,"meta":2515,"navigation":718,"ogImage":134,"path":2516,"publishAt":2517,"robots":134,"schemaOrg":2518,"seo":2530,"sitemap":2536,"stem":2540,"tags":2541,"translationKey":2548,"__hash__":2549},"blog_de\u002Fde\u002Fblog\u002Fshopware-nexus-oder-eigene-middleware.md","Shopware Nexus oder eigene Middleware? Eine Entscheidungshilfe für ERP-Anbindungen",{"type":150,"value":151,"toc":2494},"minimark",[152,156,165,168,171,176,179,187,255,258,260,264,267,270,273,276,279,285,296,299,302,305,307,311,314,317,320,326,329,339,342,347,353,358,364,367,372,375,377,381,384,403,406,408,412,415,421,427,433,439,445,451,453,457,460,537,540,543,546,548,552,555,558,618,621,624,629,634,637,640,643,646,651,654,657,661,664,667,670,684,690,693,2010,2013,2016,2027,2029,2033,2036,2039,2142,2145,2149,2155,2162,2168,2173,2176,2179,2181,2185,2188,2191,2204,2207,2210,2212,2216,2351,2354,2356,2360,2363,2366,2369,2372,2375,2400,2402,2406,2487,2490],[153,154,148],"h1",{"id":155},"shopware-nexus-oder-eigene-middleware-eine-entscheidungshilfe-für-erp-anbindungen",[157,158,159,160,164],"p",{},"Seit Nexus im Early Access ist, taucht in jedem zweiten Projektgespräch dieselbe Frage auf: Brauchen wir die individuelle ",[161,162,163],"a",{"href":30},"ERP-Anbindung"," überhaupt noch?",[157,166,167],{},"Die Antwort hängt an zwei Dingen: daran, wie eine Schnittstelle geschnitten ist, und daran, wer den Betrieb übernimmt.",[169,170],"hr",{},[172,173,175],"h2",{"id":174},"was-nexus-ist","Was Nexus ist",[157,177,178],{},"Shopware beschreibt Nexus als natives iPaaS, das in die Plattform eingebaut ist. Praktisch ist es ein Cloud-Dienst mit visuellem Workflow-Editor, erreichbar unter nexus.shopware.com und mit dem Shop über den Nexus Event-Ingestion Service verknüpft.",[157,180,181,182,186],{},"Ein Workflow besteht aus einem Trigger, einer Kette von Schritten und Aktionen nach außen. Die Dokumentation nennt zwei Trigger-Typen: Shopware-Events wie ",[183,184,185],"code",{},"order.placed"," und zeitgesteuerte Läufe im Cron-Stil. Dazwischen liegen bedingte Verzweigungen und Datentransformationen.",[188,189,190,203],"table",{},[191,192,193],"thead",{},[194,195,196,200],"tr",{},[197,198,199],"th",{},"Anforderung",[197,201,202],{},"Wert",[204,205,206,215,223,231,239,247],"tbody",{},[194,207,208,212],{},[209,210,211],"td",{},"Shopware-Version",[209,213,214],{},"6.7.1.0 oder neuer",[194,216,217,220],{},[209,218,219],{},"Account",[209,221,222],{},"aktiver Shopware Account mit zugeordnetem Unternehmen",[194,224,225,228],{},[209,226,227],{},"Zugriff",[209,229,230],{},"Administratorrechte im Shop",[194,232,233,236],{},[209,234,235],{},"Dienst",[209,237,238],{},"Nexus Event-Ingestion Service unter Einstellungen > Shopware Services",[194,240,241,244],{},[209,242,243],{},"Betrieb",[209,245,246],{},"Cloud-Dienst unter nexus.shopware.com",[194,248,249,252],{},[209,250,251],{},"Status",[209,253,254],{},"Early Access, angekündigt im Mai 2026",[157,256,257],{},"Die Dokumentation nennt fünf Action-Nodes: Business Central Connector, Shopware-API-Aufrufe, Slack-Benachrichtigungen, Shopware-Mailversand und generische API-Requests. Dazu kommt ein Output-Node, der Daten in S3-kompatiblen Object Storage schreibt. Weitere Connectors führt die Produktseite als in Prüfung, darunter Pimcore, NetSuite und Akeneo.",[169,259],{},[172,261,263],{"id":262},"was-daran-neu-ist-und-was-nicht","Was daran neu ist, und was nicht",[157,265,266],{},"Eventgetriebene Workflows mit visuellem Editor und Connectors gibt es seit über einem Jahrzehnt. Zapier, Make, Workato, Talend, Apache Camel, Node-RED, n8n. Die Bauform ist etabliert, und Nexus folgt ihr.",[157,268,269],{},"Der Wert eines solchen Werkzeugs steckt nicht im Editor, sondern in den Connectors. Ein fertiger Connector nimmt für ein bestimmtes Zielsystem die Authentifizierung ab, die Paginierung, das Verhalten bei Rate Limits, das Mapping auf dessen Entitäten und die Frage, was eine Fehlermeldung dieses Systems eigentlich bedeutet. Dieser Teil frisst in einer Eigenentwicklung die Tage, nicht der Transport.",[157,271,272],{},"Damit hängt der Nutzen an einer einzigen Frage: Steht das eigene Zielsystem im Katalog?",[157,274,275],{},"Der Katalog ist im Early Access entsprechend jung. Von den dokumentierten Nodes schreibt genau einer in ein Fachsystem: der Business Central Connector. Slack-Nachricht und Shopware-Mail sind Benachrichtigungen, der Rest ist generischer Transport: HTTP-Request, Aufruf gegen die eigene Shopware-API, Ablage in S3. In Prüfung sind mit Pimcore, NetSuite und Akeneo genau die Kandidaten, die den Unterschied machen würden.",[157,277,278],{},"Für alle anderen Systeme bleibt der generische API-Request. Dann schreibt man Mapping, Authentifizierung und Fehlerbehandlung wieder selbst, nur eben in einem fremden Dienst statt im eigenen Code.",[280,281,282],"blockquote",{},[157,283,284],{},"Ob Nexus Arbeit abnimmt, entscheidet der Connector-Katalog. Steht das eigene ERP nicht darin, bleibt ein Workflow-Editor mit HTTP-Aufruf.",[157,286,287,288,291,292,295],{},"Die Event-Anbindung wird daneben leicht überschätzt. Nexus liefert Shopware-Events ohne eigenes Zutun, das tut aber auch ein Plugin mit einem ",[183,289,290],{},"EventSubscriber",", und das sind ein paar Dutzend Zeilen. Wer den Empfänger außerhalb des Shops betreiben will, nimmt das App-System mit ",[183,293,294],{},"\u003Cwebhooks>"," im Manifest. Bequem ist der native Trigger, ein Alleinstellungsmerkmal ist er nicht.",[157,297,298],{},"Shopware wirbt mit zwei Zahlen: Die Integrationskosten sollen um bis zu 40 Prozent sinken, und 52 Prozent des Projektaufwands sollen im Schnitt durch individuelle Middleware verloren gehen. Beide Zahlen tragen auf der Produktseite eine Fußnotenmarke, eine Herleitung ist dort nicht hinterlegt. Ohne Bezugsgröße bleibt offen, was als Projektaufwand zählt und woran die Ersparnis gemessen wurde.",[157,300,301],{},"Unstrittig ist, wo der Aufwand liegt: zwischen den Systemen und nicht im Shop. Ein passender Connector deckt davon den Standardteil ab. Der größere Teil steckt erfahrungsgemäß in den Sonderfällen, und dafür braucht es weiterhin eine eigene Lösung.",[157,303,304],{},"Eine Abgrenzung noch, weil Nexus und der Flow Builder regelmäßig verwechselt werden. Der Flow Builder automatisiert Logik innerhalb des Shops, etwa Statuswechsel oder Mailversand. Nexus verbindet den Shop mit Systemen außerhalb. Beide existieren nebeneinander.",[169,306],{},[172,308,310],{"id":309},"die-granularität-entscheidet-über-die-kosten","Die Granularität entscheidet über die Kosten",[157,312,313],{},"Die technische Dokumentation nennt keine Preise, die Preisseite schon. Shopware führt Nexus dort als Add-on: bis zum 1. September 2026 eine kostenlose Einführungsphase, danach rund 10 Euro pro 1.000 Ausführungen, ausgewiesen als Richtpreis in der Beta.",[157,315,316],{},"Abgerechnet wird also nach Ausführungen, und genau das verändert die Art, wie man eine Schnittstelle schneidet.",[157,318,319],{},"Als Beispiel ein Shop mit 5.000 Artikeln und 200 Bestellungen pro Tag, angebunden an ein ERP.",[157,321,322],{},[323,324,325],"strong",{},"Bestellstrecke, eventgetrieben:",[157,327,328],{},"Pro Bestellung fallen vier Ausführungen an. Auftrag ins ERP, Kundenabgleich, Statusrückmeldung, Trackingnummer zurück in den Shop.",[330,331,336],"pre",{"className":332,"code":334,"language":335},[333],"language-text","200 Bestellungen × 4 Schritte × 30 Tage = 24.000 Ausführungen\u002FMonat\n24.000 \u002F 1.000 × 10 € = 240 €\u002FMonat\n","text",[183,337,334],{"__ignoreMap":338},"",[157,340,341],{},"Das ist unauffällig und für die gelieferte Leistung günstig.",[157,343,344],{},[323,345,346],{},"Bestandsabgleich, eine Ausführung pro Artikel:",[330,348,351],{"className":349,"code":350,"language":335},[333],"5.000 Artikel × 24 Läufe\u002FTag × 30 Tage = 3.600.000 Ausführungen\u002FMonat\n3.600.000 \u002F 1.000 × 10 € = 36.000 €\u002FMonat\n",[183,352,350],{"__ignoreMap":338},[157,354,355],{},[323,356,357],{},"Derselbe Bestandsabgleich als Batch, eine Ausführung pro Lauf:",[330,359,362],{"className":360,"code":361,"language":335},[333],"24 Läufe\u002FTag × 30 Tage = 720 Ausführungen\u002FMonat\n720 \u002F 1.000 × 10 € = 7,20 €\u002FMonat\n",[183,363,361],{"__ignoreMap":338},[157,365,366],{},"Gleiche Funktion, gleiche Datenmenge, aber ein Preisunterschied von Faktor 5.000. Der Faktor bleibt derselbe, egal welchen Preis pro Ausführung man einsetzt.",[280,368,369],{},[157,370,371],{},"Bei einer eigenen Middleware ist die Granularität eine Frage von Laufzeit und Lesbarkeit. Bei Nexus ist sie die Kostenfrage. Wer pro Datensatz triggert statt pro Lauf, zahlt das Tausendfache.",[157,373,374],{},"Das ist kein Argument gegen Nexus. Es ist ein Argument dafür, die Workflows von Anfang an batchorientiert zu schneiden, überall dort, wo keine Echtzeit gefordert ist. Bestellungen gehören einzeln verarbeitet, Bestände und Preise gehören gebündelt.",[169,376],{},[172,378,380],{"id":379},"wo-nexus-trägt","Wo Nexus trägt",[157,382,383],{},"In einer ganzen Reihe von Projekten ist eine eigene Middleware überdimensioniert.",[385,386,387,391,394,397,400],"ul",{},[388,389,390],"li",{},"Standardstrecken zwischen Shopware und einem System, für das ein Connector existiert",[388,392,393],{},"Feld-Mappings ohne Sonderlogik, bei denen ein Auftrag ein Auftrag bleibt",[388,395,396],{},"Überschaubare Volumina, bei denen die Kosten pro Ausführung nicht ins Gewicht fallen",[388,398,399],{},"Benachrichtigungen an Slack oder per Mail, wo ohnehin keine Fachlogik nötig ist",[388,401,402],{},"Projekte ohne eigenes Betriebsteam, in denen jede zusätzliche Komponente ein Risiko ist",[157,404,405],{},"In diesen Fällen ist eine eigene Middleware ein Kostentreiber ohne Gegenwert. Wer eine Business-Central-Anbindung mit Standardfeldern braucht, sollte Nexus nehmen.",[169,407],{},[172,409,411],{"id":410},"wo-die-grenzen-liegen","Wo die Grenzen liegen",[157,413,414],{},"Ein Teil der folgenden Punkte ist dem Early Access geschuldet und dürfte sich mit der Zeit erledigen. Für eine Entscheidung heute zählt trotzdem der aktuelle Stand.",[157,416,417,420],{},[323,418,419],{},"At-least-once-Delivery."," Shopware dokumentiert das als bekannte Einschränkung. Ein Event kann mehrfach ankommen. Ohne Idempotenz auf der Empfängerseite können daraus Doppelbuchungen im ERP entstehen.",[157,422,423,426],{},[323,424,425],{},"Kein Testmodus, keine Undo-Funktion, begrenzte Fehlerdetails."," Auch das steht so in der Dokumentation. Wer einen Workflow ändert, ändert ihn produktiv. Als Ausweg empfiehlt die Doku Staging-Shops, also eine zweite Umgebung, die man selbst pflegt. Für die Fehlersuche stehen weniger Details zur Verfügung, als man aus einer eigenen Middleware gewohnt ist.",[157,428,429,432],{},[323,430,431],{},"Fehlerbehandlung mit Checkpoints."," Was passiert, wenn das ERP mitten in einem Batch von 3.000 Artikeln nicht mehr antwortet? Eine eigene Middleware hat einen Zustand, läuft ab dem letzten bestätigten Datensatz weiter und meldet den Abbruch ans Monitoring. Eine entsprechende Funktion nennt die Nexus-Dokumentation nicht.",[157,434,435,438],{},[323,436,437],{},"Eigene Datenmodelle."," Sobald Artikelstämme über mehrere Entitäten verteilt sind, Konfiguratoren im Spiel sind oder Preise nach Kundengruppe, Staffel und Aktionslogik berechnet werden, reichen Feld-Mappings nicht mehr.",[157,440,441,444],{},[323,442,443],{},"Systeme ohne Connector."," SAP, Oracle, Salesforce und praktisch jedes Warenwirtschaftssystem aus dem deutschen Mittelstand laufen über den generischen API-Request. Der Aufwand für Mapping und Fehlerbehandlung bleibt beim Projekt. Der Vorteil gegenüber einem anderen Workflow-Tool beschränkt sich dann auf den Event-Trigger.",[157,446,447,450],{},[323,448,449],{},"Betrieb außerhalb der Cloud."," Die Dokumentation beschreibt Nexus als Cloud-Dienst. Eine Variante zum Selbstbetreiben ist nicht dokumentiert. Wer aus regulatorischen Gründen oder wegen hoher Ausfallkosten Kontrolle über die Laufzeitumgebung braucht, findet sie hier nicht.",[169,452],{},[172,454,456],{"id":455},"der-dreijahresvergleich","Der Dreijahresvergleich",[157,458,459],{},"Die folgende Rechnung nutzt den von Shopware genannten Preis pro Ausführung und ein mittleres Szenario: eine Anbindung an ein System mit vorhandenem Connector, Standardfelder, 24.000 Ausführungen pro Monat. Tagessatz (1.000 Euro) und Personentage sind Annahmen aus unserer Projektpraxis. Wer eigene Werte hat, setzt sie ein, die Struktur der Rechnung bleibt.",[188,461,462,475],{},[191,463,464],{},[194,465,466,469,472],{},[197,467,468],{},"Position",[197,470,471],{},"Nexus",[197,473,474],{},"Eigene Middleware",[204,476,477,488,499,509,520],{},[194,478,479,482,485],{},[209,480,481],{},"Initialaufwand",[209,483,484],{},"6 PT = 6.000 €",[209,486,487],{},"40 PT = 40.000 €",[194,489,490,493,496],{},[209,491,492],{},"Hosting über 3 Jahre",[209,494,495],{},"entfällt",[209,497,498],{},"ca. 3.600 €",[194,500,501,504,507],{},[209,502,503],{},"Nutzungskosten über 3 Jahre",[209,505,506],{},"240 €\u002FMonat = 8.640 €",[209,508,495],{},[194,510,511,514,517],{},[209,512,513],{},"Wartung über 3 Jahre",[209,515,516],{},"gering, Connector-Pflege bei Shopware",[209,518,519],{},"0,5 PT\u002FMonat = 18.000 €",[194,521,522,527,532],{},[209,523,524],{},[323,525,526],{},"Summe",[209,528,529],{},[323,530,531],{},"rund 14.600 €",[209,533,534],{},[323,535,536],{},"rund 61.600 €",[157,538,539],{},"Für dieses Szenario ist Nexus etwa viermal günstiger. Wer trotzdem selbst baut, sollte gute Gründe nennen können.",[157,541,542],{},"Bei hohen Volumina kippt die Rechnung, weil die Nutzungskosten linear mitwachsen, während die Kosten einer eigenen Middleware weitgehend fix bleiben. Sie kippt bei Sonderlogik, weil der Initialaufwand auf der Nexus-Seite dann nicht mehr bei 6 Personentagen liegt. Und sie kippt bei Systemen ohne Connector, weil dort beide Seiten dasselbe Mapping bauen, nur dass eine davon zusätzlich pro Ausführung abrechnet.",[157,544,545],{},"Ein Posten fehlt in der Tabelle, weil er sich schlecht beziffern lässt.",[169,547],{},[172,549,551],{"id":550},"lock-in-bei-kritischen-prozessen","Lock-in bei kritischen Prozessen",[157,553,554],{},"Die Rechnung oben bewertet den Aufwand, aber nicht, wie schwer sich die Entscheidung später zurücknehmen lässt. Bei einer Slack-Benachrichtigung spielt das keine Rolle, bei der Bestellstrecke schon.",[157,556,557],{},"Die Abhängigkeit hat vier Ebenen:",[188,559,560,573],{},[191,561,562],{},[194,563,564,567,570],{},[197,565,566],{},"Ebene",[197,568,569],{},"Abhängigkeit",[197,571,572],{},"Was das bedeutet",[204,574,575,586,596,607],{},[194,576,577,580,583],{},[209,578,579],{},"Logik",[209,581,582],{},"Workflows liegen als Konfiguration in der Shopware-Cloud, nicht im Repository",[209,584,585],{},"Kein Diff, kein Code-Review, kein Rollback über den normalen Deployment-Prozess",[194,587,588,590,593],{},[209,589,243],{},[209,591,592],{},"Ausschließlich Cloud, kein Failover in eigener Hand",[209,594,595],{},"Bei einer Störung liegt die Behebung beim Anbieter",[194,597,598,601,604],{},[209,599,600],{},"Preis",[209,602,603],{},"Verbrauchsabhängig und an den Shopware Account gekoppelt",[209,605,606],{},"Einer Preisänderung lässt sich kurzfristig schlecht ausweichen, weil eine Migration Zeit braucht",[194,608,609,612,615],{},[209,610,611],{},"Plattform",[209,613,614],{},"Die Integrationslogik gehört zum Shopsystem",[209,616,617],{},"Ein Plattformwechsel betrifft dann nicht nur den Shop, sondern auch die gesamte Anbindung",[157,619,620],{},"Die letzte Zeile wiegt in der Praxis am schwersten.",[157,622,623],{},"Eine eigene Middleware ist genau der Teil, der ein Replatforming bezahlbar macht. Sie kennt das ERP, die Mappings und die Sonderfälle aus Jahren im laufenden Betrieb. Beim Wechsel des Shopsystems tauscht man den Shop-Adapter und behält den Rest.",[280,625,626],{},[157,627,628],{},"Wer die ERP-Anbindung vollständig in Nexus abbildet, macht aus einem Shopwechsel zusätzlich ein Integrationsprojekt. In der Praxis entscheidet genau diese Rechnung oft darüber, ob ein Replatforming überhaupt angegangen wird.",[630,631,633],"h3",{"id":632},"woran-die-bindung-an-den-account-hängt","Woran die Bindung an den Account hängt",[157,635,636],{},"Verbrauchsabhängige Preise sind planbar, solange das Modell stabil bleibt. Ein Vorgang aus dem vergangenen Jahr zeigt, was die Bindung an einen Shopware Account praktisch bedeutet.",[157,638,639],{},"Zum 24. März 2025 hat Shopware eine Fair Usage Policy eingeführt. Seither ist die Community Edition bis 1 Mio. Euro GMV im Jahr uneingeschränkt nutzbar. Wer darüber liegt, wechselt auf einen kostenpflichtigen Plan. Zur Meldung des GMV sind alle Nutzer der Community Edition verpflichtet, unabhängig von der Höhe, mit erster Frist zum 30. Juni 2025.",[157,641,642],{},"Was ein Wechsel bedeutet, steht auf der Preisseite: Rise beginnt bei 600 Euro im Monat zuzüglich Steuern, Evolve bei 2.400 Euro, Beyond auf Anfrage.",[157,644,645],{},"Für die Planung ist weniger die Schwelle interessant als die Stelle, an der die Policy greift. Der Code der Community Edition ist weiterhin MIT-lizenziert, daran hat die Policy nichts geändert. Sie regelt den Zugang zu Shopware Account und Store. Wer über der Schwelle liegt und nicht wechselt, riskiert die Sperrung von Shopware Account und Store samt Kündigung gemieteter Extensions. Der Shop selbst läuft weiter: Die Community Edition lässt sich laut Shopware auch ohne Account und Store weiter nutzen.",[280,647,648],{},[157,649,650],{},"Nexus setzt einen aktiven Shopware Account voraus und hängt damit an derselben Ebene. Anders als beim Shop gibt es hier keinen MIT-lizenzierten Teil, der ohne den Dienst weiterläuft.",[157,652,653],{},"Das ist kein Vorwurf. Jeder Anbieter darf sein Modell weiterentwickeln, und für diesen Schritt gab es nachvollziehbare Gründe. Für die eigene Planung heißt das nur: Je mehr Geschäftsprozess an einem Dienst hängt, desto weniger Spielraum bleibt, wenn der Anbieter das nächste Mal nachjustiert.",[157,655,656],{},"Dasselbe gilt für Produktentscheidungen. OpenAI hat Instant Checkout nach rund fünf Monaten zurückgezogen, und vor solchen Kurskorrekturen ist kein Anbieter gefeit. Für eine Slack-Benachrichtigung ist das verkraftbar, für eine Auftragsstrecke weniger.",[630,658,660],{"id":659},"lock-in-reduzieren-ohne-auf-nexus-zu-verzichten","Lock-in reduzieren, ohne auf Nexus zu verzichten",[157,662,663],{},"Der Ausweg liegt in der Aufteilung der Schnittstelle: Nexus übernimmt Trigger und Transport, die Fachlogik bleibt im eigenen Code. Der Workflow bildet also keine Bedingungen, Mappings oder Fehlerbehandlung mehr ab. Er ruft einen eigenen Endpunkt auf und übergibt die Rohdaten. Alles ab diesem Punkt liegt im Repository, ist versioniert, testbar und unabhängig von Nexus.",[157,665,666],{},"Diese Aufteilung lohnt sich nur bei kritischen Strecken. Eine Slack-Nachricht bei jeder Bestellung über 5.000 Euro gehört komplett ins Canvas, also in den visuellen Workflow-Editor von Nexus. Ein eigener Endpunkt dafür wäre Overhead.",[157,668,669],{},"Für die kritischen Strecken bleibt eine berechtigte Frage: Wenn die Fachlogik ohnehin im eigenen Code liegt, warum das Event überhaupt durch Nexus schicken? Dafür gibt es zwei Gründe, und mindestens einer sollte zutreffen:",[385,671,672,678],{},[388,673,674,677],{},[323,675,676],{},"Auf der Zielseite steht ein fertiger Connector."," Der eigene Endpunkt bereitet die Daten auf und gibt sie zurück, den Schreibzugriff ins Zielsystem übernimmt der Connector. Damit spart man sich dessen Authentifizierung und Fehlerbehandlung und behält trotzdem die Fachlogik im Repository.",[388,679,680,683],{},[323,681,682],{},"Dasselbe Event geht an mehrere Empfänger, und diese Liste ändert sich."," Ein zusätzlicher Empfänger ist im Workflow eine Konfiguration, im eigenen Code ein Release.",[157,685,686,687,689],{},"Trifft keiner von beiden zu, hat Nexus in dieser Strecke keine Aufgabe mehr. Das Event läuft dann durch einen kostenpflichtigen Dienst, nur um bei einem Endpunkt zu landen, der alles selbst erledigt. Ein Plugin mit ",[183,688,290],{}," bringt es direkt dorthin.",[157,691,692],{},"Der folgende Endpunkt zeigt die Empfängerseite. Die Idempotenz darin ist Pflicht, keine Vorsichtsmaßnahme: Shopware dokumentiert At-least-once-Delivery, dasselbe Event kann also mehrfach ankommen.",[330,694,698],{"className":695,"code":696,"language":697,"meta":338,"style":338},"language-php shiki shiki-themes vitesse-light vitesse-dark","\u003C?php\n\ndeclare(strict_types=1);\n\nnamespace App\\Controller;\n\nuse App\\Message\\ProcessOrderMessage;\nuse Psr\\Log\\LoggerInterface;\nuse Symfony\\Component\\HttpFoundation\\JsonResponse;\nuse Symfony\\Component\\HttpFoundation\\Request;\nuse Symfony\\Component\\HttpFoundation\\Response;\nuse Symfony\\Component\\Routing\\Attribute\\Route;\nuse Symfony\\Component\\Messenger\\MessageBusInterface;\nuse Symfony\\Contracts\\Cache\\CacheInterface;\nuse Symfony\\Contracts\\Cache\\ItemInterface;\n\nfinal class OrderWebhookController\n{\n    public function __construct(\n        private readonly MessageBusInterface $bus,\n        private readonly CacheInterface $idempotencyStore,\n        private readonly LoggerInterface $logger,\n        private readonly string $webhookSecret,\n    ) {\n    }\n\n    #[Route('\u002Fhooks\u002Forder-placed', methods: ['POST'])]\n    public function __invoke(Request $request): Response\n    {\n        $payload = $request->getContent();\n\n        \u002F\u002F 1. Signatur prüfen. Der Endpunkt ist öffentlich erreichbar,\n        \u002F\u002F    die Authentizität hängt allein am HMAC.\n        if (!$this->isSignatureValid($payload, (string) $request->headers->get('X-Signature'))) {\n            return new JsonResponse(['error' => 'invalid signature'], Response::HTTP_UNAUTHORIZED);\n        }\n\n        $data = json_decode($payload, true, 512, JSON_THROW_ON_ERROR);\n        $orderNumber = (string) ($data['orderNumber'] ?? '');\n\n        if ($orderNumber === '') {\n            return new JsonResponse(['error' => 'orderNumber missing'], Response::HTTP_BAD_REQUEST);\n        }\n\n        \u002F\u002F 2. Idempotenz. Bei At-least-once-Delivery kommt dasselbe Event\n        \u002F\u002F    mehrfach an. Der Schutz gehört auf die eigene Seite.\n        $isDuplicate = true;\n        $this->idempotencyStore->get(\n            'order_hook_' . $orderNumber,\n            function (ItemInterface $item) use (&$isDuplicate): bool {\n                $item->expiresAfter(86400);\n                $isDuplicate = false;\n\n                return true;\n            }\n        );\n\n        if ($isDuplicate) {\n            $this->logger->info('Doppelter Aufruf verworfen', ['orderNumber' => $orderNumber]);\n\n            return new JsonResponse(['status' => 'duplicate'], Response::HTTP_OK);\n        }\n\n        \u002F\u002F 3. Annehmen und asynchron verarbeiten. Der Aufrufer bekommt sofort\n        \u002F\u002F    eine Antwort, die eigentliche Arbeit läuft im eigenen Worker.\n        $this->bus->dispatch(new ProcessOrderMessage($orderNumber, $data));\n\n        return new JsonResponse(['status' => 'accepted'], Response::HTTP_ACCEPTED);\n    }\n\n    private function isSignatureValid(string $payload, string $received): bool\n    {\n        $expected = hash_hmac('sha256', $payload, $this->webhookSecret);\n\n        return $received !== '' && hash_equals($expected, $received);\n    }\n}\n","php",[183,699,700,713,720,744,749,768,773,794,814,839,861,883,911,934,958,980,985,997,1003,1018,1040,1057,1074,1091,1100,1106,1111,1158,1185,1191,1216,1221,1228,1234,1299,1346,1352,1357,1391,1432,1437,1455,1492,1497,1502,1508,1514,1528,1545,1565,1603,1623,1637,1642,1652,1658,1664,1669,1682,1727,1732,1770,1775,1780,1786,1792,1829,1834,1872,1877,1882,1917,1922,1962,1967,1999,2004],{"__ignoreMap":338},[701,702,705,709],"span",{"class":703,"line":704},"line",1,[701,706,708],{"class":707},"s5TCs","\u003C?",[701,710,712],{"class":711},"sfsYZ","php\n",[701,714,716],{"class":703,"line":715},2,[701,717,719],{"emptyLinePlaceholder":718},true,"\n",[701,721,723,727,731,734,737,741],{"class":703,"line":722},3,[701,724,726],{"class":725},"sTPum","declare",[701,728,730],{"class":729},"si6no","(",[701,732,733],{"class":711},"strict_types",[701,735,736],{"class":729},"=",[701,738,740],{"class":739},"sqbOQ","1",[701,742,743],{"class":729},");\n",[701,745,747],{"class":703,"line":746},4,[701,748,719],{"emptyLinePlaceholder":718},[701,750,752,755,759,762,765],{"class":703,"line":751},5,[701,753,754],{"class":725},"namespace",[701,756,758],{"class":757},"s_NWU"," App",[701,760,761],{"class":729},"\\",[701,763,764],{"class":757},"Controller",[701,766,767],{"class":729},";\n",[701,769,771],{"class":703,"line":770},6,[701,772,719],{"emptyLinePlaceholder":718},[701,774,776,779,782,784,787,789,792],{"class":703,"line":775},7,[701,777,778],{"class":725},"use",[701,780,758],{"class":781},"sHLBJ",[701,783,761],{"class":729},[701,785,786],{"class":781},"Message",[701,788,761],{"class":729},[701,790,791],{"class":781},"ProcessOrderMessage",[701,793,767],{"class":729},[701,795,797,799,802,804,807,809,812],{"class":703,"line":796},8,[701,798,778],{"class":725},[701,800,801],{"class":781}," Psr",[701,803,761],{"class":729},[701,805,806],{"class":781},"Log",[701,808,761],{"class":729},[701,810,811],{"class":781},"LoggerInterface",[701,813,767],{"class":729},[701,815,817,819,822,824,827,829,832,834,837],{"class":703,"line":816},9,[701,818,778],{"class":725},[701,820,821],{"class":781}," Symfony",[701,823,761],{"class":729},[701,825,826],{"class":781},"Component",[701,828,761],{"class":729},[701,830,831],{"class":781},"HttpFoundation",[701,833,761],{"class":729},[701,835,836],{"class":781},"JsonResponse",[701,838,767],{"class":729},[701,840,842,844,846,848,850,852,854,856,859],{"class":703,"line":841},10,[701,843,778],{"class":725},[701,845,821],{"class":781},[701,847,761],{"class":729},[701,849,826],{"class":781},[701,851,761],{"class":729},[701,853,831],{"class":781},[701,855,761],{"class":729},[701,857,858],{"class":781},"Request",[701,860,767],{"class":729},[701,862,864,866,868,870,872,874,876,878,881],{"class":703,"line":863},11,[701,865,778],{"class":725},[701,867,821],{"class":781},[701,869,761],{"class":729},[701,871,826],{"class":781},[701,873,761],{"class":729},[701,875,831],{"class":781},[701,877,761],{"class":729},[701,879,880],{"class":781},"Response",[701,882,767],{"class":729},[701,884,886,888,890,892,894,896,899,901,904,906,909],{"class":703,"line":885},12,[701,887,778],{"class":725},[701,889,821],{"class":781},[701,891,761],{"class":729},[701,893,826],{"class":781},[701,895,761],{"class":729},[701,897,898],{"class":781},"Routing",[701,900,761],{"class":729},[701,902,903],{"class":781},"Attribute",[701,905,761],{"class":729},[701,907,908],{"class":781},"Route",[701,910,767],{"class":729},[701,912,914,916,918,920,922,924,927,929,932],{"class":703,"line":913},13,[701,915,778],{"class":725},[701,917,821],{"class":781},[701,919,761],{"class":729},[701,921,826],{"class":781},[701,923,761],{"class":729},[701,925,926],{"class":781},"Messenger",[701,928,761],{"class":729},[701,930,931],{"class":781},"MessageBusInterface",[701,933,767],{"class":729},[701,935,937,939,941,943,946,948,951,953,956],{"class":703,"line":936},14,[701,938,778],{"class":725},[701,940,821],{"class":781},[701,942,761],{"class":729},[701,944,945],{"class":781},"Contracts",[701,947,761],{"class":729},[701,949,950],{"class":781},"Cache",[701,952,761],{"class":729},[701,954,955],{"class":781},"CacheInterface",[701,957,767],{"class":729},[701,959,961,963,965,967,969,971,973,975,978],{"class":703,"line":960},15,[701,962,778],{"class":725},[701,964,821],{"class":781},[701,966,761],{"class":729},[701,968,945],{"class":781},[701,970,761],{"class":729},[701,972,950],{"class":781},[701,974,761],{"class":729},[701,976,977],{"class":781},"ItemInterface",[701,979,767],{"class":729},[701,981,983],{"class":703,"line":982},16,[701,984,719],{"emptyLinePlaceholder":718},[701,986,988,991,994],{"class":703,"line":987},17,[701,989,990],{"class":707},"final",[701,992,993],{"class":707}," class",[701,995,996],{"class":757}," OrderWebhookController\n",[701,998,1000],{"class":703,"line":999},18,[701,1001,1002],{"class":729},"{\n",[701,1004,1006,1009,1012,1015],{"class":703,"line":1005},19,[701,1007,1008],{"class":707},"    public",[701,1010,1011],{"class":707}," function",[701,1013,1014],{"class":781}," __construct",[701,1016,1017],{"class":729},"(\n",[701,1019,1021,1024,1027,1030,1033,1037],{"class":703,"line":1020},20,[701,1022,1023],{"class":707},"        private",[701,1025,1026],{"class":707}," readonly",[701,1028,1029],{"class":781}," MessageBusInterface",[701,1031,1032],{"class":729}," $",[701,1034,1036],{"class":1035},"s9nN2","bus",[701,1038,1039],{"class":729},",\n",[701,1041,1043,1045,1047,1050,1052,1055],{"class":703,"line":1042},21,[701,1044,1023],{"class":707},[701,1046,1026],{"class":707},[701,1048,1049],{"class":781}," CacheInterface",[701,1051,1032],{"class":729},[701,1053,1054],{"class":1035},"idempotencyStore",[701,1056,1039],{"class":729},[701,1058,1060,1062,1064,1067,1069,1072],{"class":703,"line":1059},22,[701,1061,1023],{"class":707},[701,1063,1026],{"class":707},[701,1065,1066],{"class":781}," LoggerInterface",[701,1068,1032],{"class":729},[701,1070,1071],{"class":1035},"logger",[701,1073,1039],{"class":729},[701,1075,1077,1079,1081,1084,1086,1089],{"class":703,"line":1076},23,[701,1078,1023],{"class":707},[701,1080,1026],{"class":707},[701,1082,1083],{"class":725}," string",[701,1085,1032],{"class":729},[701,1087,1088],{"class":1035},"webhookSecret",[701,1090,1039],{"class":729},[701,1092,1094,1097],{"class":703,"line":1093},24,[701,1095,1096],{"class":729},"    )",[701,1098,1099],{"class":729}," {\n",[701,1101,1103],{"class":703,"line":1102},25,[701,1104,1105],{"class":729},"    }\n",[701,1107,1109],{"class":703,"line":1108},26,[701,1110,719],{"emptyLinePlaceholder":718},[701,1112,1114,1118,1120,1122,1126,1130,1132,1135,1139,1142,1145,1147,1150,1152,1155],{"class":703,"line":1113},27,[701,1115,1117],{"class":1116},"s8w-G","    #[",[701,1119,908],{"class":781},[701,1121,730],{"class":729},[701,1123,1125],{"class":1124},"scnC2","'",[701,1127,1129],{"class":1128},"spP0B","\u002Fhooks\u002Forder-placed",[701,1131,1125],{"class":1124},[701,1133,1134],{"class":729},",",[701,1136,1138],{"class":1137},"s_xSY"," methods",[701,1140,1141],{"class":729},":",[701,1143,1144],{"class":729}," [",[701,1146,1125],{"class":1124},[701,1148,1149],{"class":1128},"POST",[701,1151,1125],{"class":1124},[701,1153,1154],{"class":729},"])",[701,1156,1157],{"class":1116},"]\n",[701,1159,1161,1163,1165,1168,1170,1172,1174,1177,1180,1182],{"class":703,"line":1160},28,[701,1162,1008],{"class":707},[701,1164,1011],{"class":707},[701,1166,1167],{"class":781}," __invoke",[701,1169,730],{"class":729},[701,1171,858],{"class":781},[701,1173,1032],{"class":729},[701,1175,1176],{"class":1035},"request",[701,1178,1179],{"class":729},")",[701,1181,1141],{"class":707},[701,1183,1184],{"class":781}," Response\n",[701,1186,1188],{"class":703,"line":1187},29,[701,1189,1190],{"class":729},"    {\n",[701,1192,1194,1197,1200,1203,1205,1207,1210,1213],{"class":703,"line":1193},30,[701,1195,1196],{"class":729},"        $",[701,1198,1199],{"class":1035},"payload",[701,1201,1202],{"class":729}," =",[701,1204,1032],{"class":729},[701,1206,1176],{"class":1035},[701,1208,1209],{"class":707},"->",[701,1211,1212],{"class":1137},"getContent",[701,1214,1215],{"class":729},"();\n",[701,1217,1219],{"class":703,"line":1218},31,[701,1220,719],{"emptyLinePlaceholder":718},[701,1222,1224],{"class":703,"line":1223},32,[701,1225,1227],{"class":1226},"snYqZ","        \u002F\u002F 1. Signatur prüfen. Der Endpunkt ist öffentlich erreichbar,\n",[701,1229,1231],{"class":703,"line":1230},33,[701,1232,1233],{"class":1226},"        \u002F\u002F    die Authentizität hängt allein am HMAC.\n",[701,1235,1237,1240,1243,1246,1249,1252,1254,1257,1260,1262,1264,1266,1269,1271,1273,1275,1277,1280,1282,1285,1287,1289,1292,1294,1297],{"class":703,"line":1236},34,[701,1238,1239],{"class":725},"        if",[701,1241,1242],{"class":729}," (",[701,1244,1245],{"class":707},"!",[701,1247,1248],{"class":729},"$",[701,1250,1251],{"class":711},"this",[701,1253,1209],{"class":707},[701,1255,1256],{"class":1137},"isSignatureValid",[701,1258,1259],{"class":729},"($",[701,1261,1199],{"class":1035},[701,1263,1134],{"class":729},[701,1265,1242],{"class":729},[701,1267,1268],{"class":707},"string",[701,1270,1179],{"class":729},[701,1272,1032],{"class":729},[701,1274,1176],{"class":1035},[701,1276,1209],{"class":707},[701,1278,1279],{"class":1035},"headers",[701,1281,1209],{"class":707},[701,1283,1284],{"class":1137},"get",[701,1286,730],{"class":729},[701,1288,1125],{"class":1124},[701,1290,1291],{"class":1128},"X-Signature",[701,1293,1125],{"class":1124},[701,1295,1296],{"class":729},")))",[701,1298,1099],{"class":729},[701,1300,1302,1305,1308,1311,1314,1316,1319,1321,1324,1327,1330,1332,1335,1338,1341,1344],{"class":703,"line":1301},35,[701,1303,1304],{"class":725},"            return",[701,1306,1307],{"class":725}," new",[701,1309,1310],{"class":781}," JsonResponse",[701,1312,1313],{"class":729},"([",[701,1315,1125],{"class":1124},[701,1317,1318],{"class":1128},"error",[701,1320,1125],{"class":1124},[701,1322,1323],{"class":707}," =>",[701,1325,1326],{"class":1124}," '",[701,1328,1329],{"class":1128},"invalid signature",[701,1331,1125],{"class":1124},[701,1333,1334],{"class":729},"],",[701,1336,1337],{"class":781}," Response",[701,1339,1340],{"class":707},"::",[701,1342,1343],{"class":711},"HTTP_UNAUTHORIZED",[701,1345,743],{"class":729},[701,1347,1349],{"class":703,"line":1348},36,[701,1350,1351],{"class":729},"        }\n",[701,1353,1355],{"class":703,"line":1354},37,[701,1356,719],{"emptyLinePlaceholder":718},[701,1358,1360,1362,1365,1367,1370,1372,1374,1376,1379,1381,1384,1386,1389],{"class":703,"line":1359},38,[701,1361,1196],{"class":729},[701,1363,1364],{"class":1035},"data",[701,1366,1202],{"class":729},[701,1368,1369],{"class":781}," json_decode",[701,1371,1259],{"class":729},[701,1373,1199],{"class":1035},[701,1375,1134],{"class":729},[701,1377,1378],{"class":725}," true",[701,1380,1134],{"class":729},[701,1382,1383],{"class":739}," 512",[701,1385,1134],{"class":729},[701,1387,1388],{"class":711}," JSON_THROW_ON_ERROR",[701,1390,743],{"class":729},[701,1392,1394,1396,1399,1401,1403,1405,1407,1410,1412,1415,1417,1419,1421,1424,1427,1430],{"class":703,"line":1393},39,[701,1395,1196],{"class":729},[701,1397,1398],{"class":1035},"orderNumber",[701,1400,1202],{"class":729},[701,1402,1242],{"class":729},[701,1404,1268],{"class":707},[701,1406,1179],{"class":729},[701,1408,1409],{"class":729}," ($",[701,1411,1364],{"class":1035},[701,1413,1414],{"class":729},"[",[701,1416,1125],{"class":1124},[701,1418,1398],{"class":1128},[701,1420,1125],{"class":1124},[701,1422,1423],{"class":729},"]",[701,1425,1426],{"class":707}," ??",[701,1428,1429],{"class":1124}," ''",[701,1431,743],{"class":729},[701,1433,1435],{"class":703,"line":1434},40,[701,1436,719],{"emptyLinePlaceholder":718},[701,1438,1440,1442,1444,1446,1449,1451,1453],{"class":703,"line":1439},41,[701,1441,1239],{"class":725},[701,1443,1409],{"class":729},[701,1445,1398],{"class":1035},[701,1447,1448],{"class":707}," ===",[701,1450,1429],{"class":1124},[701,1452,1179],{"class":729},[701,1454,1099],{"class":729},[701,1456,1458,1460,1462,1464,1466,1468,1470,1472,1474,1476,1479,1481,1483,1485,1487,1490],{"class":703,"line":1457},42,[701,1459,1304],{"class":725},[701,1461,1307],{"class":725},[701,1463,1310],{"class":781},[701,1465,1313],{"class":729},[701,1467,1125],{"class":1124},[701,1469,1318],{"class":1128},[701,1471,1125],{"class":1124},[701,1473,1323],{"class":707},[701,1475,1326],{"class":1124},[701,1477,1478],{"class":1128},"orderNumber missing",[701,1480,1125],{"class":1124},[701,1482,1334],{"class":729},[701,1484,1337],{"class":781},[701,1486,1340],{"class":707},[701,1488,1489],{"class":711},"HTTP_BAD_REQUEST",[701,1491,743],{"class":729},[701,1493,1495],{"class":703,"line":1494},43,[701,1496,1351],{"class":729},[701,1498,1500],{"class":703,"line":1499},44,[701,1501,719],{"emptyLinePlaceholder":718},[701,1503,1505],{"class":703,"line":1504},45,[701,1506,1507],{"class":1226},"        \u002F\u002F 2. Idempotenz. Bei At-least-once-Delivery kommt dasselbe Event\n",[701,1509,1511],{"class":703,"line":1510},46,[701,1512,1513],{"class":1226},"        \u002F\u002F    mehrfach an. Der Schutz gehört auf die eigene Seite.\n",[701,1515,1517,1519,1522,1524,1526],{"class":703,"line":1516},47,[701,1518,1196],{"class":729},[701,1520,1521],{"class":1035},"isDuplicate",[701,1523,1202],{"class":729},[701,1525,1378],{"class":725},[701,1527,767],{"class":729},[701,1529,1531,1533,1535,1537,1539,1541,1543],{"class":703,"line":1530},48,[701,1532,1196],{"class":729},[701,1534,1251],{"class":711},[701,1536,1209],{"class":707},[701,1538,1054],{"class":1035},[701,1540,1209],{"class":707},[701,1542,1284],{"class":1137},[701,1544,1017],{"class":729},[701,1546,1548,1551,1554,1556,1559,1561,1563],{"class":703,"line":1547},49,[701,1549,1550],{"class":1124},"            '",[701,1552,1553],{"class":1128},"order_hook_",[701,1555,1125],{"class":1124},[701,1557,1558],{"class":707}," .",[701,1560,1032],{"class":729},[701,1562,1398],{"class":1035},[701,1564,1039],{"class":729},[701,1566,1568,1571,1573,1575,1577,1580,1582,1585,1587,1590,1592,1594,1596,1598,1601],{"class":703,"line":1567},50,[701,1569,1570],{"class":707},"            function",[701,1572,1242],{"class":729},[701,1574,977],{"class":781},[701,1576,1032],{"class":729},[701,1578,1579],{"class":1035},"item",[701,1581,1179],{"class":729},[701,1583,1584],{"class":725}," use",[701,1586,1242],{"class":729},[701,1588,1589],{"class":707},"&",[701,1591,1248],{"class":729},[701,1593,1521],{"class":1035},[701,1595,1179],{"class":729},[701,1597,1141],{"class":707},[701,1599,1600],{"class":725}," bool",[701,1602,1099],{"class":729},[701,1604,1606,1609,1611,1613,1616,1618,1621],{"class":703,"line":1605},51,[701,1607,1608],{"class":729},"                $",[701,1610,1579],{"class":1035},[701,1612,1209],{"class":707},[701,1614,1615],{"class":1137},"expiresAfter",[701,1617,730],{"class":729},[701,1619,1620],{"class":739},"86400",[701,1622,743],{"class":729},[701,1624,1626,1628,1630,1632,1635],{"class":703,"line":1625},52,[701,1627,1608],{"class":729},[701,1629,1521],{"class":1035},[701,1631,1202],{"class":729},[701,1633,1634],{"class":725}," false",[701,1636,767],{"class":729},[701,1638,1640],{"class":703,"line":1639},53,[701,1641,719],{"emptyLinePlaceholder":718},[701,1643,1645,1648,1650],{"class":703,"line":1644},54,[701,1646,1647],{"class":725},"                return",[701,1649,1378],{"class":725},[701,1651,767],{"class":729},[701,1653,1655],{"class":703,"line":1654},55,[701,1656,1657],{"class":729},"            }\n",[701,1659,1661],{"class":703,"line":1660},56,[701,1662,1663],{"class":729},"        );\n",[701,1665,1667],{"class":703,"line":1666},57,[701,1668,719],{"emptyLinePlaceholder":718},[701,1670,1672,1674,1676,1678,1680],{"class":703,"line":1671},58,[701,1673,1239],{"class":725},[701,1675,1409],{"class":729},[701,1677,1521],{"class":1035},[701,1679,1179],{"class":729},[701,1681,1099],{"class":729},[701,1683,1685,1688,1690,1692,1694,1696,1699,1701,1703,1706,1708,1710,1712,1714,1716,1718,1720,1722,1724],{"class":703,"line":1684},59,[701,1686,1687],{"class":729},"            $",[701,1689,1251],{"class":711},[701,1691,1209],{"class":707},[701,1693,1071],{"class":1035},[701,1695,1209],{"class":707},[701,1697,1698],{"class":1137},"info",[701,1700,730],{"class":729},[701,1702,1125],{"class":1124},[701,1704,1705],{"class":1128},"Doppelter Aufruf verworfen",[701,1707,1125],{"class":1124},[701,1709,1134],{"class":729},[701,1711,1144],{"class":729},[701,1713,1125],{"class":1124},[701,1715,1398],{"class":1128},[701,1717,1125],{"class":1124},[701,1719,1323],{"class":707},[701,1721,1032],{"class":729},[701,1723,1398],{"class":1035},[701,1725,1726],{"class":729},"]);\n",[701,1728,1730],{"class":703,"line":1729},60,[701,1731,719],{"emptyLinePlaceholder":718},[701,1733,1735,1737,1739,1741,1743,1745,1748,1750,1752,1754,1757,1759,1761,1763,1765,1768],{"class":703,"line":1734},61,[701,1736,1304],{"class":725},[701,1738,1307],{"class":725},[701,1740,1310],{"class":781},[701,1742,1313],{"class":729},[701,1744,1125],{"class":1124},[701,1746,1747],{"class":1128},"status",[701,1749,1125],{"class":1124},[701,1751,1323],{"class":707},[701,1753,1326],{"class":1124},[701,1755,1756],{"class":1128},"duplicate",[701,1758,1125],{"class":1124},[701,1760,1334],{"class":729},[701,1762,1337],{"class":781},[701,1764,1340],{"class":707},[701,1766,1767],{"class":711},"HTTP_OK",[701,1769,743],{"class":729},[701,1771,1773],{"class":703,"line":1772},62,[701,1774,1351],{"class":729},[701,1776,1778],{"class":703,"line":1777},63,[701,1779,719],{"emptyLinePlaceholder":718},[701,1781,1783],{"class":703,"line":1782},64,[701,1784,1785],{"class":1226},"        \u002F\u002F 3. Annehmen und asynchron verarbeiten. Der Aufrufer bekommt sofort\n",[701,1787,1789],{"class":703,"line":1788},65,[701,1790,1791],{"class":1226},"        \u002F\u002F    eine Antwort, die eigentliche Arbeit läuft im eigenen Worker.\n",[701,1793,1795,1797,1799,1801,1803,1805,1808,1810,1813,1816,1818,1820,1822,1824,1826],{"class":703,"line":1794},66,[701,1796,1196],{"class":729},[701,1798,1251],{"class":711},[701,1800,1209],{"class":707},[701,1802,1036],{"class":1035},[701,1804,1209],{"class":707},[701,1806,1807],{"class":1137},"dispatch",[701,1809,730],{"class":729},[701,1811,1812],{"class":725},"new",[701,1814,1815],{"class":781}," ProcessOrderMessage",[701,1817,1259],{"class":729},[701,1819,1398],{"class":1035},[701,1821,1134],{"class":729},[701,1823,1032],{"class":729},[701,1825,1364],{"class":1035},[701,1827,1828],{"class":729},"));\n",[701,1830,1832],{"class":703,"line":1831},67,[701,1833,719],{"emptyLinePlaceholder":718},[701,1835,1837,1840,1842,1844,1846,1848,1850,1852,1854,1856,1859,1861,1863,1865,1867,1870],{"class":703,"line":1836},68,[701,1838,1839],{"class":725},"        return",[701,1841,1307],{"class":725},[701,1843,1310],{"class":781},[701,1845,1313],{"class":729},[701,1847,1125],{"class":1124},[701,1849,1747],{"class":1128},[701,1851,1125],{"class":1124},[701,1853,1323],{"class":707},[701,1855,1326],{"class":1124},[701,1857,1858],{"class":1128},"accepted",[701,1860,1125],{"class":1124},[701,1862,1334],{"class":729},[701,1864,1337],{"class":781},[701,1866,1340],{"class":707},[701,1868,1869],{"class":711},"HTTP_ACCEPTED",[701,1871,743],{"class":729},[701,1873,1875],{"class":703,"line":1874},69,[701,1876,1105],{"class":729},[701,1878,1880],{"class":703,"line":1879},70,[701,1881,719],{"emptyLinePlaceholder":718},[701,1883,1885,1888,1890,1893,1895,1897,1899,1901,1903,1905,1907,1910,1912,1914],{"class":703,"line":1884},71,[701,1886,1887],{"class":707},"    private",[701,1889,1011],{"class":707},[701,1891,1892],{"class":1137}," isSignatureValid",[701,1894,730],{"class":729},[701,1896,1268],{"class":725},[701,1898,1032],{"class":729},[701,1900,1199],{"class":1035},[701,1902,1134],{"class":729},[701,1904,1083],{"class":725},[701,1906,1032],{"class":729},[701,1908,1909],{"class":1035},"received",[701,1911,1179],{"class":729},[701,1913,1141],{"class":707},[701,1915,1916],{"class":725}," bool\n",[701,1918,1920],{"class":703,"line":1919},72,[701,1921,1190],{"class":729},[701,1923,1925,1927,1930,1932,1935,1937,1939,1942,1944,1946,1948,1950,1952,1954,1956,1958,1960],{"class":703,"line":1924},73,[701,1926,1196],{"class":729},[701,1928,1929],{"class":1035},"expected",[701,1931,1202],{"class":729},[701,1933,1934],{"class":781}," hash_hmac",[701,1936,730],{"class":729},[701,1938,1125],{"class":1124},[701,1940,1941],{"class":1128},"sha256",[701,1943,1125],{"class":1124},[701,1945,1134],{"class":729},[701,1947,1032],{"class":729},[701,1949,1199],{"class":1035},[701,1951,1134],{"class":729},[701,1953,1032],{"class":729},[701,1955,1251],{"class":711},[701,1957,1209],{"class":707},[701,1959,1088],{"class":1035},[701,1961,743],{"class":729},[701,1963,1965],{"class":703,"line":1964},74,[701,1966,719],{"emptyLinePlaceholder":718},[701,1968,1970,1972,1974,1976,1979,1981,1984,1987,1989,1991,1993,1995,1997],{"class":703,"line":1969},75,[701,1971,1839],{"class":725},[701,1973,1032],{"class":729},[701,1975,1909],{"class":1035},[701,1977,1978],{"class":707}," !==",[701,1980,1429],{"class":1124},[701,1982,1983],{"class":707}," &&",[701,1985,1986],{"class":781}," hash_equals",[701,1988,1259],{"class":729},[701,1990,1929],{"class":1035},[701,1992,1134],{"class":729},[701,1994,1032],{"class":729},[701,1996,1909],{"class":1035},[701,1998,743],{"class":729},[701,2000,2002],{"class":703,"line":2001},76,[701,2003,1105],{"class":729},[701,2005,2007],{"class":703,"line":2006},77,[701,2008,2009],{"class":729},"}\n",[157,2011,2012],{},"Fällt Nexus weg, ersetzt man den Trigger durch einen EventSubscriber im eigenen Plugin, einen Cronjob oder einen Queue-Consumer. Der Endpunkt, die Verarbeitung, die Fehlerbehandlung und die Mappings bleiben unverändert. Der Wechsel kostet Tage statt Monate.",[157,2014,2015],{},"Für den Alltag reichen drei Regeln:",[385,2017,2018,2021,2024],{},[388,2019,2020],{},"Jede Strecke bekommt vorab eine Antwort auf die Frage, was passiert, wenn sie zwei Tage nicht läuft. Ist der Ausfall verkraftbar, darf alles ins Canvas.",[388,2022,2023],{},"Wird der Ausfall teuer, gehören die Geschäftsregeln in Code, nicht ins Canvas.",[388,2025,2026],{},"Wenn dabei vom Workflow nur noch ein Aufruf übrig bleibt, gehört die Strecke nicht in Nexus, sondern an einen eigenen EventSubscriber.",[169,2028],{},[172,2030,2032],{"id":2031},"die-dritte-option-eine-eigene-workflow-engine","Die dritte Option: eine eigene Workflow-Engine",[157,2034,2035],{},"Workflow-Engines dieser Bauform gibt es auch zum Selbstbetreiben. Mit n8n läuft dieselbe Art von Workflow auf eigener Infrastruktur, ohne Abrechnung pro Ausführung.",[157,2037,2038],{},"Für Shopware existieren Community-Nodes, etwa von solution25 und codeblick. Wo kein Node passt, bleibt der HTTP-Node. Für Aufrufe gegen die Shopware Admin API ist das kein praktischer Nachteil.",[188,2040,2041,2053],{},[191,2042,2043],{},[194,2044,2045,2048,2050],{},[197,2046,2047],{},"Kriterium",[197,2049,471],{},[197,2051,2052],{},"n8n, selbst betrieben",[204,2054,2055,2065,2076,2087,2098,2109,2120,2131],{},[194,2056,2057,2059,2062],{},[209,2058,243],{},[209,2060,2061],{},"ausschließlich Cloud bei Shopware",[209,2063,2064],{},"eigener Server oder Kubernetes",[194,2066,2067,2070,2073],{},[209,2068,2069],{},"Laufende Kosten",[209,2071,2072],{},"pro Ausführung",[209,2074,2075],{},"Infrastruktur, unabhängig vom Volumen",[194,2077,2078,2081,2084],{},[209,2079,2080],{},"Workflow-Definition",[209,2082,2083],{},"Konfiguration in der Shopware-Cloud",[209,2085,2086],{},"JSON, exportierbar und in Git versionierbar",[194,2088,2089,2092,2095],{},[209,2090,2091],{},"Shopware-Events",[209,2093,2094],{},"im Dienst konfiguriert",[209,2096,2097],{},"Plugin mit EventSubscriber oder App-Webhook selbst gebaut",[194,2099,2100,2103,2106],{},[209,2101,2102],{},"Skalierung",[209,2104,2105],{},"durch den Anbieter",[209,2107,2108],{},"Queue Mode mit Redis und mehreren Workern",[194,2110,2111,2114,2117],{},[209,2112,2113],{},"Testmodus und Undo",[209,2115,2116],{},"im Early Access nicht vorhanden",[209,2118,2119],{},"vorhanden",[194,2121,2122,2125,2128],{},[209,2123,2124],{},"Fehlerbehandlung",[209,2126,2127],{},"begrenzte Fehlerdetails",[209,2129,2130],{},"eigene Error-Workflows, Retries, eigenes Monitoring",[194,2132,2133,2136,2139],{},[209,2134,2135],{},"Betriebsaufwand",[209,2137,2138],{},"keiner",[209,2140,2141],{},"vollständig beim Betreiber",[157,2143,2144],{},"Der Kern des Vergleichs steht in zwei Zeilen: Nexus liefert die Events frei Haus und nimmt den Betrieb ab, n8n liefert Kontrolle und Nachvollziehbarkeit. Der Betriebsaufwand ist der Preis dafür: n8n im Produktivbetrieb heißt Main-Instanz, Worker, Redis und Postgres, dazu Backups, Updates und Monitoring.",[630,2146,2148],{"id":2147},"zwei-punkte-die-man-bei-n8n-kennen-sollte","Zwei Punkte, die man bei n8n kennen sollte",[157,2150,2151,2154],{},[323,2152,2153],{},"Die Lizenz ist nicht OSI-konform."," n8n steht seit dem 17. März 2022 unter der Sustainable Use License, davor unter Apache 2.0 mit Commons Clause. Für den eigenen Shop ist das unkritisch: Die Nutzung für interne Geschäftszwecke ist ausdrücklich erlaubt, und genau darum geht es, wenn ein Händler seine eigenen Systeme verbindet. Untersagt ist, n8n selbst als Dienst weiterzuverkaufen.",[157,2156,2157,2158,2161],{},"Praktisch relevanter ist ein zweiter Punkt: Dateien mit ",[183,2159,2160],{},".ee."," im Pfad stehen nicht unter der Sustainable Use License, sondern verlangen eine Enterprise-Lizenz. Betroffen sind Funktionen, die n8n als Enterprise-Features führt, darunter SSO. Wer sie braucht, zahlt auch bei n8n.",[157,2163,2164,2167],{},[323,2165,2166],{},"Das Canvas-Problem bleibt."," Auch bei n8n liegt die Logik in einem grafischen Editor. Der Unterschied ist, dass sich Workflows als JSON exportieren und ins Repository legen lassen. Richtig reviewen lassen sich diese JSON-Diffs trotzdem kaum.",[280,2169,2170],{},[157,2171,2172],{},"n8n nimmt den Vendor-Lock-in und die Abrechnung pro Ausführung aus der Rechnung. Am Grundproblem ändert es nichts: Geschäftslogik in einem Canvas lässt sich schlechter prüfen als Code.",[157,2174,2175],{},"Die Empfehlung aus dem vorigen Abschnitt bleibt damit bestehen. Ob Nexus oder n8n: Trigger und Transport gehören in die Engine, die Fachlogik in einen eigenen Endpunkt.",[157,2177,2178],{},"Wer ohnehin kein Canvas braucht, fährt mit Temporal oder einer schlichten Kombination aus Symfony Messenger und Cron oft schlanker. Kestra, Windmill und Node-RED gehen in dieselbe Richtung wie n8n und lohnen einen Blick, wenn eine bestimmte Anforderung dort besser passt.",[169,2180],{},[172,2182,2184],{"id":2183},"der-hybride-weg","Der hybride Weg",[157,2186,2187],{},"In den meisten mittelständischen Projekten ist die Entscheidung keine Entweder-oder-Frage.",[157,2189,2190],{},"Ein praktikabler Schnitt:",[385,2192,2193,2199],{},[388,2194,2195,2198],{},[323,2196,2197],{},"Eine Workflow-Engine"," übernimmt Standardstrecken, Benachrichtigungen und alles, was eventgetrieben und niedrigvolumig ist. Ob Nexus oder n8n, hängt davon ab, ob ein Betriebsteam vorhanden ist",[388,2200,2201,2203],{},[323,2202,474],{}," übernimmt die kritischen Strecken mit Zustand, Checkpoints und Sonderlogik, typischerweise Artikelstamm, Preise und Auftragsverarbeitung",[157,2205,2206],{},"Damit sinkt der Umfang der Eigenentwicklung deutlich, ohne dass die Teile, die im Fehlerfall Geld kosten, an einem fremden Dienst hängen. Die Middleware bleibt außerdem erhalten und übersteht einen Plattformwechsel.",[157,2208,2209],{},"Der Preis dieses Wegs ist, dass zwei Systeme betrieben und dokumentiert werden müssen. Das lohnt sich ab dem Punkt, an dem mindestens eine Strecke die Grenzen von Nexus erreicht.",[169,2211],{},[172,2213,2215],{"id":2214},"entscheidungsmatrix","Entscheidungsmatrix",[188,2217,2218,2231],{},[191,2219,2220],{},[194,2221,2222,2224,2226,2229],{},[197,2223,2047],{},[197,2225,471],{},[197,2227,2228],{},"Hybrid",[197,2230,474],{},[204,2232,2233,2247,2261,2275,2288,2299,2310,2324,2338],{},[194,2234,2235,2238,2241,2244],{},[209,2236,2237],{},"Connector vorhanden",[209,2239,2240],{},"ja",[209,2242,2243],{},"teilweise",[209,2245,2246],{},"egal",[194,2248,2249,2252,2255,2258],{},[209,2250,2251],{},"Ausführungen pro Monat (Orientierung)",[209,2253,2254],{},"unter ca. 50.000",[209,2256,2257],{},"gemischt",[209,2259,2260],{},"über ca. 200.000",[194,2262,2263,2266,2269,2272],{},[209,2264,2265],{},"Sonderlogik im Mapping",[209,2267,2268],{},"keine",[209,2270,2271],{},"punktuell",[209,2273,2274],{},"umfangreich",[194,2276,2277,2280,2283,2286],{},[209,2278,2279],{},"Fehlerbehandlung mit Checkpoints nötig",[209,2281,2282],{},"nein",[209,2284,2285],{},"für Teilstrecken",[209,2287,2240],{},[194,2289,2290,2293,2295,2297],{},[209,2291,2292],{},"Nachvollziehbarkeit im Fehlerfall gefordert",[209,2294,2282],{},[209,2296,2285],{},[209,2298,2240],{},[194,2300,2301,2304,2306,2308],{},[209,2302,2303],{},"Kontrolle über die Laufzeitumgebung nötig",[209,2305,2282],{},[209,2307,2285],{},[209,2309,2240],{},[194,2311,2312,2315,2318,2321],{},[209,2313,2314],{},"Eigenes Betriebsteam",[209,2316,2317],{},"nicht nötig",[209,2319,2320],{},"hilfreich",[209,2322,2323],{},"erforderlich",[194,2325,2326,2329,2332,2335],{},[209,2327,2328],{},"Plattformwechsel in den nächsten Jahren denkbar",[209,2330,2331],{},"unkritisch",[209,2333,2334],{},"Kernstrecken bleiben portabel",[209,2336,2337],{},"vollständig portabel",[194,2339,2340,2343,2345,2348],{},[209,2341,2342],{},"Zwei Tage Ausfall der Strecke verkraftbar",[209,2344,2240],{},[209,2346,2347],{},"für die Nexus-Strecken",[209,2349,2350],{},"muss es nicht sein",[157,2352,2353],{},"Wer in der Spalte Nexus überall zustimmt, aber ein Betriebsteam hat und die Abrechnung pro Ausführung vermeiden will, landet bei einem selbst betriebenen n8n. Die fachliche Bewertung bleibt dieselbe, es verschiebt sich nur, wer den Betrieb trägt.",[169,2355],{},[172,2357,2359],{"id":2358},"fazit","Fazit",[157,2361,2362],{},"Technisch ist Nexus ein Cloud-iPaaS in einer etablierten Produktkategorie. Ob es trägt, entscheidet der Connector-Katalog: Steht das eigene Zielsystem darin, nimmt es echte Arbeit ab. Für diese Fälle ist die eigene Middleware vom Tisch. Das offen zu sagen fällt einer Agentur schwer, die von genau diesen Projekten lebt. Es ändert nichts daran, dass es stimmt.",[157,2364,2365],{},"Was bleibt, sind die Strecken mit Zustand, Sonderlogik oder Volumen. Dort ist Nexus im aktuellen Stand kein Ersatz, sondern eine Ergänzung für die einfachen Strecken daneben. Die Gründe nennt die Dokumentation selbst: kein Testmodus, begrenzte Fehlerdetails, At-least-once-Delivery. Ein Teil davon dürfte sich mit den kommenden Releases erledigen.",[157,2367,2368],{},"Die Kostenrechnung allein trägt die Entscheidung nicht. Bei den Strecken, die den Betrieb tragen, wiegt die Abhängigkeit schwerer als der Aufwand. Wer die ERP-Anbindung vollständig in eine Plattform legt, die zum Shopsystem gehört, muss beim Plattformwechsel beides gleichzeitig ersetzen.",[157,2370,2371],{},"Unabhängig von der Wahl gilt dieselbe Regel: Fachlogik ins eigene Repository, Trigger und Transport in die Engine. Damit bleibt der Nutzen erhalten und der Wechsel eine Frage von Tagen.",[157,2373,2374],{},"👉 Wenn du wissen willst, welche deiner Schnittstellen in Nexus gehören und welche nicht:",[2376,2377,2397],"nuxt-link",{"className":2378,"to":2396},[2379,2380,188,2381,2382,2383,2384,2385,2386,2387,2388,2389,2390,2391,2392,2393,2394,2395],"not-prose","mx-auto","text-white","px-4","py-1.5","text-base","font-semibold","leading-7","shadow-sm","ring-1","duration-300","ease","rounded-lg","bg-primary","ring-primary","hover:bg-secondary","hover:ring-secondary","\u002Fkontakt",[157,2398,2399],{},"👉 Melde dich",[169,2401],{},[172,2403,2405],{"id":2404},"quellen","Quellen",[385,2407,2408,2417,2425,2435,2443,2451,2459,2467,2480],{},[388,2409,2410,2416],{},[161,2411,2415],{"href":2412,"rel":2413},"https:\u002F\u002Fdocs.shopware.com\u002Fde\u002Fshopware-6-de\u002Fshopware-services\u002Fshopware-nexus",[2414],"nofollow","Shopware Docs: Shopware Nexus"," für Voraussetzungen, Aktivierung, Trigger und Aktionen",[388,2418,2419,2424],{},[161,2420,2423],{"href":2421,"rel":2422},"https:\u002F\u002Fdeveloper.shopware.com\u002Fdocs\u002Fproducts\u002Fnexus\u002Fgetting-started.html",[2414],"Shopware Developer Docs: Nexus, Getting Started"," für die bekannten Einschränkungen im Early Access",[388,2426,2427,2432,2433],{},[161,2428,2431],{"href":2429,"rel":2430},"https:\u002F\u002Fdeveloper.shopware.com\u002Fdocs\u002Fguides\u002Fplugins\u002Fplugins\u002Fplugin-fundamentals\u002Flistening-to-events.html",[2414],"Shopware Developer Docs: Listening to events"," für den Plugin-Weg über ",[183,2434,290],{},[388,2436,2437,2442],{},[161,2438,2441],{"href":2439,"rel":2440},"https:\u002F\u002Fdeveloper.shopware.com\u002Fdocs\u002Fguides\u002Fplugins\u002Fapps\u002Fwebhook.html",[2414],"Shopware Developer Docs: App-System, Webhooks"," für Manifest, Registrierung und Signaturprüfung",[388,2444,2445,2450],{},[161,2446,2449],{"href":2447,"rel":2448},"https:\u002F\u002Fwww.shopware.com\u002Fde\u002Fprodukte\u002Fshopware-nexus\u002F",[2414],"Shopware: Produktseite Nexus"," für die Angaben zu Integrationskosten und Projektaufwand",[388,2452,2453,2458],{},[161,2454,2457],{"href":2455,"rel":2456},"https:\u002F\u002Fwww.shopware.com\u002Fen\u002Fpricing\u002F",[2414],"Shopware: Pricing"," für die Editionspreise und die Abrechnung von Nexus",[388,2460,2461,2466],{},[161,2462,2465],{"href":2463,"rel":2464},"https:\u002F\u002Fwww.shopware.com\u002Fde\u002Fnews\u002Ffair-usage-policy-community-edition\u002F",[2414],"Shopware: Fair Usage Policy für die Community Edition"," für Schwelle, Meldepflicht und Fristen",[388,2468,2469,2474,2475],{},[161,2470,2473],{"href":2471,"rel":2472},"https:\u002F\u002Fdocs.n8n.io\u002Fsustainable-use-license\u002F",[2414],"n8n: Sustainable Use License"," und ",[161,2476,2479],{"href":2477,"rel":2478},"https:\u002F\u002Fgithub.com\u002Fn8n-io\u002Fn8n\u002Fblob\u002Fmaster\u002FLICENSE.md",[2414],"LICENSE.md",[388,2481,2482],{},[161,2483,2486],{"href":2484,"rel":2485},"https:\u002F\u002Fdocs.n8n.io\u002Fhosting\u002Fscaling\u002Fqueue-mode\u002F",[2414],"n8n Docs: Queue Mode",[157,2488,2489],{},"Stand der Angaben: Juli 2026. Nexus befindet sich im Early Access, Funktionsumfang und Konditionen können sich ändern.",[2491,2492,2493],"style",{},"html pre.shiki code .s5TCs, html code.shiki .s5TCs{--shiki-default:#AB5959;--shiki-dark:#CB7676}html pre.shiki code .sfsYZ, html code.shiki .sfsYZ{--shiki-default:#A65E2B;--shiki-dark:#C99076}html pre.shiki code .sTPum, html code.shiki .sTPum{--shiki-default:#1E754F;--shiki-dark:#4D9375}html pre.shiki code .si6no, html code.shiki .si6no{--shiki-default:#999999;--shiki-dark:#666666}html pre.shiki code .sqbOQ, html code.shiki .sqbOQ{--shiki-default:#2F798A;--shiki-dark:#4C9A91}html pre.shiki code .s_NWU, html code.shiki .s_NWU{--shiki-default:#2E8F82;--shiki-dark:#5DA994}html pre.shiki code .sHLBJ, html code.shiki .sHLBJ{--shiki-default:#998418;--shiki-dark:#B8A965}html pre.shiki code .s9nN2, html code.shiki .s9nN2{--shiki-default:#B07D48;--shiki-dark:#BD976A}html pre.shiki code .s8w-G, html code.shiki .s8w-G{--shiki-default:#393A34;--shiki-dark:#DBD7CAEE}html pre.shiki code .scnC2, html code.shiki .scnC2{--shiki-default:#B5695977;--shiki-dark:#C98A7D77}html pre.shiki code .spP0B, html code.shiki .spP0B{--shiki-default:#B56959;--shiki-dark:#C98A7D}html pre.shiki code .s_xSY, html code.shiki .s_xSY{--shiki-default:#59873A;--shiki-dark:#80A665}html pre.shiki code .snYqZ, html code.shiki .snYqZ{--shiki-default:#A0ADA0;--shiki-dark:#758575DD}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":338,"searchDepth":715,"depth":715,"links":2495},[2496,2497,2498,2499,2500,2501,2502,2506,2509,2510,2511,2512],{"id":174,"depth":715,"text":175},{"id":262,"depth":715,"text":263},{"id":309,"depth":715,"text":310},{"id":379,"depth":715,"text":380},{"id":410,"depth":715,"text":411},{"id":455,"depth":715,"text":456},{"id":550,"depth":715,"text":551,"children":2503},[2504,2505],{"id":632,"depth":722,"text":633},{"id":659,"depth":722,"text":660},{"id":2031,"depth":715,"text":2032,"children":2507},[2508],{"id":2147,"depth":722,"text":2148},{"id":2183,"depth":715,"text":2184},{"id":2214,"depth":715,"text":2215},{"id":2358,"depth":715,"text":2359},{"id":2404,"depth":715,"text":2405},"Nexus ist Shopwares eigenes Cloud-iPaaS. Was es abnimmt, wo die Grenzen liegen, was die Abrechnung pro Ausführung für die Architektur bedeutet und welche Strecken besser in eigener Hand bleiben.","md",{},"\u002Fde\u002Fblog\u002Fshopware-nexus-oder-eigene-middleware","2026-07-31 08:00:00",[2519],{"headline":148,"mainEntityOfPage":2520,"author":2522,"publisher":2527,"datePublished":2528,"@type":2529},{"@id":2521},"#webpage",{"@id":2523,"name":2524,"url":2525,"@type":2526},"#identity","Kickbyte GmbH","https:\u002F\u002Fkickbyte.de","Organization",{"@id":2523,"name":2524,"url":2525,"@type":2526},"2026-07-31T08:00:00Z","BlogPosting",{"title":2531,"description":2532,"ogTitle":2533,"ogDescription":2534,"robots":2535},"Shopware Nexus oder eigene Middleware? Entscheidungshilfe für ERP-Anbindungen","Nexus im Praxischeck: Einordnung des nativen iPaaS, verfügbare Connectors, Kosten pro Ausführung, Dreijahresvergleich und n8n als selbst betriebene Alternative.","Shopware Nexus oder eigene Middleware? Eine Entscheidungshilfe - Kickbyte","Was Shopware Nexus abnimmt, wo die Grenzen liegen und welche ERP-Strecken besser in eigener Hand bleiben.","index,follow",{"loc":2516,"lastmod":2537,"changefreq":2538,"priority":2539},"2026-07-31","monthly",0.8,"de\u002Fblog\u002Fshopware-nexus-oder-eigene-middleware",[2542,471,2543,2544,2545,2546,2547],"Shopware","n8n","ERP-Integration","Systemintegration","Middleware","E-Commerce","shopware-nexus-vs-custom-middleware","KgUZXfApxJclBEBVuzb_K69yC_10mztxOI2MfwqisVg",1787334844730]