Add a chat assistant to your PrestaShop store with automatic product sync.
You're in the developer setup guide. Looking for an overview of what Emporiqa does for your PrestaShop store? See the integration page.
For store owners. Install, configure, sync — with step-by-step screenshots.
StartFor developers. Architecture, webhook payload, customization hooks, and extensibility.
ReadInstall the module, paste two credentials, run one sync. Your chat widget goes live on your store.
First, install the module. Get the zip from the PrestaShop Addons Marketplace or the GitHub repository, then upload it via Modules → Module Manager → Upload a module. PrestaShop installs it and registers the required hooks.
Go to Modules → Emporiqa → Configure. Paste your Store ID and Connection Secret — both come from your Emporiqa dashboard under Store Settings → Integration.
Open the Sync tab on the configuration page. Click Test Connection first, then Sync All to send all products and pages. Larger catalogs take a few minutes.
Open your storefront. The chat bubble appears in the bottom-right corner. Click it, ask a product question, and watch the salesperson answer from your catalog.
Need to customize sync behavior, add custom fields, or integrate with a third-party module?
See Developer DocsArchitecture, configuration reference, webhook payload schema, and customization hooks.
The module listens to PrestaShop hooks (actionProductSave, actionObjectCmsUpdateAfter, combination events, order validation, etc.) and sends webhook events to Emporiqa using deferred delivery: events are queued during the request and flushed after the response reaches the browser via register_shutdown_function. Saving a product never blocks on the network.
All translations and channels for a single product or page consolidate into one webhook event. Combinations cascade up: editing a child triggers a parent re-sync so search always sees the full catalog state.
| PrestaShop | 8.0+ / 9.0+ |
| PHP | 7.4 or higher |
| Emporiqa account | Free sandbox or paid subscription |
All settings live at Modules → Emporiqa → Configure. Connection Settings is the main section and is expanded by default. Sync toggles and advanced settings (languages, webhook URL, batch size) are collapsed under Advanced.
| Setting | Description |
|---|---|
| Store ID | Your unique store identifier from the Emporiqa dashboard. |
| Connection Secret | Shared secret used for HMAC-SHA256 signing of webhook and order tracking requests. |
| Order Tracking URL | Read-only field. Copy this URL into your Emporiqa dashboard (Settings → Store Integration → Order Tracking) to enable order lookup from the chat. |
Most stores don't need to change these.
| Setting | Description |
|---|---|
| Sync Products | Enable/disable product synchronization. |
| Sync Pages | Enable/disable CMS page synchronization. |
| Enabled Languages | Which languages to sync. The module maps each PrestaShop language to its ISO code and consolidates translations into one payload per product. |
| Webhook URL | Emporiqa webhook endpoint. Default works for most stores. |
| Batch Size | Items per webhook request during full sync (default: 25). |
Products and CMS pages sync via webhooks on create, update, and delete using PrestaShop hooks (actionProductSave, actionProductDelete, etc.) with dedup to prevent duplicate events.
Embedded automatically via the displayHeader hook. Language and currency are detected from the current shop context.
Products sync with translated names, descriptions, categories, and attributes from all enabled languages, consolidated into one payload per product. Each language maps to its ISO code automatically.
Full parent/child sync for product combinations. Combination changes trigger parent re-sync. Deleting a combination sends a variation delete event and re-syncs the parent.
Customers can add, update quantities, and checkout from the chat. Front controller: /module/emporiqa/cartapi.
Trigger full sync from the module configuration page with an AJAX progress bar. Test connection, sync products and pages in batches.
Tracks chat sessions to purchases via actionValidateOrder and actionOrderStatusPostUpdate.
Webhook events are queued during the request and flushed after the response is sent via register_shutdown_function. No impact on page load.
Each product or page is sent as a single webhook event containing all languages and channels. Translatable fields are nested by channel and language code.
{
"type": "product.updated",
"data": {
"identification_number": "product-42",
"sku": "product-42",
"channels": ["my-shop"],
"names": {"my-shop": {"en": "Hiking Boots", "fr": "Chaussures de randonnee"}},
"descriptions": {"my-shop": {"en": "Waterproof leather boots...", "fr": "Bottes en cuir impermeables..."}},
"links": {"my-shop": {"en": "https://store.com/hiking-boots", "fr": "https://store.com/fr/chaussures-randonnee"}},
"categories": {"my-shop": {"en": ["Footwear > Hiking"], "fr": ["Chaussures > Randonnee"]}},
"attributes": {"my-shop": {"en": {"Material": "Leather"}, "fr": {"Material": "Cuir"}}},
"brands": {"my-shop": "TrailPeak"},
"prices": {"my-shop": [{"currency": "EUR", "current_price": 129.99, "regular_price": 149.99}]},
"images": {"my-shop": ["https://store.com/img/boots-front.jpg"]},
"availability_statuses": {"my-shop": "available"},
"stock_quantities": {"my-shop": 42},
"is_parent": false,
"parent_sku": null,
"variation_attributes": {}
}
}
| Type | Pattern | Fields |
|---|---|---|
| Translatable | {channel: {lang: value}} |
names, descriptions, links, categories, attributes, variation_attributes |
| Shared | {channel: value} |
brands, prices, images, availability_statuses, stock_quantities |
| Flat | Direct value | identification_number, sku, channels, is_parent, parent_sku |
The module dispatches PrestaShop hooks you can listen to from your own module to control sync behavior and modify data before it's sent.
| Hook | Description |
|---|---|
actionEmporiqaShouldSyncProduct |
Set $params['should_sync'] = false to skip a specific product. |
actionEmporiqaShouldSyncPage |
Set $params['should_sync'] = false to skip a specific CMS page. |
actionEmporiqaFormatProduct |
Modify the formatted product payload before send. |
actionEmporiqaFormatPage |
Modify the formatted page payload before send. |
actionEmporiqaFormatOrder |
Modify order data before the conversion event is sent. |
actionEmporiqaOrderTracking |
Modify the order tracking response before it's returned to the customer. |
actionEmporiqaWidgetParams |
Add or override widget embed parameters. |
// In your custom module
public function hookActionEmporiqaShouldSyncProduct($params)
{
$product = $params['product'];
if (!$product->active) {
$params['should_sync'] = false;
}
}
Register your hooks in your module's install() method or via service configuration. All hooks receive a mutable parameters array.
Emporiqa can look up order status on behalf of customers during chat conversations. The module registers a signed front controller that PrestaShop calls when a customer asks about their order.
POST /module/emporiqa/ordertracking
The endpoint is always active once the module is installed. Email verification is always required — the customer must provide the email on the order before any data is returned. To enable order lookup from chat, set the Order Tracking API URL in your Emporiqa dashboard (Store Settings → Integration) to:
https://your-store.com/module/emporiqa/ordertracking
Requests are authenticated using the same HMAC-SHA256 connection secret. Requests older than 5 minutes are rejected. See the Webhook Setup Guide for the full request/response schema.
Order tracking is optional. Without the dashboard URL configured, order questions route to the Customer Support agent instead.
displayHeader hook is registered (reinstall the module if needed).allow_url_fopen or cURL is enabled in PHP.Webhook architecture, combinations, deferred sending, and customization hooks.
Cross-language search, 65+ languages, how translations sync.
Evaluation checklist: data sync, handoff, pricing, languages, attribution.
Prove chat ROI: session to cart to purchase attribution.