Документация

Документация

Web-SDK JavaScript API

Весь API — одна глобальная функция rstat4. Первый аргумент — имя метода, остальные — его параметры. До загрузки библиотеки вызовы ставятся в очередь и возвращают 0; после загрузки выполняются сразу и возвращают результат метода.

rstat4('<метод>', ...аргументы)

Отправка данных#

page — просмотр страницы#

rstat4('page', [data], [options])

Отправляет событие page с данными производительности в блоке perf и сбрасывает счётчики трекеров (максимальная прокрутка и т.п.). Библиотека не отправляет его сама: вызывайте после configure, а в SPA — при каждой смене маршрута.

ПараметрТипПо умолчаниюОписание
dataObject{}Любые данные о странице: тип, категория, идентификатор товара
optionsObject{}Опции доставки
rstat4('page', { type: 'content', name: 'Контакты' });
rstat4('page', { type: 'category', id: '2342344', name: 'Товары для дома' });

event — произвольное событие#

rstat4('event', name, [data], [options])
ПараметрТипПо умолчаниюОписание
nameStringНазвание события, характеризует что произошло
dataObject{}Произвольные данные события
optionsObject{}Опции доставки
rstat4('event', 'add_to_cart', {
  sku: 'A-100',
  name: 'Шторка для ванны',
  category: 'Товары для дома',
  qty: 2
});

rstat4('event', 'popup_displayed', { type: 'discount', offer: 'personal_24h' });

identify — идентификация пользователя#

rstat4('identify', userId, [traits])
rstat4('identify', traits)
ПараметрТипОписание
userIdString, NumberИдентификатор пользователя из вашей базы
traitsObjectХарактеристики пользователя: тариф, сегмент, хеш email и т.п.

userId и трейты сохраняются в хранилище браузера и добавляются в блок user каждого последующего сообщения: user.id плюс ключи трейтов. Отдельное событие на сервер не уходит, поэтому вызывать identify имеет смысл до page или сразу после логина.

rstat4('identify', 42, { plan: 'pro', email_hash: 'c8d1...' });
rstat4('identify', { segment: 'vip' }); // только трейты

request — запрос к сервису с ответом#

rstat4('request', service, name, [data]) → Promise<response>
ПараметрТипОписание
serviceStringНазвание сервиса платформы
nameStringМетод сервиса
dataObjectПараметры, передаваемые сервису

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

const offer = await rstat4('request', 'offers', 'get', { slot: 'hero' });

notify — уведомление сервиса без ответа#

rstat4('notify', service, name, [data])

То же, что request, но без ожидания ответа: уходит через sendBeacon.

sessionEvent — принудительное событие сессии#

rstat4('sessionEvent')

Отправляет событие session с текущими данными сессии.

Опции доставки#

Третий аргумент event и page — объект опций доставки:

ОпцияОписание
request: trueОтправить через fetch и вернуть промис с ответом сервера
transport_img: trueОтправить через пиксель-изображение
outbound: trueПометка клика по внешней ссылке, ставится автоматически в link_click

Запись сессии#

record#

rstat4('record', [options])

Запускает запись сессии. Бандл rrweb-record.js загружается с сервера трекера только в этот момент. options переопределяют trackRecord из конфигурации. Повторный вызов во время активной записи игнорируется, вызов до инициализации откладывается до неё.

stopRecord#

rstat4('stopRecord')
rstat4('record', false)

Останавливает запись и отправляет остаток буфера. После остановки запись можно начать снова.

rstat4('record');                         // старт
rstat4('record', { recordCanvas: true }); // старт с опциями
rstat4('stopRecord');                     // стоп

Настройки маскирования описаны в конфигурации trackRecord.

Коллбеки#

onReady — библиотека инициализирована#

rstat4('onReady', function () {
  const uid = rstat4('getUid');
  dataLayer.push({ rstatUid: uid });
});

Если библиотека уже инициализирована, коллбек выполняется сразу.

onEvent — каждое событие до отправки#

rstat4('onEvent', function (name, data, options) { /* ... */ })
АргументОписание
nameИмя события
dataДанные события, переданные при создании
optionsОпции доставки

Пример: некорректно заполненная форма доставки открывает чат с поддержкой.

rstat4('onEvent', function (name, data) {
  if (name === 'field_invalid' && data.fname === 'delivery') {
    setTimeout(function () {
      SomeChat.open({ info: 'Проблемы с заполнением формы доставки' });
      rstat4('event', 'chat_opened', { reason: 'invalid_delivery_form' });
    }, 5000);
  }
});

onMessage — полное сообщение в том виде, как оно уходит на сервер#

rstat4('onMessage', function (msg) {
  console.log(msg.name, msg.sess, msg.page);
})

msg содержит все блоки из структуры события. Подходит для отладки и собственных интеграций.

onInternalEvent — внутренние события библиотеки#

rstat4('onInternalEvent', function (name, data) { /* ... */ })

Имена: dom_loaded, before_unload, visibility_change.

onServerMessage — сообщения с сервера#

rstat4('onServerMessage', function (name, data) { /* ... */ })

Канал сервер → браузер (WebSocket) зарезервирован и в текущей версии не активен. Коллбек регистрируется, но вызовов не будет.

Утилиты#

МетодОписание
rstat4('getUid')Текущий uid посетителя. До инициализации — предупреждение и undefined, используйте внутри onReady
rstat4('getSessNum')Номер текущей сессии посетителя
rstat4('getLibInfo'){ id: 'web-sdk', v, sv, st } — версия библиотеки числом (5.2.1 → 5002001), версия сниппета, время старта
rstat4('isInitialized')true после инициализации
rstat4('buildProjectId', domain)[domain, projectId] — нормализованный домен и его хеш, который используется как projectId по умолчанию
rstat4('setCustomConfig', config)Сохранить персональные переопределения конфигурации в хранилище браузера. Применяются при следующих загрузках
rstat4('enableLogger')Подробный лог в консоли. До загрузки библиотеки можно включить через window._rst4_logger = true
rstat4('set', name, obj)Положить объект в реестр библиотеки
rstat4('buildProjectId', 'www.shop.example.com')
// → ['example.com', 1617632140]

rstat4('getLibInfo')
// → { id: 'web-sdk', v: 5002001, sv: 5002001, st: 1757960000000 }