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.
Kommentare
Kommentare werden von Remark42 bereitgestellt. Beim Laden werden Daten an unseren Kommentar-Server übertragen.