Enhanced Ecommerce


This module captures GTM Enhanced Ecommerce events and turns them into Miso user interactions automatically.

Basic Usage

For example, if you start ecommerce tracking with default settings:

const client = new MisoClient('...');

client.gtm.ecommerce.start();

A push of such event to dataLayer:

window.dataLayer.push({
ecommerce: {
add: {
actionField: { /*...*/ },
products: [
{
id: 'a001',
quantity: 3
//...
},
{
id: 'a002',
quantity: 4
//...
}
]
}
}
});

Will result in this interaction sent to Miso API:

client.api.interactions.upload({
type: 'add_to_cart',
product_ids: ['a001', 'a002'],
quantities: [3, 4]
});

Default mapping

Ecommerce Event Key Miso Interaction Type Payload Properties
detail product_detail_page_view product IDs
add add_to_cart product IDs, quantities
remove remove_from_cart product IDs
purchase checkout product IDs, quantities, revenue (if available)
(anything else) custom custom action name (using event key)

Select events to track

You can specify a set of events to track inclusively:

client.gtm.ecommerce
.accept('add', 'remove')
.start();

Or exclusively:

client.gtm.ecommerce
.accept('*', '-checkout')
.start();

Custom event mapping

You can customize how events are mapped to Miso's interaction payloads:

client.gtm.ecommerce
.mapping((eventKey, eventData) => {
if (eventKey === 'add') {
// some custom handling...
return [
{
type: 'add_to_cart',
product_ids: [/* ...*/],
quantities: [/* ...*/],
}
];
}
// fallback to default mapping
return client.gtm.ecommerce.helper.defaultMapping(eventKey, eventData);
})
.start();

Stop tracking

Tracking can be stopped and resumed anytime:

client.gtm.ecommerce.stop();

client.gtm.ecommerce.start();