Возможности и способы установки

Вы можете отслеживать поведение пользователя на вашем сайте, записывать его активность, действия с товарами, заказы и прочее. По полученным данным сегментировать базу по покупательской или пользовательской активности, что позволит проводить маркетинговые кампании намного эффективнее.

С подключенным трекингом вам доступны такие функции, как:

  • Сегментация по действиям пользователя на сайте
  • Сегментация по покупательской активности
  • Отслеживание выручки с рассылок
  • Отслеживание выручки, количества заказов и среднего чека для каждого пользователя

Всего существует два способа установки трекинга - скрипт или API. Вы можете выбрать тот из двух, который будет проще в установке для вашей команды и соответствовать вашим техническим возможностям.

Ниже описаны инструкции по установке для каждого из вариантов.

Для подсчета выручки с помощью трекинга обязательно укажите сайт, на котором будет настроено отслеживание, в «Настройках аккаунта» в enKod

Отслеживание действий (трекинг) по API

Все методы для отслеживания действий пользователя доступны в нашей API-документации в разделе "Tracking".

Обратите внимание, что методы будут работать только в том случае, если для вашего аккаунта подключен модуль Трекинг. Если вы хотите использовать этот функционал - обратитесь к своему персональному менеджеру или на [email protected].

Особенности использования API:

  • Для каждого нового посетителя нужно создать сессию
  • При каждом новом посещении нужно вызывать метод «Старт сессии» (только для тех посетителей, кому уже присвоили сессию)
  • Все остальные методы должны вызываться с сессией в заголовках
  • Не рекомендуется передавать покупку без канала коммуникации (емейл, телефон)

При настройке отслеживания по API мы не можем автоматически определить, есть ли контакт в базе (по аналогии со скриптом и параметром eksubsemail). Но вы можете настроить эту же логику самостоятельно:

  1. Используйте в емейл-сообщениях URL параметр eksubsemail, в значении которого передайте емейл получателя с помощью тега персонализации {{subscriber_email}}
  2. При открытии сайта всегда должен вызываться API-метод /v1/sessions/
  3. После перехода контакта на сайт вызовите метод /v1/subscribe/, в котором передайте:
    • X-Session-Id контакта из п. 2
    • source = 'url_param'
    • email (fields) из {{subscriber_email}}

Обратите внимание, что при настройке отслеживания по API условия сегментов для всплывающих окон по корзине и посещениям страниц не будут работать. Чтобы пользоваться этими условиями необходимо передавать события изменения корзины с помощью метода JS-скрипта.

Отслеживание действий (трекинг) с помощью JS скрипта

Поставьте скрипт на сайт перед закрывающим тегом </body>.

<script type="text/javascript">
    var script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = '//cdn.enkod.ru/script/enpop.min.js';
    script.async = true;
    var first = document.getElementsByTagName('script')[0];
    first.parentNode.insertBefore(script, first);
    var enKodBox = window.enKodBox = window.enKodBox || {};    
    var ekEvents = window.ekEvents || [];
    enKodBox['token'] = 'СИСТЕМНОЕ_ИМЯ';
</script>

Системное имя аккаунта задается при создании аккаунта в платформе и не равно отправляющему домену или адресу сайта. Вы можете узнать системное имя у вашего персонального менеджера.

Обращение к скрипту будет выглядеть так:

<script type="text/javascript">
    ekEvents.push('название действия', { param1: 'и', param2: 'объект', param3: 'с параметрами' })
</script>

Первый аргумент – это название действия, а второй аргумент – это хэшмап с параметрами.

Ниже описан список событий, которые можно отслеживать.

Открытие страницы с товаром

<script type="text/javascript">
    ekEvents.push('productOpen', { productId: 'артикул товара', param: 'value' }); 
</script>

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно

После обязательного параметра можно указать через запятую любые параметры товара, которые вы хотите передать в сервис. Например, категория товара и тд.

Добавление товара в корзину

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно
count Int Количество товара. По умолчанию значение 1. Можно присвоить любое значение Необязательно

Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:

  • добавление одного товара в корзину
<script type="text/javascript">
    ekEvents.push('productAdd', { productId: 'артикул товара'}); 
</script>
  • добавление товара в корзину с дополнительными полями
<script type="text/javascript">
    ekEvents.push('productAdd', { productId: 'артикул товара', category: '1', group: 'some-group', param: 'value'}); 
</script>
  • добавление нескольких одинаковых товаров одним вызовом метода. Для этого достаточно передать параметр count.
 
<script type="text/javascript">
    ekEvents.push('productAdd', { productId: 'артикул товара', count: 2}); 
</script>
  • добавление нескольких разных товаров одним вызовом метода. В параметр прописывается массив с товарами, если не указано количество count, то по умолчанию берётся значение 1.
<script type="text/javascript">
    ekEvents.push('productAdd', [{ productId: 'артикул товара', count: 2}, { productId: 'другой артикул', count: 5}]); 
</script>

