Stores choose Sylius for a reason. They've outgrown WooCommerce's plugin chaos. They want cleaner architecture than Magento. They value Symfony patterns: proper dependency injection, testable code, an event system that actually makes sense.
So when these stores want automated customer support, where do they turn?
Nowhere, really. Every chat vendor targets Shopify. Some support WooCommerce. A few handle Magento. Sylius? Either "contact us for enterprise pricing" (six figures, 12-month implementation) or nothing at all.
I got tired of telling Sylius clients they'd have to build from scratch. So I built what the platform deserves: a proper Symfony bundle with event subscribers, console commands, and service decoration.
What Your Customers Get
- Product discovery that understands intent. Customer asks "hiking boots for long trails." The assistant searches your catalog by meaning, finds products with cushioning and arch support, explains why each fits.
- Support that knows your policies. "Can I return these if they don't fit?" The assistant pulls your actual return policy, not generic boilerplate.
- 24/7 availability in 65+ languages. German customers get German responses. French customers get French. Automatic. Even customers writing in a language your store doesn't carry get responses in their language.
- Human handoff when needed. Complex issues escalate to your team. The assistant handles volume; humans handle nuance.
For most stores: fewer "do you have this in blue?" tickets, more time for cases that need human judgment.
Why a Proper Symfony Bundle
I could have built a generic webhook integration. But that would ignore everything that makes Sylius development pleasant.
The Emporiqa Sylius plugin gives you:
- Event subscribers that respond to Sylius lifecycle events. Products sync automatically when saved.
- Console commands with Symfony patterns. Progress bars, dry-run flags, batch sizes.
- Twig extensions for clean templating.
{{ emporiqa_widget() }}beats pasting JavaScript. Auto-detects language, currency, and channel from Sylius context. - Multi-channel support for multi-channel stores. The plugin uses Sylius channel codes directly as Emporiqa channel identifiers, so search results filter by channel automatically.
- Service decoration and Symfony events for customization. Decorate the formatter for custom fields. Listen to events to skip sync, modify payloads, or intercept cart operations. Standard Symfony.
The code is open source. Read every class. Fork it if you want.
The Architecture Argument
Chat processing is compute-intensive. Running it inside your Symfony app means chat traffic competes with checkout traffic. Black Friday brings both shoppers and chatters. Your store slows down.
With webhook integration, your Sylius store just sends JSON when data changes. A few milliseconds, queued asynchronously. Chat processing happens on our infrastructure. Your hosting costs don't increase with chat volume.
Setup: Seven Steps
Seven steps, mostly standard Symfony configuration:
composer require emporiqa/sylius-plugin- Register in
bundles.php(Flex may do this automatically) - Create
emporiqa.yamlconfig - Add environment variables
- Add widget to your template
- Configure router URI for correct URLs
bin/console emporiqa:sync:all
For complete steps, see our Sylius Quick Start.
Customization Without Forking
Sylius stores vary. Custom attributes, complex variants, industry-specific data. The bundle handles this through service decoration and Symfony events:
// Decorate the product formatter to add custom fields
class CustomProductFormatter implements ProductFormatterInterface
{
public function format(ProductInterface $product): array
{
$events = $this->inner->format($product);
// Add custom attributes (consolidated format: {channel: {lang: value}})
foreach ($events as &$event) {
if (isset($event['data']['attributes'])) {
foreach ($event['data']['attributes'] as $channel => &$languages) {
foreach ($languages as $lang => &$attrs) {
$attrs['warehouse'] = 'Berlin';
}
}
}
}
return $events;
}
// Delegate: formatForDeletion(), formatVariantForDeletion()
}
Your customizations live in your code. The Emporiqa plugin stays unmodified. Standard Symfony patterns.
The bundle dispatches five Symfony events: emporiqa.pre_sync (skip entities), emporiqa.post_format (modify formatted data), emporiqa.pre_webhook_send (filter before delivery), emporiqa.cart_operation (intercept cart actions), and emporiqa.order_tracking (adjust order responses). Event listeners alongside service decoration — both standard Symfony.
Page Entity Options
Sylius doesn't have a built-in Page entity. You have three choices:
- Create one: Implement a translatable page entity. Plugin README has samples.
- Adapt existing CMS: Decorate the page formatter to work with BitBag CMS or whatever you use.
- Disable page sync: Set
sync.pages: falseif you don't need policy answers.
What This Requires
- Symfony/Sylius experience. Bundle installation, service decoration, console commands.
- Command-line access. Sync runs via console, not web UI.
- An Emporiqa account. Each plan includes conversation limits with clear overage rates.
This targets teams with technical resources. If you're looking for no-code, Sylius probably isn't your platform anyway.
What This Doesn't Do
- Send abandoned cart emails or SMS - Cart operations happen in-chat, but there's no follow-up messaging after abandonment.
- Replace your team - Complex issues escalate to humans.
Emporiqa handles product discovery, the path to purchase (including in-chat cart operations and conversion tracking), policy questions, and optional order tracking. If you configure an order tracking API endpoint, customers can check order status directly in the chat.
The ROI Question
Does a chat assistant make sense for your Sylius store? It depends.
Good fit:
- Complex products needing explanation
- International customers (need 24/7, multilingual)
- High support volume from routine questions
Maybe not yet:
- Low traffic
- Simple commodity products
- Already high conversion rates
Run your numbers with our ROI analysis framework.
Getting Started
- Create a free Emporiqa account - No credit card
- Install the bundle on staging
- Sync your products
- Test with real questions customers ask
- Deploy when satisfied
Install free with $25 of credit. See if it works before committing.
Why I Built This
Sylius stores have been underserved by chat vendors. They chase high-volume platforms and leave Symfony developers to figure it out.
This bundle changes that. It's built by someone who uses Symfony, follows the patterns you'd expect, and integrates cleanly with Sylius's event-driven architecture. Open source. No lock-in. If Emporiqa disappears, you delete a bundle and your store works exactly as before.
I built this because Sylius stores deserve better than "contact us for enterprise pricing."
The Emporiqa Sylius plugin is on Packagist — composer require emporiqa/sylius-plugin. See Emporiqa for Sylius for the overview, the Sylius Quick Start for the setup, or install free to test with your products.