← На главную

Трекинг через JS-библиотеку (Digi.api)

Методы для отправки трекинговых событий через базовую JavaScript-библиотеку AnyQuery. Применяется когда невозможно собрать события через механизм экстракции данных из DOM-дерева.

📊
Типы событий
Два класса трекинговых событий

🎯 Аналитические

События взаимодействия — клики и другие действия пользователя. Применяются для сбора метрик и статистики.

🤖 Поведенческие

События просмотра страниц — товар, корзина, успешный заказ. Используются для обучения машинных моделей AnyQuery.

i
Минимальный набор для простого трекинга: Home, Product, Search, Cart, Order Success. Остальные события считаются опциональными и подключаются по мере необходимости.
🔑
Доступ к методам API
window.Digi.api

Публичные методы расположены в переменной Digi внутри глобальной области видимости браузерного JavaScript (window).

javascript
// Оба варианта эквивалентны:
window.Digi.api.sendSearchEvent({ /* ... */ })
Digi.api.sendSearchEvent({ /* ... */ })
🚨
Важно: Любые трекинговые события отправляются в момент совершения конечным пользователем аналогичного действия в Вашей системе.
⚠️
Не нужно дожидаться загрузки client.js вручную — скрипт подключается асинхронно и может загрузиться позже, чем будет вызвано событие с вашей стороны. Используйте хелпер ниже.
Ожидание загрузки client.js
Хелпер awaitForDigi
javascript
const awaitForDigi = (()=>{
  let timeoutId
  const promise = new Promise((resolve) => {
    const checkDigi = () => {
      if ('Digi' in window && window.Digi) {
        resolve()
      } else {
        timeoutId = setTimeout(checkDigi, 100)
      }
    }
    timeoutId = setTimeout(checkDigi, 100)
  })
  return () => promise;
})()

Примеры использования:

javascript
// Просто дождаться загрузки
awaitForDigi().then(() => {
  console.log('Digi loaded')
})

// Отправить событие поиска
awaitForDigi().then(() => {
  Digi.api.sendSearchEvent({ /*...*/ })
})

// Несколько событий
awaitForDigi().then(() => {
  Digi.api.sendAutocompleteQueryClickEvent({ /*...*/ })
  Digi.api.sendAutocompleteTapClickEvent({ /*...*/ })
})
📋
Типизация методов
Возвращаемые значения

Каждый метод возвращает Promise, который никогда не выбросит исключение. В теле ответа всегда Boolean:

true — событие отправлено успешно
false — произошла ошибка при отправке
javascript
const isSuccessfulSend = await Digi.api.sendSearchEvent({ /* данные */ })

if (isSuccessfulSend) {
  // ✅ Событие отправлено успешно
} else {
  // ❌ Ошибка — добавьте ?digi-debug в URL для деталей
}
🔍
Отладка ошибок
Дебаг-режим и Network-вкладка

Для отображения ошибок в консоли добавьте в URL параметр:

url
https://example.com/search?q=молоко&digi-debug

Проверка через Network (без дебаг-режима):

1
Открыть DevTools → вкладка Сеть / Network
2
Выставить фильтр csc или event
3
Нажать на нужное событие → вкладка Payload
4
Проверить название события: если не ERROR_EVENT — всё ок
Успех: eventType ≠ ERROR_EVENT
Ошибка: eventType = ERROR_EVENT, детали в поле Details
Разделы сайта
Главная, категория и брендовая страница
Digi.api.sendHomePageViewEvent()Поведенческое

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

javascript
Digi.api.sendHomePageViewEvent();
Digi.api.sendCategoryPageViewEvent()Поведенческое

Событие просмотра страницы категории.

ПараметрТипОписание
isFromRedirectreqbooleanПереход выполнен через редирект
searchTermreqstringСвязанный поисковый запрос или пустая строка
categoryIdreqstringID категории
breadcrumbsreqarray of stringsХлебные крошки категории
pageProductsreqarray of stringsoffer_id товаров на странице
pageNumberstringНомер страницы
categoryNamestringНазвание категории
javascript
Digi.api.sendCategoryPageViewEvent({ isFromRedirect: false, searchTerm: '', categoryId: 'dress', breadcrumbs: ['Одежда', 'Платья'], pageProducts: ['SKU-1001', 'SKU-1002'], pageNumber: '1', categoryName: 'Платья' });
Digi.api.sendBrandPageViewEvent()Поведенческое

