Skip to content
  1. Главная
  2. Справочный центр
  3. Разработчикам
  4. Вызовы счётчика — track, setTrackData, koLayer, ko_options

Вызовы счётчика — track, setTrackData, koLayer, ko_options

Обновлено:

Справочник по тому, что счётчик КО отдаёт в window. Как поставить обёртку и отправить первое событие — Свои события из одностраничного приложения и Свои события с обычного сайта; как назвать событие — Словарь событий.

Счётчик описан таким, какой он сегодня. Это не контракт с обещанием совместимости.

Два вызова

Всё, что нужно для своих событий, — два метода модуля ko.visit:

ko.visit.track(event_name, envelope)     // отправить событие
ko.visit.setTrackData(data, merge)       // задать контекст следующих событий

ko.visit появляется только после загрузки счётчика. До этого — очередь koLayer.

track(event_name, envelope)

event_name — строка, имя события. envelopeконверт, а не данные события:

ko.visit.track('report_exported', {
  data:   { rows: 42, format: 'xlsx' },   // поля события — только здесь
  income: 0,                              // деньги, необязательно
  cost:   0,                              // расход, необязательно
});

Поля конверта:

ПолеТипЧто делает
dataобъектПоля события. Разрез в отчёте строится измерением field:data.<ключ>
incomeчислоСкладывается как деньги. Лежит рядом с data, не внутри
costчислоТо же, но расход
entityстрокаПо умолчанию visitor — вторая часть формулы метрики. Менять незачем

Частая ошибка — плоский объект:

ko.visit.track('report_exported', { rows: 42 });   // ← rows уйдёт в служебную часть

Событие запишется, но rows не будет в его данных: разрез по этому полю даст одну пустую строку.

Сумма в data деньгами не станет — она сложится как обычное число. Деньги — только income и cost конверта.

setTrackData(data, merge)

Подмешивает поля в каждое следующее событие этой страницы.

ko.visit.setTrackData({ user_id: 42, plan: 'pro' }, true);   // дополнить
ko.visit.setTrackData({ user_id: 42 });                      // заменить весь контекст

merge по умолчанию false. Вызов без второго аргумента заменяет контекст целиком, а не дополняет его — второй setTrackData сотрёт то, что поставил первый. Если вы ставите контекст слоями по мере того, как факты становятся известны, второй аргумент обязателен.

При совпадении ключа побеждает контекст, а не событие. Поля контекста накладываются поверх data события, поэтому plan из контекста перезапишет plan, переданный в track. Один ключ живёт либо в контексте, либо в событии.

Контекст живёт в памяти страницы. Перезагрузка его обнуляет.

Очередь koLayer

Счётчик грузится асинхронно, и первое событие часто случается раньше него. До загрузки вызовы копятся в window.koLayer.

window.koLayer = window.koLayer || [];
window.koLayer.push(['visit', 'track', ['report_exported', { data: { rows: 42 } }]]);

Элемент очереди — один массив из трёх частей: имя модуля, имя метода, массив аргументов. Четыре отдельных аргумента в push счётчик не выполнит.

Функция тоже принимается и вызывается в контексте счётчика:

window.koLayer.push(function () { /* счётчик уже здесь */ });

При инициализации счётчик подменяет push собственной реализацией, поэтому после загрузки запись в очередь выполняется сразу, а не ждёт разбора. Отдельная ветка «счётчик уже загружен → зову напрямую» в обёртке всё равно полезна: она даёт возврат результата.

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

Опции счётчика — ko_options

Объект ko_options объявляется до загрузки счётчика; после — не читается.

var ko_options = {
  modules: {
    visit: {
      url_tracking_hash_router: false,
      url_tracking_query_patterns: ['*', '!utm_*', '!_*'],
      url_tracking_debounce_ms: 100,
    },
  },
};
ОпцияПо умолчаниюЧто делает
url_tracking_hash_routerfalsetrue, если маршруты приложения идут через #/
url_tracking_query_patterns['*', '!utm_*', '!_*']Какие query-параметры участвуют в адресе страницы. * — разрешить всё, ! — исключить по маске
url_tracking_debounce_ms100Пауза перед обработкой смены адреса

Фильтр параметров — то, чем страница не размножается в отчёте на десяток строк из-за ?tab=2&_r=17. По умолчанию utm_* и всё, начинающееся с _, уже исключены.

Отладка

ЧтоКак
Включить отладку?ko_debug в адресе страницы
Заглушить счётчик?ko_off в адресе страницы
Проверить, что событие ушлоВкладка Network, запрос visit.php?type=event; тело запроса — конверт целиком

Счётчик молчит и без ключа: если в установочном коде пустой hash, счётчик выключается сам.

Ограничения

  • Дедупликации нет. Один вызов — одна запись. Экран, который перерисовывается сам, даст событие на каждый проход; ключ «это уже посчитано» — на вашей стороне.
  • Событие живёт на визите. У действия, случившегося не в браузере — оплата, подтверждённая на сервере, ночной пересчёт, — визита нет, и событием сайта оно быть не может.
  • Контекст не переживает перезагрузку: он в памяти страницы.
  • Событие на уходе со страницы может не успеть, если счётчик ещё не загрузился. Надёжный якорь — факт на принимающем экране.
  • Просмотры страниц счётчик пишет сам, включая маршруты SPA. Своя подписка на роутер удваивает просмотры.

Что рядом