Marketing & Automation
Automate recurring tasks based on rules: review and follow-up emails, coupons, status updates with invoices, product tags, and free items in the shopping cart. And the most common question: Why haven’t I received an email about the event?
At a Glance
- Where: under CMS → Emails & Marketing / Automations, “Marketing Events / Automations” tab. XONIC Premium: Marketing / Automatisierungen & Künstliche Intelligenz
- Principle: An event has a type, conditions, and actions. Each time the event runs, the store executes the actions for all targets that meet the conditions.
- Frequency: “One-time” processes each goal exactly once; “Recurring” processes it again after the “blacklist period.”
- When: A cron job processes the events. Cart events run immediately when a visitor modifies their cart.
- Safe Start: Templates and imported events start in an inactive state. The simulation lists the goals as a CSV file without executing anything.
- Promotional emails: Send only to newsletter subscribers and include
{link_unsub}in the template. Starting with XONIC 4.10, the store automatically adds the unsubscribe link. from 4.10
In this guide
How Marketing Automation Works
An event is a rule: The conditions determine the goals, and the actions define what happens with each goal. Depending on the type, goals can be customers, orders, tickets, products, or categories.
The Event Principle
Every automated process follows the pattern: Condition → Response:
Conditions
Who or what is affected?
Link
All or any of the conditions
Reactions
What happens to each target?
| Field | Meaning |
|---|---|
| Type | What the event refers to: customers, orders, tickets, products, categories, or shopping cart. The type determines which conditions and reactions are available. |
| Trigger the event if | “all conditions are met” (AND) or “any of the conditions are met” (OR). The overview displays this as “ALL” or “ANY.” |
| Execution | “One-time”: Each target is processed exactly once. “Recurring”: The same target is processed again as soon as the blacklist period has expired and the conditions still apply. |
| Blacklist Period | Blocking period after a single execution, ranging from 1 minute to 12 months. It applies only to “recurring” tasks. |
| Status | Only active events run. Each condition and each reaction also has its own status toggle. |
| Log (History) | List of processed targets for each event. This also serves as the block list for “one-time” events and the blacklist period. |
Prerequisites
- The add-on module must be activated. Without the module, the “Marketing Events / Automations” tab will redirect you to the module’s product page.
- You create the email templates for your events in the “Emails” tab on the same page.
- A cron job triggers the processing; see Cron Job.
- For the AI features, the store requires an AI provider; see AI Features.
The overview shows the status, type, execution, link, and blacklist period for each event, along with the sequence of conditions and reactions below. Click to enlarge.
The overview shows the type, execution, link, and blacklist period for each event. Below each event, conditions and reactions are listed as a workflow. You can filter by event status, event type, and event name.
The Six Event Types
First, select the type. It determines what a target is and which conditions and reactions are available.
Customers
The target is a customer account: registration, birthday, sales, last order, customer group, newsletter subscription, or a shopping cart that has remained unchanged for days.
Typical examples: welcome and birthday emails, customer re-engagement, customer group upgrade, shopping cart reminder.
Orders
The goal is an order: status, payment method, age, items included, review, origin. Emails are sent to the email address associated with the order, including those from guest customers.
Typical examples: Review reminders, follow-up emails, status updates with invoices, redeeming coupons.
Tickets
The goal is a ticket: status, last update, assigned to. Here, you inform customers via “Ticket System: Update” using “Email Notification,” not via “Send Email.”
Typical examples: reporting unresolved tickets, automatically closing tickets, assigning responsibility via AI. See the Tickets & Tasks guide for more details.
Products
The focus is on a product: inventory, status, sales figures, manufacturer, categories, Google labels, attributes.
Typical examples: deactivate sold-out items, assign categories, set labels for campaigns, receive stock alerts.
Categories
The goal is a category. Set a status or a database field, on a specific date if desired.
Typical tasks: Enable and disable seasonal categories.
Shopping Cart
Does not run as a cron job, but immediately when a visitor changes their shopping cart, even as a guest. Checks conditions based on content and order value.
Typical use: Automatically adding and removing free items. For reminders about abandoned shopping carts, use a customer event with “Customer: Shopping cart unchanged since.”
Get Started with a Template
Over 50 ready-made workflows are available in the template library. This is the fastest and most reliable way to set up your first event.
Template Library
Click the “Template Library” button in the overview: Search for templates, filter by customers, orders, products, categories, tickets, or shopping cart, and create the event by clicking “Apply.” The new event is inactive and opens immediately in the editor.
Templates with email include a draft email in German and English. Some create multiple linked events at once. You can then customize the order status, items, manufacturers, categories, and email text.
Export and Import
“Export (JSON)” in an event’s row menu exports its settings as text, which you can copy or download. “Import Event” uses this data to create an event in another store, which is also inactive. Afterward, check the email template, order status, products, and customer groups: These values differ from store to store.
Copy
“Copy” in the row menu creates a copy with the same name and status. A copy of an active event is active immediately and has an empty log: It processes all recipients again, including customers who have already received the email. Therefore, set the copy to inactive right away and rename it.
The template library after searching for “Coupon”: Each card shows conditions and actions; “incl. email” and “2 events” indicate templates with an email draft or multiple events, respectively. Click to enlarge.
Your first event: Review reminder
This example reminds customers to leave a review one week after the order was shipped, but only for orders without a review. The template “Review Reminder for Orders Without a Review” already includes most of what you need.
Create an Event
Open CMS → Emails & Marketing / Automations and the “Marketing Events / Automations” tab. Select the template from the template library, or click the “Create New Event” tab.
Enter Basic Information
| Event Name | Review reminder after sending (per language) |
| Status | Temporarily disabled |
| Type | Orders. Select the type before adding conditions: The selection of conditions depends on this. |
| Execution | One-time (each order exactly once) |
| Trigger the event if | all conditions are met |
| Blacklist period | Does not apply for “one-time” |
Add conditions
Use “Add New Condition” to create a field for each condition and select the condition type:
"Order: Order Statuses"
Select your shipping status, for example, “Shipped.”
“Order: Last Update”
Time period “1 week”: The order has remained unchanged for at least one week.
“Order: Order Receipt Date”
“Day” = the day you start the event, comparison “>= (greater than or equal to)”. This ensures the event captures only new orders.
“Order: Product review submitted”
“Has NOT submitted a product review” and consent filter “only with review email consent (order or customer account).”
Add a reaction
Select the reaction type “Send Email” using “Add New Reaction,” set “Recipient” to “Customer,” and under “Email,” select your template, such as “Review Reminder.” You create the template beforehand in the “Emails” tab; the library template includes a draft.
Test and Activate
Set the reaction to “Inactive” in the “Status” field, set the event itself to “Active,” and save. Run “Process Events (Simulation)” and check the list of orders (see Simulation). If everything looks correct, activate the reaction.
The review reminder in the editor: on the left are the four conditions; on the right is the “Send Email” reaction with the recipient “Customer” and the “Review Reminder” template. Click to enlarge.
Conditions
About 80 conditions narrow down the targets. Which ones are available depends on the type. Here’s an overview of the most important ones, with the names from the drop-down list.
Customers
| “Customer: Registration Period (Anniversary)” | Registration occurred more or less than a certain period ago |
| “Customer: Birthday” | Any birthday or only milestone birthdays |
| “Customer is a newsletter subscriber (EU data protection consent for advertising)” | Confirmed subscription, no newsletter block, account not blocked or inactive |
| “Customer: Customer Group,” “… (multiple selections)” | One or more customer groups |
| “Customer: Has no orders during the period” | Re-engage |
| “Customer: Date of first order,” “… of last order” | First-time buyers, regular customers |
| “Customer: Revenue,” “Customer: Number of Orders,” “Customer: Bonus Points Balance” | Threshold values, e.g., for a VIP group |
| “Customer: Purchased a specific product” or “… viewed,” “Customer: Purchased products from a manufacturer” or “… viewed” | Interest in items or brands |
| “Customer: Shopping cart unchanged since” | Abandoned shopping carts, customer accounts only |
| “Customer: database field from ‘customers’” or “… ‘address_book’” | Any field with a comparison, e.g., exclude guest accounts |
Orders
| "Order: Order statuses" | Current status |
| “Order: Order History—Order Statuses” | Has been in a status before (or never) |
| “Order: Payment Methods,” “Order: Customer Group” | Payment method, customer group for the order |
| “Order: Last Update” | Has remained unchanged for at least a certain period of time |
| “Order: Order Receipt Date” | Before or after a specific date |
| “Order: contains a specific product,” “… contains item number ‘Sample,’” “… products from specific categories” | Order contents |
| “Order: Product review submitted” | with or without a rating, with consent filter |
| “Order: Source (store/marketplace)” | Only store orders or a marketplace |
| “Order: Product Attribute Date (Interval)” | Course, camp, or event date from a characteristic |
| “Order: Outstanding Invoice Amount,” “… Payment Due Date Exceeded” | Payment reminder and collection notice from 4.9.13 |
| “Order: Database field from ‘orders’” | Any field with a comparison |
Products
- “Products: Status,” “… Free Product Status,” “… Bonus Product Status,” “… Free Shipping Status”
- “Products: New Arrivals/Top Picks,” “… Featured,” “… Special Offer (Special Price)”
- "Products: Inventory" (Quantity, Comparison, Warehouse), "... Units Sold", "... Purchase Price (PP)"
- “Products: In Categories,” “… Manufacturer,” “… Has Manufacturer (Any),” “… Suppliers”
- “Products: Traffic Light Profiles” (Delivery Time), “… Google Label”
- “Products: Specific Product,” “… Attribute/Attribute Value,” “… Item Type (Master/Slave/Individual Item)”
- “Products: Database field from 'products'”
Shopping Cart
- “Shopping Cart: Contains a specific product” and, directly below it, the corresponding option “Does not contain”
- “Shopping Cart: Contains a product from a product family (Master/Variants)” or “No product …”
- “Shopping Cart: Manufacturer-Specific Cart Value”
For product families, any item from the family—whether a master or a variant—is sufficient.
Additional
- Tickets: “Ticket System: Statuses,” “Ticket System: Last Modification,” “Ticket: Responsibility” from 4.9.24
- Categories: “Categories: Specific Categories”
- All types: “Date: Day/Time,” “Date: Day of the Week”
- Chaining: the conditions “Marketing: …”, see Chaining Events
This is what matters
- No event runs without a condition. The shop will then report that the event was not executed.
- Order: When set to “all conditions are met,” the store checks the conditions from top to bottom and stops as soon as no target remains. Drag the condition with the fewest matches up by its handle; this reduces the load on large stores.
- Date conditions (“Date: Day/Time,” “Date: Day of the Week”) apply to all customers, orders, or items at the appropriate time. Always link them to “All conditions are met” and at least one other condition.
- “At least this long ago”: “Last update” and “Order receipt time (interval)” have no upper time limit. For new orders, additionally set “Order: Order receipt time” with a fixed date.
- Manufacturer: “Products: Manufacturer” applies only to the selected brands; new brands are not automatically added. For all items with a brand, use “Products: Has Manufacturer (Any).”
- Inventory: The three inventory conditions for orders only appear under Settings → Checkout → Inventory → “Advanced Inventory Management.”
- Database Field: Select a field, specify a comparison operator (=, !=, >, <, LIKE …), and enter a value. Example: The field `
purchased_without_account= 0` excludes guest accounts.
Actions
Actions run for each target in the order listed. Change the order using the dropdown menu, for example, “Create Coupon” before “Send Email.”
| Type | Reactions |
|---|---|
| All Types | "Create Coupon," "Set Coupon Status," "Send Email," "Send Slack Message via Webhook," "Send Webhook (Generic / n8n / Zapier)" |
| Customers | “Customer Group: Change,” “Customer: Set ZIP Code as Password,” “Generate Random Password,” “Delete Customers,” “Customers: Set Database Field ('customers')” |
| Orders | “Order: Update Status,” “Orders: Set Database Field (‘orders’),” “Order: Add Product,” “Order: Recalculate Totals,” “Order: Assign Partner,” “Order: Redeem/Create/Send a Coupon” |
| Orders with Integration | PostAT return labels, VCA marking, OpenTrans storage (xoPort add-on module), and data transfer to DFShop will only appear once the integration has been set up. |
| Direct Debit | “Order: Collect Direct Debit” initiates a SEPA direct debit, intended as a retry after a failed attempt . It appears only if Settings → Contracts → “Direct Debit via Payment Mandates On/Off” is enabled . from 4.9.17 |
| Products | “Products: Status,” “… Free Product Status,” “… Bonus Product Status,” “… Free Shipping Status,” “… Google Label,” “… Category Assignment,” “… Remove Category Assignment,” “… Set Database Field (‘products’)”, “… Set Custom Field”, “… Set Marketplace Field (Mirakl/Decathlon)” |
| Categories | “Categories: Status,” “Categories: Set Database Field ('categories')” |
| Shopping Cart | “Shopping Cart: Add Free Product Automatically” or “… Remove” |
| Tickets | “Ticket System: Update” (status, agent, ticket template, email notification, internal comment), “Assign AI Agent” from 4.9.24 |
Send Email
- “Recipient”: “Customer,” “Assigned Manager/Representative,” “Store Owner,” or “General Email Address” (addresses in the field of the same name, separated by commas). “Recipient (CC)” sends the email to additional addresses.
- “Email”: a template from the “Emails” tab. Each recipient receives a separate email in their own language.
- “Attachment”: one fixed file per language from the “Files” folder in the file manager, such as care instructions as a PDF. Order receipts cannot be sent this way; use “Order: Status Update” for that.
- Product events: Recipient “Shop owner” or “free email address.” One email is sent per item; the placeholder
{admin_product_link}links to the item. - Ticket and Category Events: Here, “Send Email,” the Slack message, and the webhook do not correctly assign recipients and data. Notify customers about a ticket using “Ticket System: Update” and “Email Notification”; for category events, do not use these three actions for now.
Create a Coupon
- Fields: “Coupon Type” (fixed value, percentage, free shipping), “Coupon Value,” “Amount Type” (gross or net amount), “Minimum Order Value,” “Manufacturer Restriction,” “Coupon (Valid From),” and “Coupon (Valid To)” or “Coupon (Valid To: Automatic)” ranging from 1 day to 1 year.
- Each destination receives its own code. It can be redeemed once and is not tied to a specific customer.
- You can include the code in the email using “
{marketing_created_coupon_code}.” This only works if “Create Coupon” is selected before “Send Email.” - “Set Coupon Status,” on the other hand, enables or disables a specific coupon using its “Coupon Code.” Coupons in detail: Guide to Gift Certificates & Coupons.
Order: Status Update and Receipts via Email
“Order: Status Update” sets a new “Order Status” or, with “Keep Status,” retains the previous one. With “Notify Customer,” the status email is sent to the customer; the text and attachments come from the selected “Email Text Block Template.” The order’s status history will then show “XONIC Premium: Marketing Event” along with the event number.
Select Documents in the Text Module
Open an order, go to the “Edit” tab, select the “Order Status” sub-tab, and click “Text Blocks.” In the “Edit Text Blocks” window, open the block by selecting “Edit” from the row’s menu. There, select what will be attached:
- Order confirmation, invoice, QR invoice (with stored QR-IBAN), invoice correction, quote
- Electronic invoice as XRechnung or ZUGFeRD
- Donation receipt, Terms and Conditions, Right of Withdrawal, Privacy Policy
The available options depend on the document types enabled in the store.
Good to know
- If an invoice is included, the email will also be sent to the addresses stored under “Email Address (Invoice)” for the customer. from 4.9.17
- A status change triggers the same actions in the payment integration as a manual change; for example, a refund is initiated when the status changes to “Canceled,” such as with Amazon Pay. from 4.9.17
- For orders from Billbee, no customer email is sent as long as “Send Customer Update Emails” is turned off under Tools → Billbee (Sync).
In the text module, you specify which documents the status email includes—in this case, the invoice and the ZUGFeRD invoice. Click to enlarge.
The guide “Editing Orders” explains how to change the status manually.
Products and Google Labels
“Products: Google Label” sets or clears one of the five label values for the product feed. You create labels under Tools → Google Merchant Center; see Custom Labels.
The action now writes only to the five label fields. If an old event therefore fails to run and reports an unknown additional field: Open the event, select the label again, and save. If it’s missing from the selection, resave the label’s approval in Google Merchant Center. from 4.9.123
Free Item in Cart
“Shopping Cart: Add Free Product Automatically” adds an item to the shopping cart for free; a second event with “… Remove” removes it again when the condition no longer applies. The templates “Free Product Based on Cart Value (with Auto-Removal)” and “Free Product When Item Is in Cart (with Auto-Removal)” both create these events.
If the customer removes the free item themselves, the store will not add it back. Free items and bonus points: Bonus Points & Free Products Guide.
Customers and Data Fields
- “Generate Random Password” and “Customer: Set ZIP Code as Password” do not send anything on their own. A subsequent “Send Email” action with a placeholder sends the value to the customer.
- “Delete Customers” requires “Confirm Deletion” and deletes only customers without orders; the store skips the rest. Once deleted, they are permanently deleted.
- “... Set Database Field” writes a fixed value into a field. The selection does not include passwords, bank details, payment information, or order status; you can change the status using “Order: Status Update.”
“Send Webhook (generic / n8n / Zapier)” sends customer or order data as JSON to an address of your choice, optionally including the subject and text from an email template. “Signature Secret (optional)” adds the signature to the header X-Webhook-Signature. “Send Slack Message via Webhook” posts an email template to a Slack channel and mentions colleagues if desired.
Chaining Events
You can build multi-step workflows from multiple events. The second event uses a “Marketing: …” condition to check what the first event has already done.
| Condition | True if … |
|---|---|
| “Marketing: Goal in Another Event” | the target occurred in the selected event (“=”), or did not occur (“!=”), optionally within a “time period”: “greater than” = within the time period, “less than” = longer ago |
| “Marketing: No Order Since Occurrence in Event” | the target appeared in the event at least the “waiting period” ago and the customer has not placed an order since then (account and email address; cancellations do not count) |
| “Marketing: Order since occurring in event” | The opposite: The customer has placed an order since then, for example, in response to a thank-you email instead of a coupon |
| “Marketing: Number of Occurrences in Event” | The number of log entries determines escalation levels. Each interaction counts separately: a coupon and an email are two separate entries |
| “Marketing: Unredeemed coupon from event is about to expire” | A coupon generated by the event is still active and will expire in a few days |
Example: Follow-up Series
The template “Follow-up Series: Follow-up Email, Then Coupon if No Subsequent Order” creates two events: an email one week after the order and, another week later, a coupon—but only if the customer hasn’t placed an order since then. The template automatically establishes this link.
Important Note
- Only active events of the same type are available for selection. Activate the first event before linking the second one.
- Set a delay. If you select “immediately,” the second stage can trigger in the same run as the first.
- Do not delete or clear the log for the first event: The second stage reads this exact log.
Marketing Emails, Unsubscribe Links, and Exclusions
Many event emails are promotional. Here’s what the store does about it. The Newsletter Guide explains the legal requirements.
Unsubscribe Link and Recipients
- Insert
{link_unsub}into the email template. Subscribers will see their personal unsubscribe link there; for customers without a confirmed subscription, the field remains blank. - With the condition “Customer is a newsletter recipient (EU data protection consent for advertising),” a customer event reaches only subscribers. Customers who have opted out of newsletters, as well as blocked and inactive accounts, are excluded.
- This condition is not applied to order events. A follow-up email with a coupon will reach buyers without a subscription in these cases.
Exclude individual customers and guests
- Ifa customer no longer wants to receive emails: go to Customers → Customers, edit the customer’s profile, and enable “Newsletter Block (Shop).” To ensure the event excludes them, use the condition “Customer is a newsletter recipient…” or “Customer: Database field from ‘customers’” with `
customers_nl_lock` = 0. - Starting with XONIC 4.10, the newsletter block alone is sufficient: Promotional event emails will no longer be sent to this customer. from 4.10
- Forcustomers without a customer account: “Order: Database field from ‘orders’” or “Customer: Database field from ‘customers’” with the field
purchased_without_account= 0 excludes guest orders.
Automatically include unsubscribe link from 4.10
Under Settings → Interfaces → Email Marketing / CRM → Email Options → “Marketing Emails: Automatically Include Unsubscribe Link” (enabled by default), the store adds an unsubscribe link to the bottom of the email and places the unsubscribe button in the email client. This applies to the “Customer” recipient in customer, shopping cart, and order events. If {link_unsub} is already included in the template, no second link is added.
For each “Send Email” reaction, select one of the following in the “Automatic Unsubscribe Link” field: “Default (toggle in Email Options),” “Always Include,” or “Never Include (pure service email).”
No Advertising After Unsubscription from 4.10
- If a customer has unsubscribed from the newsletter or has the newsletter block enabled, emails set to “Standard” or “Always include” will no longer be sent to them, even if the toggle is turned off. Copies will still be sent, and the log will note “send_mail (suppressed: …)”.
- Set service emails, such as payment reminders, to “Never attach (pure service email)”; otherwise, they will not be sent to these customers.
- Emails containing new login credentials from “Generate Random Password” or “Customer: Set ZIP Code as Password” are always sent.
- Blocking or deactivating an account does not count as unsubscribing. If you want a blocked customer to stop receiving promotional emails, you must also enable the newsletter block.
Simulation and Testing
The simulation shows which targets an event would currently process. It does not trigger any actions and does not write anything to the log.
How to Simulate
- In the overview, click the arrow next to “Process Events” and select “Process Events (Simulation).” Do not click “Process Events” itself, as that will execute the events.
- For each active event with matches, a message appears with the “Download file” link.
- The CSV file contains the targets in the “
target_id” column: customer numbers, order numbers, and item, ticket, or category IDs. - Check a few samples, then enable the responses.
Please note
- The simulation only captures active events; it does not capture shopping cart events at all. For a safe test, enable the event and set each reaction to “inactive” in the “Status” field.
- “Process Events” without any additional parameters is not a simulation: It executes all active events immediately.
- The file lists all matches. A maximum of 200 targets are processed per event and run; for reactions based solely on fields, status, categories, labels, and customer groups, up to 50,000 are processed. The next run handles the rest; the report then lists both numbers.
After the simulation, a link to the target list is available for each event with hits; it can be opened from the menu next to “Process Events.” Click to enlarge.
Log and Block List
Each event maintains a log. It documents which targets were processed and when, and prevents duplicate processing.
Log (History)
- Open the “Log (History)” from the event’s context menu. Each row lists the “Target ID,” reaction, and time; the search finds a Target ID.
- A row is created for each reaction executed; for “Send Email,” a row is created for each recipient. No rows are created for free items in the shopping cart or for “Order: Redeem/Create/Send Voucher”; in those cases, the store redeems each voucher only once anyway.
- With “one-time,” a target from the log is never processed again; with “recurring,” it is processed again only after the blacklist period has ended.
- Traces elsewhere: Orders show “XONIC Premium: Marketing Event” in their status history; items and categories display “XONIC Premium: Marketing Event” with a number in their “Log (History)” under Products → Categories / Products.
Clear and Clean Up the Log
- “Clear Log” deletes the entire log for this event. A one-time event will then process all targets again and, for example, resend messages to every customer.
- Only the main administrator can delete individual rows. To specifically release a target, delete all rows with that target ID.
- “Clean Up Expired Entries” removes outdated entries from recurring product and category events across all events. This happens automatically once a day; the retention period can be configured under Settings → Interfaces → Email Marketing / CRM → Email Options → “Marketing Log: Retention of Product/Category Entries (Days)” (default 30, 0 = off).
- The store never automatically cleans up customer, shopping cart, order, and ticket entries, nor does it clean up the log of one-time events.
The log contains one line per goal and response, including the timestamp; this allows the event to identify which goals it has already processed. Click to enlarge.
Didn’t receive an email from the event?
Check these points in order. The messages under “Process Events” will help you with this.
- Active? The event and the “Send Email” action are set to active.
- Is the cron job running? Nothing happens without a cron job, except for shopping cart events. To test, manually start “Process Events.”
- Already processed? Search the “Log (History)” for the customer or order number. If it’s there, the target is marked as completed for “one-time” events; for “recurring” events, it’s blocked until the end of the blacklist period.
- Do the conditions apply? The simulation will show you. The message “… however, no targets currently meet the event’s conditions” means: no matches.
- Everything filled out? If the template or recipient is missing, the event will abort with a message. An incorrect response also stops subsequent responses.
- Sending emails? If Settings → Interfaces → Email Marketing / CRM → Email Options → “Send Emails” is set to off, the store won’t send anything but will still log the goal. After enabling the feature, the main administrator approves the goal by deleting its entries from the log.
- Appropriate recipient? For product events, if there is no customer, use “Shop Operator” or “Free Email Address.” For ticket and category events, use “Ticket System: Update” instead of “Send Email.”
- Limit reached? A maximum of 200 recipients are sent per run; the rest will follow in subsequent runs.
- Billbee orders: “Order: Status Update” notifies the customer only after “Send Customer Update Emails” is enabled under Tools → Billbee (Sync).
- Unsubscribed? Starting October 4, a customer who has unsubscribed from the newsletter will no longer receive promotional event emails; the log shows “suppressed.” from 4.10
Cron job for automatic execution
A cron job triggers the processing at regular intervals. Each time it runs, it processes all active customer, order, ticket, product, and category events.
Setup
Add this call to your server’s task scheduler, set to run every 15 minutes:
If you do not have access to Task Scheduler, please contact our support team. For testing purposes, the “Process Events (Cron Job)” option in the Actions menu performs the same run and displays the result as text.
How often an event takes effect
This is not determined by the cron job, but rather by “Execution,” “Blacklist Period,” and, if applicable, a date condition. Here’s how the templates are set by default:
| Use Case | Execution | Blacklist Period |
|---|---|---|
| Review Reminder, Welcome Email | One-time | – |
| Birthday greeting, bonus points reminder | recurring | 30 days |
| Stock alert, shopping cart reminder | recurring | 1 week |
| Product tags, toggle categories | recurring | 1 day |
Protection mechanisms
- Block: If a process is still running, the store skips the next call. No event runs twice.
- Limit: A maximum of 200 targets per event and run for emails, coupons, status changes, and webhooks.
- Blocklist: The log records processed targets; see Log and Blocklist.
- Shopping cart events do not require a cron job; they run whenever the shopping cart is modified.
AI Functions
The AI creates events based on your description, checks existing ones, and assigns tickets. It does not replace the need to review the results.
Prerequisites
The AI features are part of the add-on module. To use them, the store must have at least one AI provider configured under Settings → Interfaces → Artificial Intelligence: enable the status for “Claude (Anthropic),” “OpenAI (ChatGPT),” “xAI,” or “Perplexity,” set the status to “On” (e.g., “OpenAI API: Status On/Off”) and enter the key (“OpenAI API: Key”). Without activation in the module, entered keys have no effect, but costs from the provider will still be incurred. XONIC Premium: Marketing / Automatisierungen & Künstliche Intelligenz
If multiple providers are active, select the provider using the corresponding button. Your description and the event settings—including order status names, customer groups, and payment methods—are sent to the provider.
AI: Create Event
Describe in your own words what should happen, for example: “Send a review reminder 7 days after shipment. If the customer hasn’t left a review after another 14 days, send a 5% coupon.” The AI suggests events with conditions, actions, and email templates; for multi-step processes, it suggests linked events.
“Create Event” sets up events and email templates with the status from the suggestion—usually “active.” Review each new event immediately and keep it disabled until you’ve simulated it. If a request can’t be implemented, the AI will identify the missing feature; click “Send Feature Request to XONIC” to submit it to us.
AI: Consolidate and Review Events
“AI: Consolidate Events” searches all active events for overlaps and suggests merges. “Apply” creates the new events and deactivates the ones they replace.
“AI: Review Event” in the editor checks the open event against all active events for inconsistencies or chains that trigger one another.
AI Agent for Tickets from 4.9.24
The “Assign AI Agent” reaction in ticket events queues up tickets that the AI should assign to a handler (task “Assign Tickets to Handlers”). Typically used with “Ticket: Responsibility” = No and “Ticket System: Statuses” = Open. Select the provider and model for each event.
- “Operating Mode”: “Suggest (internal note only)” is the default and does not change anything; “Apply (change is executed)” assigns the tickets.
- A dedicated cron job processes these assignments; please contact us for setup.
- If set to “recurring,” the blacklist period must be at least 1 hour; otherwise, the event cannot be saved.
- The subject and the first customer message from the tickets are sent to the AI provider.
Real-world examples
Proven workflows to replicate. Many of them are already available in the template library.
Recovering Customers
| Type | Customers |
| Conditions | “Customer: has no orders during the period” (6 months) and “Customer is a newsletter subscriber …” |
| Actions | “Create coupon” (10%, automatically valid for 1 month), followed by “Send email” with {marketing_created_coupon_code} |
| Execution | one-time |
Birthday coupon
| Type | Customers |
| Conditions | “Customer: Birthday” and “Customer is a newsletter subscriber …” |
| Actions | “Create Coupon” (€5), then “Send Email” |
| Execution | Recurring, blacklist period 30 days. If set to “one-time,” the coupon would only be issued on the first birthday. |
Inventory Alert
| Type | Products |
| Conditions | “Products: Stock” <= 5 and “Products: Status” = Yes (active) |
| Actions | "Send email" to "Store Owner," one email per item containing {admin_product_link} |
| Execution | Recurring, blacklist period 1 week |
Sold-out items from the promotion category
| Type | Products |
| Conditions | "Products: Stock" <= 0 and "Products: in Categories" (Promotional Category, "Has Category Assignment" = Yes) |
| Actions | "Products: Remove Category Assignment" (Action Category) |
| Execution | Recurring, blacklist period 1 day |
The store removes the assignment even if it is the item’s only category. Use this only for items that are also listed in their main category.
Free sample based on product value
| Type | Shopping Cart |
| Conditions | “Shopping Cart: Manufacturer-Specific Cart Value” >= 50 € |
| Actions | "Shopping Cart: Automatically Add Free Product" (Test) |
| Counter-event | Value < 50 € → “Shopping Cart: Remove Automatic Free Product” |
Reminder before an appointment
| Type | Orders |
| Conditions | “Order: Product Attribute Date (Interval)” with “Attribute Name” “Camp Start Date,” “Direction” “BEFORE the attribute date,” 7 “day(s),” and “Order: Order Status” |
| Actions | “Send Email” to the customer |
| Execution | Recurring, blacklist period 12 months |
The condition is met exactly on the day that corresponds to the interval. “AFTER the attribute date” is suitable for requesting reviews after courses or events.
Follow-up after a sample order
| Type | Orders |
| Conditions | “Order: Item Number contains ‘sample’” (LIKE, %-MUSTER) and “Order: Order Status” and “Order: Last Update” (1 week) and “Order: Order Receipt Time” (from start date) |
| Actions | "Send email" to the customer |
| Execution | One-time |
You set the percent sign yourself: %-MUSTER ends with “-MUSTER,” MUSTER% begins with it. To create a second step with a coupon, chain it as described under “Events.”
Automatically send an invoice upon prepayment
| Type | Orders |
| Conditions | “Order: Payment Methods” (Prepayment) and “Order: Order Statuses” (Your Incoming Status) and “Order: Order Receipt Time” (from start date) |
| Actions | “Order: Status Update” with “Keep Status,” “Notify Customer” = Yes, and a text block with “Attach Invoice” |
| Execution | One-time |
If the e-invoice is to be sent with the dispatch email, enable “Attach electronic invoice (ZUGFeRD)” in the text block you use for sending. It is sent as a separate email via an event, for example, with the status “Sent” as a condition. See “Documents via Email.”
Gift Certificate with Design for Self-Printing
Your customer purchases a gift certificate with a design, such as Christmas or a birthday. After payment is received, they automatically receive an email with the gift certificate as a PDF: your design as the background, with the gift certificate code and amount on top. Create a gift certificate item and an event for each design.
| Type | Orders |
| Conditions | “Order: Order Status” (your status for “paid”) and “Order: Item Number Contains Pattern” with LIKE and GIFT-WEIHNACHT% |
| Actions | “Order: Redeem Voucher/Create ‘ |
| Execution | One-time |
How to Prepare the Template
- Upload the image as a JPEG or PNG to the “
images/” folder and select it under “Gift Certificate Attachment as PDF: Base Image”; the path is relative to this folder. A separate image can be used for each language. - The PDF is an A4 page, landscape orientation, if the image is wider than it is tall. The shop will adjust the image to fit and center it. Create it in A4 proportions, approximately 1754 × 1240 pixels landscape or 2480 × 3508 pixels portrait for print quality. from 4.9.123
- Allow for a light-colored, unoccupied area for the code and amount. The text will be printed in black.
- Specify the positions of the code and value (fields “… X-Axes …” and “… Y-Axes …”) in pixels relative to the design, starting from the upper-left corner. The Y-value is the baseline of the font, not its top edge.
- Specify the font size in points. If you want to use a custom font, add it as a path to the
.ttffile starting from the shop directory; if no font is specified, the shop will use a default font. from 4.9.108
What Matters
- The item number for each gift certificate item begins with
GIFT, for exampleGIFT-WEIHNACHTorGIFT-GEBURTSTAG. - The reaction only appears if “Show Gift Certificates” is enabled under Settings → Checkout → Summary → Gift Certificates. Additionally, “Gift Certificate Queue” must be enabled there; without a queue, the shop credits the amount directly to the customer’s account, and no code is generated.
- Enter the template from the condition into the reaction under “Only coupons with item number (optional).” This ensures that even an order with coupons featuring different designs will have each coupon displayed with the correct image. from 4.9.108
- Without a template, the reaction will redeem all active coupons in the order. Therefore, do not run an event without a template alongside design-based events.
- Test each design with its own order before offering the coupons. How Coupons Are Sold and Redeemed: Coupons & Vouchers Guide.
On the left is the reaction with a template, background image, and items; on the right is the PDF generated by the shop from this. Click to enlarge.
Tips for Getting Started
- Start with a template and customize it step by step.
- Always simulate before responses go live.
- Limit new orders so that no event contacts old customers.
- Choose the blacklist period carefully: too short annoys customers and clutters the log; too long means you’ll miss opportunities.
- Prepare email templates before you create events.
- Send promotional emails only to subscribers and use
{link_unsub}.
Placeholders for Event Emails
These placeholders are available in emails sent via “Send Email” in addition to the usual placeholders in email templates.
| Placeholders | Content |
|---|---|
{marketing_created_coupon_code} | Code from “Create Coupon” in the same event (preceding reaction) |
{marketing_created_coupon_amount} | Value of this coupon |
{marketing_created_coupon_minimum_order} | Minimum order value for this coupon |
{marketing_created_coupon_expire_date} | Expiration date of this coupon |
{marketing_customer_set_random_pass_new_password} | New password from “Generate Random Password” |
{marketing_customer_set_zip_as_pass_entry_postcode} | ZIP code from “Customer: Set ZIP Code as Password” |
{marketing_customers_data_customers_email_address} | Customer’s email address |
{admin_product_link} | Link to the item in the backend (Product Events) |
{link_unsub} | Personal unsubscribe link, only if the newsletter subscription is confirmed; otherwise left blank |
{customers:bonus_points}, {customers:bonus_points_value} | Customer’s bonus points balance, as a number or as an amount |
{orders:bonus_points}, {orders:bonus_points_value} | Bonus points from this order (Order Events) |
Editing email templates: CMS Manager & Emails Guide.
Frequently Asked Questions
Why am I not receiving an email from my marketing event?
Does an event without a condition apply to all products or brands?
What does the blacklist period do?
How do I chain two events, such as a reminder followed by a coupon?
How do I exclude customers without an account?
purchased_without_account,” comparison “=,” value 0.How do I exclude a single customer from marketing emails?
How does the unsubscribe link work in event emails?
{link_unsub} into the email template. Subscribers receive their personal link, while customers without a subscription see a blank space. Starting with XONIC 4.10, the shop automatically adds the link and the unsubscribe button to the email itself.An event resets a flag repeatedly. Why?
How do I exclude out-of-stock items, such as during a label event?
How does the automatically generated coupon code get included in the email?
{marketing_created_coupon_code} in the email template. In the event, “Create Coupon” must come before “Send Email”; otherwise, the placeholder will be empty.How do I automatically send an invoice or e-invoice as a PDF?
Can I attach my own PDF file to an event email?
Does a cancellation status from an event trigger a refund?
Where do I enter the key for ChatGPT or another AI?
How do I get store events into n8n or another tool?
Further Guides
We'll set up your automations together with you
We’ll help with events, email templates, the cron job, and determining which emails are promotional.
Contact Support Now