Удаление товара из корзины

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно
count Int Количество товара. По умолчанию значение 1. Можно присвоить любое значение Необязательно

Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:

  • удаление одного товара из корзины
<script type="text/javascript">
    ekEvents.push('productRemove', { productId: 'артикул товара'}); 
</script>
  • удаление нескольких одинаковых товаров одним вызовом метода. Для этого достаточно передать параметр count.
<script type="text/javascript">
    ekEvents.push('productRemove', { productId: 'артикул товара', count: 2}); 
</script>
  • удаление нескольких разных товаров одним вызовом метода. В параметр прописывается массив с товарами, если не указано количество count, то по умолчанию берётся значение 1.
<script type="text/javascript">
    ekEvents.push('productRemove', [{ productId: 'артикул товара', count: 2}, { productId: 'другой артикул', count: 5}]); 
</script>

Добавление товара в избранное

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно

Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:

  • добавление одного товара в избранное
<script type="text/javascript">
    ekEvents.push('productLike', { productId: 'артикул товара'}); 
</script>
  • добавление товара в избранное с дополнительными полями
<script type="text/javascript">
    ekEvents.push('productLike', { productId: 'артикул товара', category: '1', group: 'some-group', param: 'value'}); 
</script>
  • добавление нескольких разных товаров одним вызовом метода. В параметр прописывается массив с товарами.
<script type="text/javascript">
    ekEvents.push('productLike', [{ productId: 'артикул товара'}, { productId: 'другой артикул'}]); 
</script>

Удаление товара из избранного

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно

Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:

  • удаление одного товара из списка избранного
<script type="text/javascript">
    ekEvents.push('productDislike', { productId: 'артикул товара'}); 
</script>
  • удаление нескольких разных товаров одним вызовом метода. В параметр прописывается массив с товарами.
<script type="text/javascript">
    ekEvents.push('productDislike', [{ productId: 'артикул товара'}, { productId: 'другой артикул'}]); 
</script>

Добавление товара в сравнение

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно
<script type="text/javascript">
    ekEvents.push('productComparison', {product: {productId: 'артикул товара'}}); 
</script>

Удаление товара из сравнения

Зарезервированные названия полей

Имя Тип Описание Обязательность
productId String Артикул товара Обязательно
<script type="text/javascript">
    ekEvents.push('productComparisonRemove', {product: {productId: 'артикул товара'}}); 
</script>

Очистка сравнения

<script type="text/javascript">
    ekEvents.push('productComparisonClean'); 
</script>

Заказ

Зарезервированные названия полей

Имя Тип Описание Обязательность
orderId String ID заказа. Если не передаётся, то генерируется автоматически Обязательно
items [{}] Маccив с товарами Обязательно
sum Float/Int Сумма заказа Обязательно для вывода выручки в интерфейсе
productId String Артикул товара Обязательно для модуля рекомендаций
price Float/Int Цена товара Обязательно для модуля рекомендаций
count Int Количество каждого из товаров в заказе Обязательно для модуля рекомендаций
<script type="text/javascript">
    ekEvents.push('productBuy',{orderId: 'id',  sum: 1000,  items: [{productId: 'Артикул товара 1', count: 5, price: 10}, {productId: 'Артикул товара 2', count: 1, price: 50}]})
</script>
  • передача дополнительных параметров заказа
<script type="text/javascript">
    ekEvents.push('productBuy',{orderId: 'id', items: [{productId: 'Артикул товара', count: 5}], finalPrice: '100', param: 'value'})
</script>

Если вы хотите при оформлении заказа собирать информацию о контакте и записать сам заказ в enKod, то используйте последовательный вызов методов подписки и оформления заказа:

<script type="text/javascript">
    async function subAndOrder() {
            await ekEvents.push('subscribe', {
                source: 'form',
                groups: [1, "sysname"],
                fields: {
                    email: '[email protected]',
                    lastName: '',
                    phone: '70000000000'
                }
            })
            await ekEvents.push('productBuy', {
                orderId: '84781',
                items: [{
                    productId: '5y347p92',
                    size: '92',
                    count: 1,
                    price: 230
                }],
                sum: 230
            })
        }
        subAndOrder()
</script>

Возврат заказа

Зарезервированные названия полей

Имя Тип Описание Обязательность
orderId String ID заказа, возврат которого необходимо произвести Обязательно
<script type="text/javascript">
     ekEvents.push('orderReturn',{orderId: 'id'})
</script>

При оформлении возврата будут пересчитаны параметры выручки, число заказов и купленных товаров не изменится.

Захват контакта на любой из форм (логин, регистрация, быстрая покупка)

Зарезервированные названия полей

