Вы можете отслеживать поведение пользователя на вашем сайте, записывать его активность, действия с товарами, заказы и прочее. По полученным данным сегментировать базу по покупательской или пользовательской активности, что позволит проводить маркетинговые кампании намного эффективнее.
С подключенным трекингом вам доступны такие функции, как:
О практическом применении и монетизации трекинга в рассылках вы можете почитать кейсы наших клиентов и узнать:
• как интернет-магазин увеличил выручку email-канала в 13 раз за 4 месяца
• как интернет-витрина конвертировала каждый шестой брошенный просмотр в покупку
Всего существует два способа установки трекинга - скрипт или API. Вы можете выбрать тот из двух, который будет проще в установке для вашей команды и соответствовать вашим техническим возможностям.
Ниже описаны инструкции по установке для каждого из вариантов.
Для подсчета выручки с помощью трекинга обязательно укажите сайт, на котором будет настроено отслеживание, в «Настройках аккаунта» в enKod
Все методы для отслеживания действий пользователя доступны в нашей API-документации в разделе "Tracking".
Обратите внимание, что методы будут работать только в том случае, если для вашего аккаунта подключен модуль Трекинг. Если вы хотите использовать этот функционал - обратитесь к своему персональному менеджеру или на experts@enkod.io.
Особенности использования API:
При настройке отслеживания по API мы не можем автоматически определить, есть ли контакт в базе (по аналогии со скриптом и параметром eksubsemail). Это необходимо для деанонимизации сессии контакта до его авторизации на сайте (чтобы события просмотра страниц, товаров и тд были записаны известному контакту с емейлом). Но вы можете настроить эту же логику самостоятельно:
Обратите внимание, что при настройке отслеживания по API условия сегментов для всплывающих окон по корзине и посещениям страниц не будут работать. Чтобы пользоваться этими условиями необходимо передавать события изменения корзины с помощью метода 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), обратите внимание:
Для использования этого метода подключение модуля трекинга не требуется
ekEvents.push('addExtraFields',{extraFields: {city: 'Рязань', systemName: 'value'}})
Используется для передачи данных о подписчике без привязки к его емейл-адресу. Например: запись города, номера телефона, возраста подписчика и т.д. до того, как он зарегистрируется или выполнит вход на сайте.
Зарезервированные названия полей
| Имя | Тип | Описание | Обязательность |
|---|---|---|---|
| extraFields | Object | Список дополнительных полей | Обязательно |
Если в extraFields вы используете поля типа список (list), обратите внимание:
Для использования этого метода подключение модуля трекинга не требуется
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, необходимо следовать следующим шагам:
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. После создания тегов их нужно сохранить, по необходимости проверить в “Предварительном просмотре” и опубликовать.
Откройте сайт, перейдите в инструменты разработчика (F12 или Fn+F12).
Откройте необходимый раздел DevTools в соответствии со скриншотом.
Откройте любой товар, совершите любое целевое действие, на которое были установлены методы отслеживания (открытие карточки, добавление в корзину, заказ, добавление в избранное и т.д.).
Проверьте, что все методы enKod срабатывают корректно и без ошибок - возвращают статус «200 ОК».