Событие просмотра страницы бренда.

ПараметрТипОписание
breadcrumbsreqarray of stringsХлебные крошки брендовой страницы
isFromRedirectreqbooleanПереход выполнен через редирект
searchTermreqstringСвязанный поисковый запрос или пустая строка
brandNamereqstringНазвание бренда
pageProductsreqarray of stringsoffer_id товаров на странице
pageNumberstringНомер страницы
javascript
Digi.api.sendBrandPageViewEvent({ breadcrumbs: ['Бренды', 'Acme'], isFromRedirect: false, searchTerm: '', brandName: 'Acme', pageProducts: ['SKU-2001', 'SKU-2002'], pageNumber: '1' });
📄
Страница товара
Просмотр карточки товара
Digi.api.sendProductPageViewEvent()Поведенческое

Событие просмотра страницы товара.

ПараметрТипОписание
isFromRedirectreqbooleanПереход выполнен через редирект
searchTermreqstringСвязанный поисковый запрос или пустая строка
productIdreqstringoffer_id товара из фида
breadcrumbsarray of stringsХлебные крошки товара
pricestringЦена товара
productNamestringНазвание товара
availabilitybooleanДоступность товара
attributesobjectДополнительные атрибуты товара
skustringSKU товара
javascript
Digi.api.sendProductPageViewEvent({ isFromRedirect: false, searchTerm: 'красное платье', productId: 'SKU-1001', breadcrumbs: ['Одежда', 'Платья'], price: '3490', productName: 'Платье Acme Red', availability: true, attributes: { color: 'red', size: 'M' }, sku: 'SKU-1001-M' });
Добавление в корзину
sendCartAddEvent
Digi.api.sendCartAddEvent()Аналитическое

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

ПараметрТипОписание
productIdreqstringoffer_id товара из фида
pricereqstringЦена добавленного товара с учетом скидки или без скидки, если скидки нет
quantityreqnumberДобавленное количество
productNamereqstringНазвание товара
skustringSKU товара
javascript
Digi.api.sendCartAddEvent({ productId: 'SKU-1001', productName: 'Платье Acme Red', price: '2990', sku: 'SKU-1001-M', quantity: 1 });
🛒
Корзина и заказ
cartItems, корзина, оформление и успешный заказ
i
Логика cartId на шагах корзины и заказа.
Корзина: cartId всегда генерируется при попадании на страницу корзины и сохраняется в cookie.
Оформление заказа: если пользователь перешел в обход корзины, cartId генерируется; если cookie уже есть, берется значение из cookie.
Успешный заказ: cartId всегда берется из ранее созданной cookie.
Если быстрый заказ оформляется на любой странице, отличной от корзины, cartId нужно сгенерировать самостоятельно; сохранять такой id в cookie не нужно.
Структура cartItemsОбъект

cartItems передается в методах корзины и заказа как array of objects. Отдельное legacy-поле для цены со скидкой не передается: в price всегда указывайте цену товара с учетом скидки, а если скидки нет — обычную цену. subtotal рассчитывается как price × quantity.

ПолеТипОписание
productIdreqstringoffer_id товара из фида
productNamereqstringНазвание товара
pricereqnumberЦена за единицу товара с учетом скидки или без скидки, если скидки нет
quantityreqnumberКоличество единиц товара
subtotalreqnumberprice × quantity
javascript
const cartItems = [{ productId: 'SKU-1001', productName: 'Платье Acme Red', price: 2990, quantity: 2, subtotal: 5980 }, { productId: 'SKU-1002', productName: 'Ремень Acme', price: 990, quantity: 1, subtotal: 990 }];
Digi.api.sendCartPageViewEvent()Поведенческое

Событие просмотра корзины. Отправляйте при открытии корзины и после значимых изменений состава корзины.

ПараметрТипОписание
cartIdreqstringУникальный ID корзины
totalreqnumberИтоговая сумма корзины
subtotalnumberСумма товаров без доставки
shippingCostnumberСтоимость доставки
cartItemsreqarray of objectsТовары в корзине
javascript
Digi.api.sendCartPageViewEvent({ cartId: 'CART-12345', subtotal: 6970, shippingCost: 300, total: 7270, cartItems: cartItems });
Digi.api.sendOrderViewEvent()Поведенческое

