AACsearch
Коннекторы и виджет

Аналитические события виджета

Типы событий, транспорт, схема данных и текущий статус сохранения для отслеживания аналитики виджета.

Виджет AACsearch автоматически отслеживает поведение пользователя и отправляет события на аналитический эндпоинт. Эти события питают панель аналитики поиска — топовые запросы, процент нулевых результатов, кликабельность (CTR) и поиски во времени.

Эндпоинт

POST /api/events/track
Authorization: Bearer <ключ ss_search_* или ss_scoped_*>
Content-Type: application/json

Тот же API-ключ, что используется для поиска (ss_search_*), аутентифицирует аналитические события. Эндпоинт разрешён для всех источников через CORS.

Типы событий

Тип событияТриггерПриоритет
search_queryПользователь отправляет поисковый запросP0
zero_resultsПоиск не возвращает результатовP0
result_clickПользователь нажимает на результат товараP0
widget_openВиджет открывается / становится видимымP1
filter_usedПользователь применяет или изменяет фасетный фильтрP1

Транспорт

Виджет отправляет события с keepalive: true, чтобы не терять события при навигации по странице:

fetch(eventsUrl, {
	method: "POST",
	headers: {
		"Content-Type": "application/json",
		Authorization: "Bearer " + apiKey,
	},
	keepalive: true,
	body: JSON.stringify(payload),
});

Схема данных

Можно отправить одно событие или пакет до 50 событий.

Одиночное событие:

{
	"type": "search_query",
	"sessionId": "a1b2c3d4-e5f6-...",
	"anonymousUserId": "uid_xyz",
	"query": "blue running shoes",
	"locale": "en",
	"referrer": "https://myshop.example.com/search",
	"metadata": {}
}

Пакет:

{
	"events": [
		{ "type": "widget_open", "sessionId": "a1b2c3d4-..." },
		{ "type": "search_query", "query": "blue running shoes", "sessionId": "a1b2c3d4-..." }
	]
}

Справочник полей

ПолеТипМакс. длинаОписание
typestringТип события (см. таблицу выше)
sessionIdstring64Эфемерный ID сессии (crypto.randomUUID() или запасной вариант)
anonymousUserIdstring64Стабильный анонимный ID пользователя (на браузер, может быть null в режиме приватности)
querystring512Строка поискового запроса (события search_query и zero_results)
productIdstring128Внешний ID товара (события result_click)
positionintegerРанг нажатого результата, с 1 (события result_click)
filtersobjectАктивные фасетные фильтры на момент события (события filter_used)
sortstring128Активный вариант сортировки
localestring16Локаль из конфигурации виджета
referrerstring512URL страницы (из document.referrer)
metadataobject4 КБНепрозрачные дополнительные данные — без персональных данных

Генерация ID сессии

Виджет генерирует ID сессии с помощью crypto.randomUUID() с запасным вариантом для простой случайной строки:

const sessionId =
	typeof crypto !== "undefined" && crypto.randomUUID
		? crypto.randomUUID()
		: Math.random().toString(36).slice(2);

ID сессии создаётся на экземпляр виджета / загрузку страницы. Он не сохраняется между сессиями.

Сохранение данных

Каждое событие сохраняется в таблицу SearchUsageEvent через recordSearchUsage(). Тип события сопоставляется следующим образом:

Тип события виджетаСохраняемый SearchUsageEvent.type
search_query"search_query"
zero_results"zero_results"
result_click"click"
widget_open"widget_open"
filter_used"filter_applied"

Все поля метаданных (query, productId, position, filters, sort, locale, referrer, sessionId, anonymousUserId, user-agent) сохраняются как JSON-блоб в SearchUsageEvent.metadata.

Что хранится и что не хранится

Хранится:

  • Тип события
  • ID сессии (эфемерный, случайный)
  • Анонимный ID пользователя (случайный, стабильный на браузер)
  • Текст поискового запроса
  • ID товара и позиция для событий кликов
  • Фасетные фильтры
  • Вариант сортировки
  • Локаль
  • URL реферера (не более 512 символов)
  • Строка User-agent (не более 256 символов)

Не хранится:

  • Полный IP-адрес — только серверная сторона запроса обрабатывается; IP не записывается в SearchUsageEvent
  • Email или любой идентификатор аутентифицированного пользователя
  • Сырые параметры строки запроса из URL реферера, которые могут содержать персональные данные

Оговорка о частичном сохранении

Если пакет событий отправлен и некоторые не удалось сохранить, эндпоинт возвращает:

{
	"accepted": 4,
	"rejected": 1
}

Счётчик rejected отражает сбои записи в базу данных, а не ошибки валидации. Ошибки валидации возвращают ответ 400 до каких-либо записей. Виджет не повторяет отклонённые события.

Панель аналитики

События, хранимые в SearchUsageEvent, питают процедуры аналитики:

  • search.usage — сырые строки событий за период
  • search.usageSummary — агрегированные счётчики по типу
  • search.topQueries — наиболее частые поисковые запросы
  • search.analytics — аналитические данные на уровне панели управления

Страницы панели в Панель управления → Обзор (плитки KPI, поиски во времени, топ запросов) и Панель управления → Аналитика читают из этих процедур.

Связанные страницы

On this page