Имя Тип Описание Обязательность
groups Int/String [] Массив с id групп рассылок и/или системными именами групп рассылок, которые должны быть присвоены подписчику при добавлении в платформу Необязательно
fields Object Список основных полей Необязательно
extraFields ObjectСписок дополнительных полей Необязательно
mainChannel StringОсновной канал - либо 'email' либо 'phone'. Передается только в том случае, если в методе subscribe передаются 2 канала сразу Необязательно
cartMergeMethod StringПараметр обработки корзины при объединении контактов по общему идентификатору. По умолчанию принимает значение replace:
replace - Содержимое корзины существующего контакта будет перезаписано на содержимое корзины переданного в запросе контакта;
merge - Содержимое корзины существующего контакта будет объединено с содержимым корзины переданного в запросе контакта;
ignore - Содержимое корзины переданного в запросе контакта будет проигнорировано, сохранится содержимое корзины существующего контакта
Необязательно
favouriteMergeMethod StringПараметр обработки избранного при объединении контактов по общему идентификатору. По умолчанию принимает значение replace:
replace - Содержимое избранного существующего контакта будет перезаписано на содержимое избранного переданного в запросе контакта;
merge - Содержимое избранного существующего контакта будет объединено с содержимым избранного переданного в запросе контакта;
ignore - Содержимое избранного переданного в запросе контакта будет проигнорировано, сохранится содержимое избранного существующего контакта
Необязательно

Параметры поля fields: информация о подписчике

Имя Тип Описание Обязательность
email String Емейл пользователя Обязательно
firstName String Имя подписчика Необязательно
lastName String Фамилия подписчика Необязательно
phone String Номер телефона подписчика Необязательно
<script type="text/javascript">
    ekEvents.push('subscribe',{source: 'form', groups: [18, "group_name"], fields: {email: '[email protected]', firstName: 'Имя', lastName: 'Фамилия', phone: '7900000000'}, extraFields: {systemName: 'value', systemName2: 'value'}}, cartMergeMethod: 'merge', favouriteMergeMethod: 'merge')
</script>

Чтобы трекинг определил емейл-адрес контакта, попавшего на сайт из емейл-сообщения, для всех ссылок в сообщении нужно прописать URL-параметр eksubsemail, в значении которого передавать емейл получателя с помощью тега персонализации {{subscriber_email}}.

Захват дополнительной информации о контакте без привязки к емейлу

Используется для передачи данных о подписчике без привязки к его емейл-адресу. Например: запись города, номера телефона, возраста подписчика и т.д. до того, как он зарегистрируется или выполнит вход на сайте.

Зарезервированные названия полей

Имя Тип Описание Обязательность
extraFields ObjectСписок дополнительных полей Обязательно
ekEvents.push('addExtraFields',{extraFields: {city: 'Рязань', systemName: 'value'}})

Открытие любой страницы сайта

Метод используется для сегментации контактов по истории посещений на сайте. Должен быть установлен на каждой странице сайта. Вместе с методом ekEvents.push('subscribe') позволяет отслеживать заходы на страницу конкретных пользователей и сегментировать их по этим данным.

ekEvents.push('pageOpen')

Настройка трекинга на сайте с Google Tag Manager

Для использования нашего скрипта и методов в случае, если вы используете Google Tag Manager, необходимо следовать следующим шагам:

1. Для установки скрипта необходимо создать отдельный тег в GTM.

Теги ➔ Создать ➔ Конфигурация тега ➔ Выберите тип тега

Подробнее о тегах в GTM вы можете прочитать в мануале Google

Чтобы разместить скрипт внутри тега в GTM, вам необходимо создать тег с типом «Custom HTML» / «Пользовательский HTML» и опцией срабатывания тега «Once per event» / «Один раз за событие» (по умолчанию). В тело тега поместить код скрипта, прописав соответствующее вашему аккаунту системное имя (не равно домену сайта или названию аккаунта, можете узнать у вашего персонального менеджера).

Соответствующий триггер для запуска тега должен основываться на первой загрузке любой из страниц сайта или просмотре страницы (триггер выбирается по необходимым вам условиям).

Подробнее о триггерах в мануале Google

2. Для использования методов трекинга вам необходимо создать тег с типом «Custom HTML» / «Пользовательский HTML» для каждого из методов. В теле тега для значений параметров необходимо прописать используемые вами на сайте переменные.

Для примера рассмотрим шаблон метода для добавления товара в корзину и рабочий метод в GTM с заполненными клиентскими переменными.

<script type="text/javascript">
    ekEvents.push('productAdd', { productId: 'артикул товара', variant: 'тип товара', category: 'категория товара', count: 'кол-во товаров'}); 
</script>

Для каждого тега необходимо установить триггер, при котором этот метод должен срабатывать, и исключения (если необходимо).

3. После создания тегов их нужно сохранить, по необходимости проверить в “Предварительном просмотре” и опубликовать.

Проверка корректности работы методов трекинга в DevTools

Откройте сайт, перейдите в инструменты разработчика (F12 или Fn+F12).

Откройте необходимый раздел DevTools в соответствии со скриншотом.

Откройте любой товар, совершите любое целевое действие, на которое были установлены методы отслеживания (открытие карточки, добавление в корзину, заказ, добавление в избранное и т.д.).

Проверьте, что все методы enKod срабатывают корректно и без ошибок - возвращают статус «200 ОК».

Последнее изменение: 2024.04.09 07:23 — Anastasia Aniskova