Zum Inhalt springen

Shopware 6 Flow Builder: Geschäftsprozesse automatisieren ohne Code

Veröffentlicht am 28. Apr. 2025 | ca. 1 Min. Lesezeit |

Der Flow Builder wurde in Shopware 6.4 eingeführt und ersetzt das alte Action-Konzept. Er ermöglicht Shop-Betreibern, komplexe Automatisierungen visuell zu konfigurieren: Wenn ein bestimmtes Ereignis eintritt (Trigger), werden Bedingungen geprüft und Aktionen ausgeführt — alles ohne Programmierkenntnis.

Grundkonzepte

Ein Flow besteht aus:

  • Trigger: Das auslösende Ereignis (z.B. checkout.order.placed, customer.written)
  • Conditions (IF): Optionale Bedingungen (z.B. "Bestellsumme > 100 €")
  • Actions (THEN/ELSE): Die auszuführenden Aktionen (E-Mail senden, Tag hinzufügen, Status ändern)

Shopware bringt viele vorgefertigte Aktionen mit:

  • E-Mail-Benachrichtigung senden
  • Bestellstatus ändern
  • Kunden-Tag hinzufügen oder entfernen
  • Dokument generieren (Rechnung, Lieferschein)
  • Webhook auslösen

Eigene Flow-Action per Plugin

Die echte Stärke des Flow Builders liegt darin, dass man eigene Aktionen registrieren kann. Das Beispiel: Eine Action, die bei Bestelleingang eine Slack-Benachrichtigung sendet.

Action-Klasse

<?php

declare(strict_types=1);

namespace MyPlugin\Core\Content\Flow\Action;

use Shopware\Core\Content\Flow\Dispatching\Action\FlowAction;
use Shopware\Core\Content\Flow\Dispatching\StorableFlow;
use Shopware\Core\Framework\Event\OrderAware;

class SendSlackNotificationAction extends FlowAction
{
    public static function getName(): string
    {
        return 'action.send_slack_notification';
    }

    public static function getSupportedFlowTypes(): array
    {
        return [];
    }

    public static function getSubscribedEvents(): array
    {
        return [];
    }

    public function requirements(): array
    {
        return [OrderAware::class];
    }

    public function handleFlow(StorableFlow $flow): void
    {
        $orderId = $flow->getData(OrderAware::ORDER_ID);

        if ($orderId === null) {
            return;
        }

        // Konfigurierbare Parameter aus dem Flow
        $config = $flow->getConfig();
        $webhookUrl = $config['webhookUrl'] ?? '';
        $message = $config['message'] ?? 'Neue Bestellung eingegangen!';

        if (empty($webhookUrl)) {
            return;
        }

        $this->sendSlackMessage($webhookUrl, $message, $orderId);
    }

    private function sendSlackMessage(string $webhookUrl, string $message, string $orderId): void
    {
        $payload = json_encode([
            'text' => sprintf('%s (Order ID: %s)', $message, $orderId),
        ]);

        $context = stream_context_create([
            'http' => [
                'method'  => 'POST',
                'header'  => 'Content-Type: application/json',
                'content' => $payload,
            ],
        ]);

        @file_get_contents($webhookUrl, false, $context);
    }
}

Service-Registration

<service id="MyPlugin\Core\Content\Flow\Action\SendSlackNotificationAction">
    <tag name="flow.action" key="action.send_slack_notification"/>
</service>

Konfigurationsfelder für die Admin-Oberfläche

Damit der Flow Builder ein Eingabeformular für die Action anzeigt, muss eine eigene Vue.js-Komponente im Administration-Bundle registriert werden. Es gibt keine automatische Erkennung der Konfigurationsfelder per PHP-Methode — die Oberfläche wird vollständig über eine Admin-Komponente gesteuert.

Hinweis: Die FlowAction-API wurde in Shopware 6.5 signifikant überarbeitet. Die hier gezeigten Interfaces und Methoden sollten immer gegen die Dokumentation der jeweiligen Zielversion geprüft werden.

Flow Builder per API konfigurieren

Flows lassen sich auch programmatisch über die Admin-API anlegen — nützlich für automatisiertes Deployment oder Tests:

curl -X POST \
  'https://shop.example.com/api/flow' \
  -H 'Authorization: Bearer TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Slack bei Bestellung",
    "eventName": "checkout.order.placed",
    "priority": 100,
    "active": true,
    "sequences": [
      {
        "id": "seq-action-1",
        "actionName": "action.send_slack_notification",
        "config": {
          "webhookUrl": "https://hooks.slack.com/services/...",
          "message": "Neue Bestellung!"
        },
        "position": 1,
        "trueCase": true
      }
    ]
  }'

Flows testen

Flows lassen sich im Shopware-Backend unter Einstellungen → Flow Builder testen. Für automatisierte Tests in PHPUnit:

<?php

declare(strict_types=1);

namespace MyPlugin\Tests\Core\Content\Flow;

use MyPlugin\Core\Content\Flow\Action\SendSlackNotificationAction;
use PHPUnit\Framework\TestCase;
use Shopware\Core\Content\Flow\Dispatching\StorableFlow;
use Shopware\Core\Framework\Event\OrderAware;

class SendSlackNotificationActionTest extends TestCase
{
    public function testHandleFlowWithoutOrderId(): void
    {
        $action = new SendSlackNotificationAction();

        $flow = $this->createMock(StorableFlow::class);
        $flow->method('getData')->with(OrderAware::ORDER_ID)->willReturn(null);

        // Kein Exception, keine Aktion bei fehlendem Order-ID
        $action->handleFlow($flow);
        $this->assertTrue(true); // Kein Fehler = Test bestanden
    }

    public function testActionName(): void
    {
        $this->assertSame(
            'action.send_slack_notification',
            SendSlackNotificationAction::getName(),
        );
    }
}

Verfügbare Trigger

Die wichtigsten Standard-Trigger in Shopware 6:

Trigger Beschreibung
checkout.order.placed Neue Bestellung eingegangen
state_enter.order.state.completed Bestellung abgeschlossen
state_enter.order_delivery.state.shipped Versand bestätigt
customer.written Kunde angelegt oder geändert
newsletter.confirm Newsletter-Anmeldung bestätigt
product.written Produkt geändert

Eigene Trigger (Events) lassen sich per Plugin registrieren und erscheinen dann ebenfalls im Flow Builder.

Wann Flow Builder, wann ein eigenes Plugin?

Der Flow Builder eignet sich für:

  • E-Mail-Benachrichtigungen bei Status-Änderungen
  • Automatisches Tagging von Kunden oder Bestellungen
  • Webhook-Aufrufe an externe Systeme
  • Dokumenten-Generierung

Wenn die Logik sehr komplex ist, Datenbankzugriff auf eigene Tabellen benötigt oder mehrere Schritte miteinander koordiniert werden müssen, ist ein direkter Event-Subscriber im Plugin die bessere Wahl. Der Flow Builder ist kein Ersatz für echte Programmierung, sondern eine Ergänzung für häufige, überschaubare Automatisierungen.

Thomas Wunner

Thomas Wunner

Fachinformatiker für Anwendungsentwicklung mit Ausbildereignungsprüfung und über 14 Jahre Erfahrung im Aufbau skalierbarer Webanwendungen mit Symfony und Shopware. Abseits der Tastatur ist Thomas als Rettungsschwimmer in der Wasserwacht aktiv, legt als DJ auf und erkundet die Umgebung auf dem Motorrad.

Kommentare

Kommentare werden von Remark42 bereitgestellt. Beim Laden werden Daten an unseren Kommentar-Server übertragen.