Sylius Chat: Finally, a Plugin That Respects Symfony Architecture

February 3, 2026 Platform Guides
Sylius Chat: Finally, a Plugin That Respects Symfony Architecture

Sylius stores get ignored by chat vendors. Enterprise quotes, abandoned plugins, or nothing at all. I built a proper Symfony bundle that treats Sylius as a first-class citizen.

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:

  1. composer require emporiqa/sylius-plugin
  2. Register in bundles.php (Flex may do this automatically)
  3. Create emporiqa.yaml config
  4. Add environment variables
  5. Add widget to your template
  6. Configure router URI for correct URLs
  7. 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: false if 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

  1. Create a free Emporiqa account - No credit card
  2. Install the bundle on staging
  3. Sync your products
  4. Test with real questions customers ask
  5. 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.

Rosen Hristov, Founder & CEO of Emporiqa

Rosen Hristov

Founder & CEO at Emporiqa

Connect on LinkedIn

Share this article

Related Articles

Try It On Your Store

Install free with $25 of signup credit. Connect your products and see how the salesperson handles real customer questions. No card needed at signup. No trial deadline.

$25 credit on signup · No card needed · No trial deadline · Cancel anytime