🎯 Аналитические
События взаимодействия — клики и другие действия пользователя. Применяются для сбора метрик и статистики.
🤖 Поведенческие
События просмотра страниц — товар, корзина, успешный заказ. Используются для обучения машинных моделей AnyQuery.
Публичные методы расположены в переменной Digi внутри глобальной области видимости браузерного JavaScript (window).
// Оба варианта эквивалентны: window.Digi.api.sendSearchEvent({ /* ... */ }) Digi.api.sendSearchEvent({ /* ... */ })
client.js вручную — скрипт подключается асинхронно и может загрузиться позже, чем будет вызвано событие с вашей стороны. Используйте хелпер ниже.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; })()
Примеры использования:
// Просто дождаться загрузки awaitForDigi().then(() => { console.log('Digi loaded') }) // Отправить событие поиска awaitForDigi().then(() => { Digi.api.sendSearchEvent({ /*...*/ }) }) // Несколько событий awaitForDigi().then(() => { Digi.api.sendAutocompleteQueryClickEvent({ /*...*/ }) Digi.api.sendAutocompleteTapClickEvent({ /*...*/ }) })
Каждый метод возвращает Promise, который никогда не выбросит исключение. В теле ответа всегда Boolean:
const isSuccessfulSend = await Digi.api.sendSearchEvent({ /* данные */ }) if (isSuccessfulSend) { // ✅ Событие отправлено успешно } else { // ❌ Ошибка — добавьте ?digi-debug в URL для деталей }
Для отображения ошибок в консоли добавьте в URL параметр:
https://example.com/search?q=молоко&digi-debug
Проверка через Network (без дебаг-режима):
csc или eventERROR_EVENT — всё окDetails?digi-debug или &digi-debug, затем проверьте консоль браузера и запросы трекинга в Network. Это самый быстрый способ увидеть ошибки в payload события.isZeroQuery, strategy, correction, refinements, anyQueryWorked, anyQuerySynonyms и похожие поля, если они уже пришли в API-ответе.- Не отправлять при пустом запросе (
/search/?q=) - Отправлять только для запросов длиной 3+ символа
- Отправлять только один раз — событие поиска всегда приходит только на 1-й странице, не при пагинации, скролле и применении фильтров. URL не должен содержать параметры фильтрации (например,
/filter/material/sizeили?color=red&size=xl) - Передавать корректные оригинальный и исправленный запросы
- Для нулевого запроса (нет товаров):
pageProducts: [] - Для редиректа:
pageProducts: ["redirect"]
Событие выполнения поиска: фиксирует поисковый запрос, товары в выдаче и дополнительные признаки обработки запроса.
| Параметр | Тип | Описание |
|---|---|---|
| searchTermreq | string | Поисковый запрос пользователя |
| pageProductsreq | array of strings | Список offer_id товаров на текущей странице выдачи |
| correction | string | Исправленный запрос, если API применил коррекцию |
| refinements | array | Активные уточнения запроса из API-ответа |
| isZeroQueryreq | boolean | Признак zero-query выдачи из API-ответа |
Digi.api.sendSearchEvent({ searchTerm: 'красное платье', pageProducts: ['SKU-1001', 'SKU-1002', 'SKU-1003'], correction: 'красное платье', refinements: ['brand:Acme', 'size:M'], isZeroQuery: false });
Событие просмотра страницы поисковой выдачи. Обычно отправляется после sendSearchEvent(), когда пользователь увидел результаты поиска.
| Параметр | Тип | Описание |
|---|---|---|
| isFromRedirectreq | boolean | Переход выполнен через редирект из поиска или автоподсказок |
| searchTermreq | string | Поисковый запрос |
| pageProductsreq | array of strings | offer_id товаров на странице выдачи |
| anyQueryWorked | boolean | Признак успешной обработки запроса AnyQuery |
| anyQuerySynonyms | array of strings | Синонимы, примененные AnyQuery |
| originalSearchTerm | string | Исходный запрос до коррекции |
| pageNumber | string | Номер страницы выдачи |
Digi.api.sendSearchPageViewEvent({ isFromRedirect: false, searchTerm: 'красное платье', pageProducts: ['SKU-1001', 'SKU-1002'], anyQueryWorked: true, anyQuerySynonyms: ['сарафан'], originalSearchTerm: 'краснае платье', pageNumber: '1' });
Клик по уточнению поискового запроса.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Текст выбранного уточнения |
| searchTermreq | string | Текущий поисковый запрос |
| refinements | array of strings | Полный набор активных уточнений после клика |
Digi.api.sendRefinementClickEvent({ item: 'красное платье вечернее', searchTerm: 'красное платье', refinements: ['вечернее', 'длинное'] });
Клик по дискретному фильтру выдачи, например бренду, цвету или размеру.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Выбранное значение фильтра |
| positionreq | number | Позиция значения в списке фильтра |
| strategyreq | string | Стратегия из ответа Search/Sort API |
| typereq | string | Код фильтра |
| statusreq | boolean | true при включении фильтра, false при снятии |
Digi.api.sendFacetDistinctEvent({ item: 'Acme', position: 3, strategy: 'popular', type: 'brand', status: true });
Изменение диапазонного фильтра выдачи, например цены.
| Параметр | Тип | Описание |
|---|---|---|
| minreq | number | Минимальное выбранное значение |
| maxreq | number | Максимальное выбранное значение |
| strategyreq | string | Стратегия из ответа Search/Sort API |
| typereq | string | Код диапазонного фильтра |
| statusreq | boolean | true при применении диапазона, false при сбросе |
Digi.api.sendFacetSliderEvent({ min: 1000, max: 5000, strategy: 'popular', type: 'price', status: true });
Событие просмотра главной страницы сайта.
Digi.api.sendHomePageViewEvent();Событие просмотра страницы категории.
| Параметр | Тип | Описание |
|---|---|---|
| isFromRedirectreq | boolean | Переход выполнен через редирект |
| searchTermreq | string | Связанный поисковый запрос или пустая строка |
| categoryIdreq | string | ID категории |
| breadcrumbsreq | array of strings | Хлебные крошки категории |
| pageProductsreq | array of strings | offer_id товаров на странице |
| pageNumber | string | Номер страницы |
| categoryName | string | Название категории |
Digi.api.sendCategoryPageViewEvent({ isFromRedirect: false, searchTerm: '', categoryId: 'dress', breadcrumbs: ['Одежда', 'Платья'], pageProducts: ['SKU-1001', 'SKU-1002'], pageNumber: '1', categoryName: 'Платья' });
Событие просмотра страницы бренда.
| Параметр | Тип | Описание |
|---|---|---|
| breadcrumbsreq | array of strings | Хлебные крошки брендовой страницы |
| isFromRedirectreq | boolean | Переход выполнен через редирект |
| searchTermreq | string | Связанный поисковый запрос или пустая строка |
| brandNamereq | string | Название бренда |
| pageProductsreq | array of strings | offer_id товаров на странице |
| pageNumber | string | Номер страницы |
Digi.api.sendBrandPageViewEvent({ breadcrumbs: ['Бренды', 'Acme'], isFromRedirect: false, searchTerm: '', brandName: 'Acme', pageProducts: ['SKU-2001', 'SKU-2002'], pageNumber: '1' });
Событие просмотра страницы товара.
| Параметр | Тип | Описание |
|---|---|---|
| isFromRedirectreq | boolean | Переход выполнен через редирект |
| searchTermreq | string | Связанный поисковый запрос или пустая строка |
| productIdreq | string | offer_id товара из фида |
| breadcrumbs | array of strings | Хлебные крошки товара |
| price | string | Цена товара |
| productName | string | Название товара |
| availability | boolean | Доступность товара |
| attributes | object | Дополнительные атрибуты товара |
| sku | string | SKU товара |
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' });
Событие добавления товара в корзину. Его можно отправлять из любой точки сайта, где пользователь добавляет товар: с карточки товара, из поиска, рекомендаций и других блоков.
| Параметр | Тип | Описание |
|---|---|---|
| productIdreq | string | offer_id товара из фида |
| pricereq | string | Цена добавленного товара с учетом скидки или без скидки, если скидки нет |
| quantityreq | number | Добавленное количество |
| productNamereq | string | Название товара |
| sku | string | SKU товара |
Digi.api.sendCartAddEvent({ productId: 'SKU-1001', productName: 'Платье Acme Red', price: '2990', sku: 'SKU-1001-M', quantity: 1 });
Корзина:
cartId всегда генерируется при попадании на страницу корзины и сохраняется в cookie.Оформление заказа: если пользователь перешел в обход корзины,
cartId генерируется; если cookie уже есть, берется значение из cookie.Успешный заказ:
cartId всегда берется из ранее созданной cookie.Если быстрый заказ оформляется на любой странице, отличной от корзины,
cartId нужно сгенерировать самостоятельно; сохранять такой id в cookie не нужно.cartItems передается в методах корзины и заказа как array of objects. Отдельное legacy-поле для цены со скидкой не передается: в price всегда указывайте цену товара с учетом скидки, а если скидки нет — обычную цену. subtotal рассчитывается как price × quantity.
| Поле | Тип | Описание |
|---|---|---|
| productIdreq | string | offer_id товара из фида |
| productNamereq | string | Название товара |
| pricereq | number | Цена за единицу товара с учетом скидки или без скидки, если скидки нет |
| quantityreq | number | Количество единиц товара |
| subtotalreq | number | price × quantity |
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 }];
Событие просмотра корзины. Отправляйте при открытии корзины и после значимых изменений состава корзины.
| Параметр | Тип | Описание |
|---|---|---|
| cartIdreq | string | Уникальный ID корзины |
| totalreq | number | Итоговая сумма корзины |
| subtotal | number | Сумма товаров без доставки |
| shippingCost | number | Стоимость доставки |
| cartItemsreq | array of objects | Товары в корзине |
Digi.api.sendCartPageViewEvent({ cartId: 'CART-12345', subtotal: 6970, shippingCost: 300, total: 7270, cartItems: cartItems });
Событие просмотра страницы оформления заказа.
| Параметр | Тип | Описание |
|---|---|---|
| cartIdreq | string | Тот же ID корзины, который использовался на шаге Cart |
| totalreq | number | Итоговая сумма заказа |
| subtotal | number | Сумма товаров без доставки |
| shippingCost | number | Стоимость доставки |
| cartItemsreq | array of objects | Товары в заказе |
Digi.api.sendOrderViewEvent({ cartId: 'CART-12345', subtotal: 6970, shippingCost: 300, total: 7270, cartItems: cartItems });
Событие успешного оформления заказа. По возможности всегда передавайте total, subtotal и cartItems: данные с шага Order Success точнее для метрик, чем данные с шага Cart.
orderId вида: "fastOrder_" + номер заказа.| Параметр | Тип | Описание |
|---|---|---|
| cartIdreq | string | Тот же ID корзины, который использовался на шаге Cart |
| totalreq | number | Итоговая сумма заказа |
| subtotal | number | Сумма товаров без доставки |
| shippingCost | number | Стоимость доставки |
| cartItemsreq | array of objects | Товары в заказе |
| orderIdreq | string | Номер заказа |
Digi.api.sendOrderSuccessViewEvent({ cartId: 'CART-12345', orderId: 'ORDER-98765', subtotal: 6970, shippingCost: 300, total: 7270, cartItems: cartItems });
Клик по поисковой подсказке или популярному запросу.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Текст подсказки |
| searchTermreq | string | Введенный запрос |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteQueryClickEvent({ item: 'красное платье', searchTerm: 'краснае пл', correction: 'красное платье' });
Клик по подсказке из истории поисковых запросов пользователя.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Текст подсказки из истории |
| searchTermreq | string | Введенный запрос |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteHistoryClickEvent({ item: 'платье', searchTerm: 'пла', correction: 'платье' });
Клик по подсказке категории.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Название категории |
| searchTermreq | string | Введенный запрос |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteCategoryClickEvent({ item: 'Платья', searchTerm: 'плат', correction: 'платье' });
Клик по подсказке бренда.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Название бренда |
| searchTermreq | string | Введенный запрос |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteBrandClickEvent({ item: 'Acme', searchTerm: 'acm', correction: 'acme' });
Клик по товару в блоке автоподсказок.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Название товара |
| searchTermreq | string | Введенный запрос |
| productIdreq | string | offer_id товара из фида |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteProductClickEvent({ item: 'Платье Acme Red', searchTerm: 'краснае пл', productId: 'SKU-1001', correction: 'красное платье' });
Клик по уточнению или быстрому фильтру в автоподсказках.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Текст выбранного уточнения |
| searchTermreq | string | Введенный запрос |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteTapClickEvent({ item: 'женское', searchTerm: 'платье', correction: 'платье' });
Событие редиректа из автоподсказок перед переходом пользователя на настроенную страницу.
| Параметр | Тип | Описание |
|---|---|---|
| itemreq | string | Текст подсказки, которая привела к редиректу |
| searchTermreq | string | Введенный запрос |
| correction | string | Исправленный запрос из Autocomplete API |
Digi.api.sendAutocompleteRedirectEvent({ item: 'акции', searchTerm: 'скидки', correction: 'скидки' });