ТЗ Электромолл
Показ товара в категории
В уровне данных на страницах категорий, главной, результатах поиска необходимо формировать объект после GTM со следующими переменными:
<script>
dataLayer.push({
'ecommerce': {
'currencyCode': 'RUB',
'impressions': [
{
'name': 'Triblend Android T-Shirt', // Название товара
'id': '12345', // Артикул товара
'price': '15.25', // Стоимость товара. Необязательный параметр.
'brand': 'Google', //Бренд или производитель. Необязательный параметр.
'category': 'Apparel', // Категория товара. Необязательный параметр.
'variant': 'Gray', // Вариант товара. Здесь можно указать какие-то отличительные признаки, если они нужны. Например, из какого материала или еще что-то. Необязательный параметр.
'list': 'Search Results', // Указываем список, в котором был показан товар. Указываем категорию, в которой был инициализированы показы товара. Например, "Электросамокаты" или "Электровелосипеды Airwheel", по последнему элементу вложенности. Для главной страницы – передаём значение: "Главная", для результатов поиска "Поиск" или "Результаты поиска". Необязательный параметр.
'position': 1 // Порядковый номер товара на странице. Необязательный параметр.
},
{
'name': 'Donut Friday Scented T-Shirt',
'id': '67890',
'price': '33.75',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Black',
'list': ‘Search Results’, // на странице категории, нижний блок
'position': 2
}]
}
});
</script>
Большинство переменных для этого пункта отслеживания необязательны. Также есть ограничение в 8 кб данных на передачу массива. Параметры выделенные жирным шрифтом наиболее важные.
Справка по переменным и обязательным полям: https://developers.google.com/analytics/devguides/collection/analyticsjs/enhanced-ecommerce?hl=ru
Клик по товару
Шаблон JS кода должен срабатывать при каждом клике при переходе на карточку товара. Аналогично, после кода GTM.
<script>
dataLayer.push({
'event': 'productClick',
'ecommerce': {
'click': {
            'actionField': {'list': 'Категория товара'}, // аналогично показам товаров в категории 
            'products': [{
'name': 'Triblend Android T-Shirt',
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel', // можно передавать до 5-ти уровней вложенности
разделенных "/"
'variant': 'Gray',
'position': '1' // позиция на странице
}]
}
}
});
</script>
Параметры выделенные жирным шрифтом наиболее важные. На сайте есть быстрый просмотр. Есть смысл генерировать объект также и при клике на быстрый просмотр.
Детальный просмотр карточки товара
Объект данных должен формироваться на детальной странице каждой карточки товара.
<script>
dataLayer.push({
'ecommerce': {
'detail': {
'actionField': {'list': 'Карточка товара'}, // оставляем так, как приведено в шаблоне
'products': [{
'name': 'Triblend Android T-Shirt',
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel', // можно передавать до 5-ти уровней вложенности
разделенных "/"
'variant': 'Gray'
}]
}
}
});
</script>
Добавление товара в корзину
Шаблон JS кода должен срабатывать при каждом добавлении товара в корзину. Аналогично, после кода GTM.
<script>
dataLayer.push({
'event': 'addToCart',
'ecommerce': {
'currencyCode': 'RUB',
'add': {
'products': [{
'name': 'Triblend Android T-Shirt',
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Gray',
'quantity': 1 // количество добавленного товара в корзину
}]
}
}
});
</script>
Разумно передавать все из описанных параметров при их наличии.
Удаление товара из корзины
Шаблон JS кода должен срабатывать при каждом удалении добавленного в корзину товара. Аналогично, после кода GTM.
<script>
dataLayer.push({
'event': 'removeFromCart',
'ecommerce': {
'remove': {
'products': [{
'name': 'Triblend Android T-Shirt',
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Gray',
'quantity': 1
}]
}
}
});
</script>
Передаваемые параметры должны быть аналогичны событию 'addToCart'.
Заказ товара
Шаблон JS кода должен быть сгенерирован на странице "Спасибо за покупку" после GTM.
<script>
dataLayer.push({
'ecommerce': {
'purchase': {
'actionField': {
'id': 'T12345', // номер заказа
'affiliation': 'Online Store', // название магазина
'revenue': '35.43', // общая сумма заказа
'tax':'4.90', // сумма налогов (можно передать 0.00)
'shipping': '5.99', // стоимость доставки (можно передать 0.00)
'coupon': 'SUMMER_SALE' // текст купона (необязательный параметр, у нас его нет)
},
'products': [{
'name': 'Triblend Android T-Shirt',
'id': '12345',
'price': '15.25',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Gray',
'quantity': 1,
'coupon': '' // купон для товара
},
{
'name': 'Donut Friday Scented T-Shirt',
'id': '67890',
'price': '33.75',
'brand': 'Google',
'category': 'Apparel',
'variant': 'Black',
'quantity': 1
}]
}
}
});
</script>
--------------------------------------
На странице чекаута (https://elektro-mall.ru/simplecheckout/) необходимо сделать скрытое поле (инпут) c name="cid".
---------------------------------------
В момент отправки заказа необходимо перехватывать данные из формы чекаута и иницииализировать передачу данных в следующий скрипт: 
// формируем URL в переменной $queryUrl
$queryUrl = ‘https://gyroworld.bitrix24.ru/rest/11/95d6f5ya3sx1vh93/crm.lead.add.json'; // оставляем как есть
// формируем параметры для создания лида в переменной $queryData
$queryData = http_build_query(array(
'fields' => array( // dev.1c-bitrix.ru/rest_help/crm/fields.php
'TITLE' => 'Лид с корзины Elektro-mall.ru', // название лида, которое будет отображаться в CRM
'NAME' => $Name, // поле имени
'PHONE' => array(array('VALUE' => $Phone, "VALUE_TYPE" => 'PHONE_MOBILE' )), // обязательно передаем данные многономерным массивом: значение/тип
'EMAIL' => $Email, // поле почты
'ADDRESS_CITY' => $City, // поле города
'ASSIGNED_BY_ID' => 1, // ID ответственного в B24, оставляем, как есть
'UF_CRM_GA_CID' => $GA_CID, // передаем то, что упало в скрытое поле “cid” на чекауте
'SOURCE_ID' => 'WEB', // источник по дефолтным ID //dev.1c-bitrix.ru/rest_help/crm/fields.php
),
'params' => array("REGISTER_SONET_EVENT" => "Y")
));
// запрос к B24 при помощи функции curl_exec
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
));
$result = curl_exec($curl);
curl_close($curl);
$result = json_decode($result, 1);
Итого: $Name – передаем имя из чекаута, $Email – мыло, $Phone – номер телефона, $GA_CID – данные из скрытого инпута name="cid", $City – город из поля на чекауте.