Событие просмотра страницы оформления заказа.

ПараметрТипОписание
cartIdreqstringТот же ID корзины, который использовался на шаге Cart
totalreqnumberИтоговая сумма заказа
subtotalnumberСумма товаров без доставки
shippingCostnumberСтоимость доставки
cartItemsreqarray of objectsТовары в заказе
javascript
Digi.api.sendOrderViewEvent({ cartId: 'CART-12345', subtotal: 6970, shippingCost: 300, total: 7270, cartItems: cartItems });
Digi.api.sendOrderSuccessViewEvent()Поведенческое

Событие успешного оформления заказа. По возможности всегда передавайте total, subtotal и cartItems: данные с шага Order Success точнее для метрик, чем данные с шага Cart.

i
Для быстрых заказов (1 клик) рекомендуется orderId вида: "fastOrder_" + номер заказа.
ПараметрТипОписание
cartIdreqstringТот же ID корзины, который использовался на шаге Cart
totalreqnumberИтоговая сумма заказа
subtotalnumberСумма товаров без доставки
shippingCostnumberСтоимость доставки
cartItemsreqarray of objectsТовары в заказе
orderIdreqstringНомер заказа
javascript
Digi.api.sendOrderSuccessViewEvent({ cartId: 'CART-12345', orderId: 'ORDER-98765', subtotal: 6970, shippingCost: 300, total: 7270, cartItems: cartItems });
💡
Автоподсказки
Клики по подсказкам, товарам, уточнениям и редиректам
i
correction необязателен, но должен быть в примерах. Передавайте значение из ответа Autocomplete API, если была применена коррекция запроса.
Digi.api.sendAutocompleteQueryClickEvent()Query

Клик по поисковой подсказке или популярному запросу.

ПараметрТипОписание
itemreqstringТекст подсказки
searchTermreqstringВведенный запрос
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteQueryClickEvent({ item: 'красное платье', searchTerm: 'краснае пл', correction: 'красное платье' });
Digi.api.sendAutocompleteHistoryClickEvent()History

Клик по подсказке из истории поисковых запросов пользователя.

ПараметрТипОписание
itemreqstringТекст подсказки из истории
searchTermreqstringВведенный запрос
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteHistoryClickEvent({ item: 'платье', searchTerm: 'пла', correction: 'платье' });
Digi.api.sendAutocompleteCategoryClickEvent()Category

Клик по подсказке категории.

ПараметрТипОписание
itemreqstringНазвание категории
searchTermreqstringВведенный запрос
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteCategoryClickEvent({ item: 'Платья', searchTerm: 'плат', correction: 'платье' });
Digi.api.sendAutocompleteBrandClickEvent()Brand

Клик по подсказке бренда.

ПараметрТипОписание
itemreqstringНазвание бренда
searchTermreqstringВведенный запрос
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteBrandClickEvent({ item: 'Acme', searchTerm: 'acm', correction: 'acme' });
Digi.api.sendAutocompleteProductClickEvent()Product

Клик по товару в блоке автоподсказок.

ПараметрТипОписание
itemreqstringНазвание товара
searchTermreqstringВведенный запрос
productIdreqstringoffer_id товара из фида
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteProductClickEvent({ item: 'Платье Acme Red', searchTerm: 'краснае пл', productId: 'SKU-1001', correction: 'красное платье' });
Digi.api.sendAutocompleteTapClickEvent()Tap

Клик по уточнению или быстрому фильтру в автоподсказках.

ПараметрТипОписание
itemreqstringТекст выбранного уточнения
searchTermreqstringВведенный запрос
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteTapClickEvent({ item: 'женское', searchTerm: 'платье', correction: 'платье' });
Digi.api.sendAutocompleteRedirectEvent()Redirect

Событие редиректа из автоподсказок перед переходом пользователя на настроенную страницу.

ПараметрТипОписание
itemreqstringТекст подсказки, которая привела к редиректу
searchTermreqstringВведенный запрос
correctionstringИсправленный запрос из Autocomplete API
javascript
Digi.api.sendAutocompleteRedirectEvent({ item: 'акции', searchTerm: 'скидки', correction: 'скидки' });