Архитектура
Обработка входящих запросов
Коммуникация сервисов
Руководство пользователя
Получение данных из сервисов
Использование Панели управления
Использование инструментов из комплекта
Работа с Theia
Мониторинг Netdata
Работа с Jupyter
Работа с ClickHouse
Основные принципы
Модификация схемы
Подключение к VPN
Справочная информация
HTTP Redirect
Каналы получения данных
WebSocket
Загрузка больших файлов
JSON-RPC 2.0 RST
API сервисов
Director API
Front API
RockMe Framework (TypeScript)
Переменные окружения
Маппинг путей
Сетевая инфраструктура
Схема хранилища ClickHouse
Создание сервисов
Python + Band Framework
Организация сервиса
Коммуникация с другими сервисами
Работа с ClickHouse
Другие возможности
TypeScript + Rockme Framework
Организация сервиса
Туториалы
Получение данных из других сервисов
Сбор сырых данных Google Analytics
Создание динамического Calltracking
Построение истории отдельного пользователя
Классические модели атрибуции
Вероятностное прохождение воронки
Атрибуция по индексу активности
Воронки
Реализация Cookie-Sync
Сегментация пользователей
X
Выберите раздел

Web-SDK JavaScript API

Завершение статьи

Статья не завершена, будет здорово, если вы сможете внести свой вклад в нее.

Методы

Отправка произвольного события на сервер

Вы самостоятельно придумываете название и список данных, которые хотите передать.

rstat('event', eventName, {eventData})
PropertyTypeDefaultDescription
eventNameString*Произвольное название события, должно характеризовать что произошло
eventDataObject{ }Произвольные данные события. Может быть любое количество параметров.
Примеры
rstat('event', 'Added to Cart', {
  id: '1231223',
  name:'Шторка для ванны',
  categoryName: 'Товары для дома',
  listing: 'best_seller',
});
rstat('event', 'Popup Displayed', {
  type: 'Discount Offer',
  offer:'Personal_24h',
  category: 'Нижнее белье для кошек'
});
rstat('event', 'User Subscribed', {
  form:'Subscription',
  formPostiton: 'Bottom'
});

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

rstat('page', {eventData})

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

rstat('page', {
  type: 'content',
  name: 'Контакты'
})

или событие просмотра страницы товарной категории

rstat('page', {
  type: 'category',
  id: '2342344',
  name: 'Товары для дома'
})

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

rstat('identify', userId?:string, traits?:{[key:string]: string})
PropertyTypeDefaultDescription
userIdStringИдентификатор пользователя из вашей базы данных.
traitsObject{ }Набор характеристик пользователя, вроде email, возраста, сегмента и тд

Примеры

rstat('identify', 'wusahshaet0Quae8oa', {
  email: 'user@example.com'
})

Или без userId

rstat('identify', {
  age: '18',
  sex: 'male',
  segment: ['vip']
})

Получение Rockstat User ID

rstat('getUid')

Но получить его можно только после загрузки трекера, поэтому следует оборачивать в коллбек успешной загрузки (см ниже)

Call service method

rstat('request', service, name, params = {}): Promise<any>

Обращение к сервису платформы. Сервис должен быть объявлен как handler.

PropertyTypeDefaultDescription
serviceStringНазвание сервиса
nameStringМетод сервиса
paramsObject{ }Параметры которые будут переданы сервису

Notify service

rstat('notify', service, name, params = {}): void

Отравка нотификации (без ответа).

PropertyTypeDefaultDescription
serviceStringНазвание сервиса
nameStringМетод сервиса
paramsObject{ }Параметры которые будут переданы сервису

Library and snippet info

rstat('getLibInfo'): LibInfo

type LibInfo = {
  // Library name
  id: string;
  // Packed snippet semantic version
  sv: number;
  // Packed library semantic version
  v: number;
}

Generate project id based on domain

rstat('buildProjectId', 'www.mydomain.xz'): [string, number]

returns: [final_domain: string, project_id: number]

From domains removing www. and m. or first segments id > 3

Коллбеки

Успешная загрузка SDK

rstat('onReady', function(){
  const id = rstat('getUid');
  console.log(id)
});

Если трекер уже загружен, коллбек будет выполнен сразу. Можно передать его в dataLayer.

rstat('onReady', function(){
  dataLayer.push({
    'rstatUserId': rstat('getUid')
  });
});

Подписка на все события

При необходимости дополнительно обрабатывать собираемые данные или передавать их в сторонний сервис непосредственно из браузера

rstat('onEvent', (eventName:string, eventData:object) => void)

Аргументы

PropertyTypeDefaultDescription
eventNameStringИмя события
eventDataObject{ }Произвольные данные, добавленные к событию при его создании
Пример обработки события

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

rstat('onEvent', function(name, data){
  // Ловим событие ошибки при заполнении адреса доставки
  if (name === 'form_invalid' && data.fname === 'delivery') {
    // Ждем 5 секунд
    setTimeout(function(){
      // Открываем окно чата, передаем пометку оператору
      SomeChat.openChat({info: 'Проблемы с заполнением формы доставки'});
      // Передаем событие открытия чата в Rockstat, чтобы можно было оценить эффективность
      rstat('event', 'Chat Opened', {reason: 'Invalid delivery details'})
    }), 5*1000);
  }
});

Подписка на сообщения с сервера

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

rstat('onServerMessage', (eventName:string, eventData:object) => void)
PropertyTypeDefaultDescription
eventNameStringИмя события, пришедшего с сервера
eventDataObject{ }Произвольные данные, указанные серверной частью при создании события
rstat('onServerMessage', function(name, data){
  console.log('server message:', name, data);
});

или с самостоятельной фильтрацией

rstat('onServerMessage', function(name, data){
  if (name === 'show-discount-dialog'){
    console.log('onServerMessage', name, data);
  }
});

Listening system events

Web-SDK internally use event system for

rstat('onInternalEvent', (eventName:string, eventData:object) => void)