You are currently viewing the article on an older Shopware version!
You can find the Flow Builder under Settings > Shop. It allows you to automate and easily customise your business processes without programming knowledge and enables you to take event-based actions to a whole new level. With the Flow Builder, you can specify event triggers even further with the help of rules. Depending on the event, you can, for example, automate the sending of emails and even have URL calls or changes to the order status carried out.
Under the menu item Settings > Shop > Flow Builder you will find an overview of all the business flows that have been created. In addition to whether a flow is active, the name and description of each flow are displayed, as well as the trigger that triggers the business process.
You can edit or delete the existing flows using the context menu on the right-hand side.
You can also edit it by simply clicking on the respective name.
You can create an entirely new flow by clicking on the Add Flow button in the top right-hand corner, and you will be taken directly to the configuration of this flow.
When you edit a flow or create a new one, the two tabs General and Flow are available.
In the General tab, you can define the general configurations for the flow.
Name (1): Enter the name here. This is used together with the description in the overview to distinguish this flow from others.
Description (2): Enter a meaningful description here. Since this description is visible in the overview, it will help you to quickly distinguish this flow from others.
Priority (3): If you have several flows that use the same trigger, you can specify which flow should be processed first.
Active (4): You can use this switch to activate or deactivate the flow.
In the Flow tab, you will find the actual Flow Builder. An intuitive but comprehensive editor with which you can specify which actions are triggered by a trigger. In addition, you have the option of defining conditions for these actions, under which the actions are to be executed.
After selecting a trigger, you can use the plus symbol to set one or more conditions and actions that will then be executed.
Every flow begins with a trigger. This specifies when the flow is executed. Select the trigger for which you would like to create a flow.
You can choose from the following triggers:
Event | Description | Actions |
---|---|---|
checkout.customer.before.login | Triggered as soon as a customer logs in | No action |
checkout.customer.login | Triggered as soon as a customer logs in | Add/remove tag |
checkout.customer.logout | Triggered when a customer logs out | Add/remove tag |
checkout.customer.deleted | Triggered if a customer gets deleted | Add/remove tag, send mail |
user.recovery.request | Triggered when a user creates a password recovery request at the Admin | Send mail |
checkout.customer.changed-payment-method | Triggered when a customer changes his payment method in the checkout process | Add/remove tag |
checkout.order.placed | Triggered when an order is placed | Add/remove tag, send mail, generate document, set order status |
checkout.order.payment_method.changed | Triggered when a user changes payment method during the checkout process | No action |
customer.recovery.request | Triggered when a customer recovers his password | Add/remove tag, send mail |
checkout.customer.double_opt_in_registration | Triggered when a customer commits to his registration via double opt-in | Add/remove tag, send mail |
customer.group.registration.accepted | Triggered when admin accepted a user who registered to join a customer group | Add/remove tag, send mail |
customer.group.registration.declined< | Triggered when admin declined a user who registered to join a customer group | Add/remove tag, send mail |
checkout.customer.register | Triggered when a new customer was registered | Add/remove tag, send mail |
checkout.customer.double_opt_in_guest_order | Triggered as soon as double opt-in is accepted in a guest order | Add/remove tag, send mail |
checkout.customer.guest_register | Triggered when a new guest customer was registered | Add/remove tag, send mail |
contact_form.send< | Triggered when a contact form is sent | Send mail |
mail.after.create.message | Triggered when a mail message/ content is created | No action |
mail.before.send | Triggered before a mail is send | No action |
mail.sent | Triggered when a mail is sent from Shopware | No action |
newsletter.confirm | Triggered when newsletter was confirmed by a user | Send mail |
newsletter.register | Triggered when user registered to subscribe to a sales channel newsletter | Send mail |
newsletter.unsubscribe | Triggered when user unsubscribes from a sales channel newsletter | Send mail |
newsletter.update | Deprecated in 6.5.0 | Send mail |
product_export.log | Triggered when product export is executed | No action |
state_enter.order_transaction.state.open | Triggered when an order payment enters status "Open" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.open | Triggered when an order payment leaves status "Open" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.paid | Triggered when an order payment enters the status "Paid" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.paid | Triggered when an order payment leaves status "Paid" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.refunded_partially | Triggered when an order payment enters the status "Refunded partially" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.refunded_partially | Triggered when an order payment leaves the status "Refund partially" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.chargeback | Triggered when an order payment enters the status "In progress" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.chargeback | Triggered when an order payment leaves status "Chargeback" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.paid_partially | Triggered when an order payment enters the status "Paid partially" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.paid_partially | Triggered when an order payment leaves status "Paid partially" | |
state_enter.order_transaction.state.failed | Triggered when an order payment enters the status "Failed" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.failed | Triggered when an order payment leaves status "Failed" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.reminded | Triggered when an order payment enters status "Reminded" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.reminded | Triggered when an order payment leaves status "Reminded" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.authorized | Triggered when an order payment enters the status "Authorized" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.authorized | Triggered when an order payment leaves the status "Authorized" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.cancelled | Triggered when an order payment enters the status "Cancelled" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.cancelled | Triggered when an order payment leaves status "Cancelled" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.refunded | Triggered when an order payment enters the status "Refunded" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.refunded | Triggered when an order payment leaves status "Refunded" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.in_progress | Triggered when an order payment enters the status "In progress" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.in_progress | Triggered when an order payment leaves status "In progress" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_delivery.state.returned_partially | Triggered when an order delivery enters the status "Return partially" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_delivery.state.returned_partially | Triggered when an order delivery leaves the status "Return partially" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_delivery.state.returned | Triggered when an order delivery enters the status "Returned" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_delivery.state.returned | Triggered when an order delivery leaves status "Returned" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_delivery.state.cancelled | Triggered when an order delivery enters the status "Cancelled" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_delivery.state.cancelled | Triggered when an order delivery leaves the status "Cancelled" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_delivery.state.open | Triggered when an order delivery enters status "Open" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_delivery.state.open | Triggered when an order delivery leaves the status "Open" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_delivery.state.shipped | Triggered when an order delivery enters the status "Shipped" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_delivery.state.shipped | Triggered when an order delivery leaves status "Shipped" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_delivery.state.shipped_partially | Triggered when an order delivery enters the status "Shipped partially" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_delivery.state.shipped_partially | Triggered when an order delivery status is changed from "Shipped partially" to another status | Add/remove tag, send mail, generate document, set order status |
state_enter.order.state.in_progress | Triggered when an order enters the status "In progress" | Add/remove tag, send mail, generate document, set order status |
state_leave.order.state.in_progress | Triggered when an order leaves the status "In progress" | Add/remove tag, send mail, generate document, set order status |
state_enter.order.state.completed | Triggered when an order enters the status "Completed" | Add/remove tag, send mail, generate document, set order status |
state_leave.order.state.completed | Triggered when an order leaves the status "Completed" | Add/remove tag, send mail, generate document, set order status |
state_enter.order.state.open | Triggered when an order enters the status "Open" | Add/remove tag, send mail, generate document, set order status |
state_leave.order.state.open | Triggered when an order leaves the status "Open" | Add/remove tag, send mail, generate document, set order status |
state_enter.order.state.cancelled | Triggered when an order enters the status "Cancelled" | Add/remove tag, send mail, generate document, set order status |
state_leave.order.state.cancelled | Triggered when an order leaves the status "Cancelled" | Add/remove tag, send mail, generate document, set order status |
state_enter.order_transaction.state.unconfirmed | Triggered when an order payment enters the status "Unconfirmed" | Add/remove tag, send mail, generate document, set order status |
state_leave.order_transaction.state.unconfirmed | Triggered when an order payment leaves the status "Unconfirmed" | Add/remove tag, send mail, generate document, set order status |
**Notice: Stop flow action: Available for all events. |
Conditions are used to refine the flow. For this purpose, the rules from the Rule Builder are used, or new rules are created directly for it. These rules can then be used to determine whether and which action is executed. For more extensive flows, several conditions can be queried one after the other.
Each condition has two possible outcomes. True or False. For each result, you can define additional conditions or actions that are then to be processed.
The action is executed as soon as the trigger has been triggered and all preceding conditions have been fulfilled or not.
Depending on the trigger, not all actions may be available. For example, a tag can only be added if the trigger involves an entity to which a tag can be attached by default.
The following actions can be selected depending on the trigger:
Add Tag / Remove Tag:
Here you can select an entity that is affected by the trigger and add or remove a tag to it.
Change customer group:
With this action, you can change the customer group. In the configuration dropdown, you can easily select the customer group.
Change customer status:
This action allows you to change the status of the customer from active to inactive and reversed.
Generate a document:
This action creates a new document in the current order. In the dropdown menu, you can define which document type should be created by this action.
Send mail:
With this action, you can have emails sent automatically. In the configuration, first, select a recipient. In addition to the administrator and the customer, this can also be one or more defined email addresses. Next, you select an email template that is to be sent and specify whether and which documents you want to add to the email.
Set status:
This action allows you to change the payment status, shipping status and order status of the order affected by the trigger.
Some statuses are interdependent and can only be selected if the order already has a certain status.
For example, the payment status Refunded, Partially Refunded or Chargeback can only be assigned when the order has previously had the payment status Paid or Partially Paid. Other dependencies are listed here.
Change custom field content:
With this action, you can change the content of a custom field. You have the option to select the entity customer or order.
Add affiliate and campaign code:
With this action, you can add an affiliate and/or campaign to the customer or order. The option override can be set if you want to override existing codes.
Stop flow
You can include this action in the Flow Builder at any point where nothing else should happen. For example, this can be the case if an action is only to be executed if the condition is true. If the condition is false, you then set the action Stop flow.
In this example, new customers are to receive a tag indicating which country they come from.
For this purpose, the trigger Checkout / Customer / Register is selected because it is triggered as soon as a customer registers. Then it is gradually checked whether the customer comes from the USA, Austria or Switzerland, and, if necessary, a corresponding tag is added to the customer.
No tag is assigned if the customer does not come from one of these countries.
In this example, the invoice is to be sent automatically with the confirmation mail. To do this, you use the trigger Checkout / Order / Placed. This trigger is activated as soon as an order is placed in your shop.
First, you must create the document that is to be sent automatically. In this example, you first select generate document as the action and then select invoice as the document type.
This document will be attached to the automatic notification in the next step. Below the action generate document, add another action send email and select default as the recipient so that the customer receives the email. For the email template, select order confirmation to send an order confirmation and select the desired document to be attached to the email.
In this example, you send a mail to the warehouse as soon as an order has been paid for so the warehouse can dispatch the goods. The first step is to select State enter / Order transaction / State / Paid as the trigger state. This trigger is triggered as soon as the payment status changes to paid.
Next, you decide whether the warehouse should also receive the customer's invoice and/or delivery note. In this case, you first select create document as the action and select the corresponding document. In our example, you send an invoice and therefore select invoice. As a subsequent action, you select Send email so that an email will be sent to the warehouse.
In the Send email action configuration, select custom recipient as the recipient. This allows you to specify an individual email address to which the email will be sent. Then enter the email address of the warehouse or the responsible employee. You can select any template as the email template or create one yourself for this standard email. In our example, we send the default template for Enter payment state: Paid. Finally, you select which document is to be sent. In our example, the invoice is sent along. However, you can also select several documents (e.g. invoice and delivery note) to be sent along.
Please note that it is essential that the documents that are to be sent along were automatically generated in the previous step.
In this example, we will show you how to send notifications to an external platform such as Slack using Flowbuilder. For this example, you need the extension Flow Builder Professional for Shopware 6, which includes the action Webhook.
Slack:
To do this, first, create a new workflow in Slack. You can find all information about the workflows in Slack and how to find the Workflow Builder here.
In the Workflow Builder, you first create a new workflow. Every workflow needs a trigger and at least one action, which is called a step in Slack. You select webhook as the trigger, as we will use this in the Shopware Flow Builder.
URL of the web request (1): The target address needed for the webhook in Shopware Flowbuilder is displayed here. You should always save this address. This address is not yet displayed when you call up the trigger for the first time. It will only be displayed once you have completed and published the workflow.
Variables (2): It doesn't matter how you name the variables. In this example, however, we use the following:
HTTP sample text (3): We will need this sample text later in Shopware Flowbuilder to transfer the variables with the webhook. You should therefore also save this text.
Next, you add a step to the workflow that should be executed as soon as the trigger takes effect. In our example, we choose the send message step to send a user or Slack group a message with the new order.
Send this message to (1): Select the users or the Slack group to which the message should be sent.
Message text (2): Here you can design the message text. Click on Insert a variable at the bottom right to add your previously created variants. In our example, we insert a heading and have the content of the variables displayed, which we will later fill with the order content in Shopware Flowbuilder.
In Shopware Flow Builder
In the Shopware Flow Builder, you can either edit the existing flow for incoming orders or create a new one and select Checkout / Order / Placed as the trigger. If, for example, you only want to create the Slack message for orders that have already been paid for, you can also select State Enter / Order Transaction / State / Paid as the trigger.
If you do not want to specify any further conditions for creating a Slack message, select Call URL (Webhook) as the action.
Method (1): Choose the POST method here, as we want to transmit information to Slack.
URL (2): Enter the target URL here. This was created in the Slack configuration under the item URL of the web request.
Parameters (3): Since Slack expects the parameters in the body, you can still leave the parameters empty here.
In the Body tab, select the BodyType: Raw and copy the HTTP example from Slack into the code.
{
"orderURL": "Sample text",
"orderPositions": "Sample text",
"orderNumber": "Sample text",
"orderCustomerAdress": "Sample text"
}
You now replace the content of the variables with Shopware variables that you also know from the email templates. For our example, the code would look like this:
{
"orderURL": "http://doku1.test.shopware.in/admin#/sw/order/detail/{{ order.id }}",
"orderPositions": "
{% for lineItem in order.LineItems %}
{{ lineItem.payload.productNumber }} - {{ lineItem.label }}
{% endfor %}",
"orderNumber": "{{ order.orderNumber }}",
"orderCustomerAdress": "{% set billingAddress = order.addresses.get(order.billingAddressId) %}
{{ billingAddress.company }}
{{ billingAddress.firstName }} {{ billingAddress.lastName }}
{{ billingAddress.street }}
{{ billingAddress.zipcode }} {{ billingAddress.city }}
{{ billingAddress.country.translated.name }}"
}
After saving this configuration, the workflow should be correctly integrated. As soon as an order is received in your shop, a corresponding message is automatically generated in Slack.
This extension is available to you from the Evolve Plan onwards. It extends the Flow Builder with additional helpful functions.
With this action, you can have a web URL called automatically and pass parameters as soon as the trigger is fired. A WebHook makes it possible, for example, to tell a server software that a particular event, such as a new order, has occurred. This can be a notification or a request to the server to do something with the information.
General
Method (1): Generally, we support five different methods of a webhook.
URL (2): The URL specifies the destination to which the webhook should be sent.
Description (3): In the description, you can note this webhook's purpose to classify it correctly later.
Parameters (4): Depending on the goal and task of the webhook, it may be necessary to include parameters from the store system. You can do this via the parameters. To do this, enter a parameter name on the left side and select the parameter on the right side that will be transmitted to the target via this parameter name.
URL-Preview (5): Here, you can see a URL preview, including the specified parameters transmitted to the target.
Header-Parameters
Some servers that accept webhooks expect special header parameters. These can be stored here.
Body
Some servers that accept webhooks expect a special body. This can either be in the form of parameters that are passed in, like the header, or as code. Slack, for example, uses this to pass parameters. How the code should look is usually specified by the target server to which the webhook is sent. The Shopware variables can be accessed in the code.
Basic Auth
If the destination requires authentication, this can be activated here and the necessary access data stored.