Возможности и способы установки
Вы можете отслеживать поведение пользователя на вашем сайте, записывать его активность, действия с товарами, заказы и прочее. По полученным данным сегментировать базу по покупательской или пользовательской активности, что позволит проводить маркетинговые кампании намного эффективнее.
С подключенным трекингом вам доступны такие функции, как:
О практическом применении и монетизации трекинга в рассылках вы можете почитать кейсы наших клиентов и узнать:
• как интернет-магазин увеличил выручку email-канала в 13 раз за 4 месяца
• как интернет-витрина конвертировала каждый шестой брошенный просмотр в покупку
Всего существует два способа установки трекинга - скрипт или API. Вы можете выбрать тот из двух, который будет проще в установке для вашей команды и соответствовать вашим техническим возможностям.
Ниже описаны инструкции по установке для каждого из вариантов.
Для подсчета выручки с помощью трекинга обязательно укажите сайт, на котором будет настроено отслеживание, в «Настройках аккаунта» в enKod
Отслеживание действий (трекинг) по API
Все методы для отслеживания действий пользователя доступны в нашей API-документации в разделе "Tracking".
Обратите внимание, что методы будут работать только в том случае, если для вашего аккаунта подключен модуль Трекинг. Если вы хотите использовать этот функционал - обратитесь к своему персональному менеджеру или на experts@enkod.io.
Особенности использования API:
- Для каждого нового посетителя нужно создать сессию
- При каждом новом посещении нужно вызывать метод «Старт сессии» (только для тех посетителей, кому уже присвоили сессию)
- Все остальные методы должны вызываться с сессией в заголовках
- Не рекомендуется передавать покупку без канала коммуникации (емейл, телефон)
При настройке отслеживания по API мы не можем автоматически определить, есть ли контакт в базе (по аналогии со скриптом и параметром eksubsemail). Это необходимо для деанонимизации сессии контакта до его авторизации на сайте (чтобы события просмотра страниц, товаров и тд были записаны известному контакту с емейлом). Но вы можете настроить эту же логику самостоятельно:
- Используйте в емейл-сообщениях URL параметр eksubsemail, в значении которого передайте емейл получателя с помощью тега персонализации {{subscriber_email}}
- При открытии сайта всегда должен вызываться API-метод /v1/sessions/
- После перехода контакта на сайт вызовите метод /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('subscribe',{groups: [18, "group_name"], fields: {email: 'my@email.com', firstName: 'Имя', lastName: 'Фамилия', phone: '7900000000'}, extraFields: {systemName: 'value', systemName2: 'value'}, cartMergeMethod: 'merge', favouriteMergeMethod: 'merge'})
</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 - Содержимое избранного переданного в запросе контакта будет проигнорировано, сохранится содержимое избранного существующего контакта | Необязательно |
Контакты добавляются и обновляются согласно методу addAndUpdate:
- новые контакты будут добавлены, существующие - обновлены.
Параметры поля fields: информация о подписчике
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| String | Емейл пользователя | Обязательно | |
| firstName | String | Имя подписчика | Необязательно |
| lastName | String | Фамилия подписчика | Необязательно |
| phone | String | Номер телефона подписчика | Необязательно |
Чтобы трекинг определил емейл-адрес контакта, попавшего на сайт из емейл-сообщения, для всех ссылок в сообщении нужно прописать URL-параметр eksubsemail, в значении которого передавать емейл получателя с помощью тега персонализации {{subscriber_email}}. При такой настройке трекинг получит емейл контакта из письма, из которого был переход на сайт, и пополнит анонимную сессию емейл-адресом еще до авторизации.
Если в extraFields вы используете поля типа список (list), обратите внимание:
- допустимо передать только 1 значение поля для списка - в ином случае изменение этого поля не будет записано, но сам метод отработает и все валидные параметры будут записаны;
- допустимо передать значение, которое не было создано в интерфейсе enKod - это значение будет автоматически создано и записано переданному контакту, а для любого другого контакта станет доступен выбор этого значения из списка значений этого поля данных.
Захват дополнительной информации о контакте без привязки к емейлу
Для использования этого метода подключение модуля трекинга не требуется
ekEvents.push('addExtraFields',{extraFields: {city: 'Рязань', systemName: 'value'}})
Используется для передачи данных о подписчике без привязки к его емейл-адресу. Например: запись города, номера телефона, возраста подписчика и т.д. до того, как он зарегистрируется или выполнит вход на сайте.
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| extraFields | Object | Список дополнительных полей | Обязательно |
Если в extraFields вы используете поля типа список (list), обратите внимание:
- допустимо передать только 1 значение поля для списка - в ином случае изменение этого поля не будет записано, но сам метод отработает и все валидные параметры будут записаны;
- допустимо передать значение, которое не было создано в интерфейсе enKod - это значение будет автоматически создано и записано переданному контакту, а для любого другого контакта станет доступен выбор этого значения из списка значений этого поля данных.
Передача пользовательского события
Для использования этого метода подключение модуля трекинга не требуется
ekEvents.push('event', {email:'my@email.com', phone:'79000000000', params: {param1: 'value1'}});
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| event | String | Cистемное имя события, созданного в enKod ➔ Пользовательские события | Обязательно |
| String | Email контакта | Необязательно | |
| phone | String | Номер телефона контакта | Необязательно |
| params | Object | Cистемные имена параметров событий с их значениями | Необязательно |
С методом может передаваться (не обязательно) емейл и/или телефон контакта. Если емейл и/или телефон не переданы или контакты с такими идентификаторами не найдены в аккаунте, то мы свяжем событие с сессией, если знаем ее. В случае привязки к сессии и при ее отсутствии (и отсутствии в вашем аккаунте переданных емейла или телефона) событие не отобразится в enKod.
Пользовательские события, переданные без емейла или телефона, не будут записаны в интерфейс, но мы все-равно будем хранить их в базе. В какой-то момент контакт может авторизоваться на сайте, а мы сможем связать сессию (которая уже хранится у нас) с идентификатором (который использовал контакт при авторизации). В этом случае мы подгрузим в историю событий все события этого контакта (и пополним его карточку событиями, которые он совершал до авторизации).
Подробнее о пользовательских событиях читайте в этом разделе Базы знаний.
Открытие любой страницы сайта
Для использования этого метода подключение модуля трекинга не требуется
<script type="text/javascript">
ekEvents.push('pageOpen')
</script>
Метод используется для сегментации контактов по истории посещений на сайте. Должен быть установлен на каждой странице сайта. Вместе с методом ekEvents.push('subscribe') позволяет отслеживать заходы на страницу конкретных пользователей и сегментировать их по этим данным.
Открытие страницы с товаром
<script type="text/javascript">
ekEvents.push('productOpen', { productId: 'артикул товара', param: 'value' });
</script>
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| productId | String | Артикул товара | Обязательно |
После обязательного параметра можно указать через запятую любые параметры товара, которые вы хотите передать в сервис. Например, категория товара и тд.
Открытие страницы с категорией товаров
<script type="text/javascript">
ekEvents.push('categoryOpen', { categoryId: 'идентификатор категории', categoryUrl: 'URL страницы категории' });
</script>
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| categoryId | Int | Идентификатор категории товаров | Обязательно |
| categoryUrl | String | Ссылка на страницу категории на сайте | Необязательно |
Добавление товара в корзину
Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:
- добавление одного товара в корзину
<script type="text/javascript">
ekEvents.push('productAdd', {productId: 'артикул товара'});
</script>
- добавление нескольких одинаковых товаров одним вызовом метода
<script type="text/javascript">
ekEvents.push('productAdd', {productId: 'артикул товара', count: 2});
</script>
- добавление нескольких разных товаров одним вызовом метода (передается массив с товарами)
<script type="text/javascript">
ekEvents.push('productAdd', [{productId: 'артикул товара'}, {productId: 'другой артикул'}]);
</script>
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| productId | String | Артикул товара | Обязательно |
| count | Int | Количество товара. По умолчанию значение 1. Можно присвоить любое значение | Необязательно |
Если на вашем сайте реализована механика работы с несколькими корзинами, то ознакомьтесь с этой статьей базы знаний.
Удаление товара из корзины
Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:
- удаление одного товара из корзины
<script type="text/javascript">
ekEvents.push('productRemove', {productId: 'артикул товара'});
</script>
- удаление нескольких одинаковых товаров одним вызовом метода
<script type="text/javascript">
ekEvents.push('productRemove', {productId: 'артикул товара', count: 2});
</script>
- удаление нескольких разных товаров одним вызовом метода (передается массив с товарами)
<script type="text/javascript">
ekEvents.push('productRemove', [{productId: 'артикул товара'}, {productId: 'другой артикул'}]);
</script>
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| productId | String | Артикул товара | Обязательно |
| count | Int | Количество товара. По умолчанию значение 1. Можно присвоить любое значение | Необязательно |
Добавление товара в избранное
Этот метод можно использовать несколькими способами. Рассмотрим их с примерами:
- добавление одного товара в избранное
<script type="text/javascript">
ekEvents.push('productLike', {productId: 'артикул товара'});
</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>
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| productId | String | Артикул товара | Обязательно |
Очистка сравнения
<script type="text/javascript">
ekEvents.push('productComparisonClean');
</script>
Заказ
<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>
Если вы хотите при оформлении заказа собирать информацию о контакте и записать сам заказ в enKod, то используйте последовательный вызов методов подписки и оформления заказа:
<script type="text/javascript">
async function subAndOrder() {
await ekEvents.push('subscribe', {
groups: [1, "sysname"],
fields: {
email: 'test@mail.ru',
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 заказа. Если не передаётся, то генерируется автоматически | Обязательно |
| items | [{}] | Маccив с товарами | Обязательно |
| sum | Float/Int | Сумма заказа | Обязательно для вывода выручки в интерфейсе |
| productId | String | Артикул товара | Обязательно для модуля рекомендаций |
| price | Float/Int | Цена товара | Обязательно для модуля рекомендаций |
| count | Int | Количество каждого из товаров в заказе | Обязательно для модуля рекомендаций |
Возврат заказа
<script type="text/javascript">
ekEvents.push('orderReturn',{orderId: 'id'})
</script>
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| orderId | String | ID заказа, возврат которого необходимо произвести | Обязательно |
При оформлении возврата будут пересчитаны параметры выручки. Число заказов и купленных товаров не изменится.
Дополнительные параметры товаров
Передавать дополнительные параметры товаров в методах может быть необходимо в трех случаях:
- на аккаунте не настроен импорт товарного фида
- в методе передается товар, которого нет в товарном фиде
- товарный фид настроен, но требуется записать (например, для вывода в письмо) специфические параметры товара или заказа, которые в фиде не предусмотрены
Передача таких параметров допустима для нескольких методов и должна быть произведена в формате param: 'value':
- Добавление товара в корзину с дополнительными параметрами:
<script type="text/javascript">
ekEvents.push('productAdd', {productId: 'артикул товара', param: 'value'});
</script>
- Добавление товара в избранное с дополнительными параметрами:
<script type="text/javascript">
ekEvents.push('productLike', {productId: 'артикул товара', param: 'value'});
</script>
- Заказ с дополнительными параметрами:
<script type="text/javascript">
ekEvents.push('productBuy',{orderId: 'id', items: [{productId: 'Артикул товара', count: 5}], param: 'value'})
</script>
Особенности передачи дополнительных параметров
Если у вас загружен товарный фид, то:
- вам достаточно указывать только
productId, все остальные параметры (ссылка на изображение товара, цена, ID категории) товара будут получены автоматически из фида; - при передаче значения параметра, отличного от значения из фида - записаны будут данные из фида;
- при передаче товара, отсутствующего в фиде, для него запишутся переданные в методе параметры и их значения;
- если вы передали параметры, которых нет в фиде, то они будут записаны в нашу базу данных и вы сможете увидеть их, используя соответствующий динамический контент:
- для заказов (
GetOrder) - вернет информацию о заказе со всеми товарам и параметрами - для корзин (
GetCart) - вернет информацию о товарах в корзине со всеми параметрами - для избранного (
GetFavourite) - вернет информацию о товарах в избранном со всеми параметрами
Если у вас не загружен товарный фид, то все параметры будут подгружаться в том виде, в каком вы их передали в enKod. Содержимое корзин, избранных и заказов вы также сможете увидеть с помощью соответствующих методов динамического контента.
Обратите внимание, что вы не сможете просмотреть дополнительные параметры товаров в событиях в карточке контакта, так как в ней доступно отображение только дефолтных полей. Однако, все данные будут записаны и могут быть использованы в динамическом контенте в письмах.
Настройка трекинга на сайте с 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 ОК».