Трекинг событий Shopping Assistant
Для анализа качества Shopping Assistant передавайте в Gravity Field custom events по ключевым шагам диалога. Эти события помогают понять, открывают ли пользователи чат, отправляют ли сообщения, получают ли ответы и где возникают ошибки или разрывы воронки.
В этом разделе описаны custom events ассистента и tracking URL товарных подборок.
Базовая воронка
Минимальная воронка диалога:
chat_dialog_open -> assistant_message_sent -> assistant_response_received
Если ответ содержит товарную подборку, дополнительно фиксируйте:
assistant_response_received -> assistant_product_selection_received
Ошибки и закрытия анализируются отдельно:
chat_error
chat_dialog_close
chat_dialog_end
События ассистента
Как считать ответ полученным
Событие assistant_response_received отправляйте после того, как ответ успешно получен и добавлен в интерфейс чата. Если API ответил, но пользователь уже закрыл чат или frontend не смог отрендерить ответ, событие отправлять не нужно.
Как считать товарную подборку
Событие assistant_product_selection_received отправляйте, если в ответе ассистента есть блок:
{
"type": "products",
"value": []
}
Если блок products отсутствует или список товаров пустой, событие отправлять не нужно.
Рекомендуемые поля
Передавайте технические идентификаторы, которые позволяют связать события одного диалога и одного запроса.
resourceId берите из user.uid Gravity Field. Его можно получить через POST /user.
Не передавайте в event payload текст сообщений, персональные данные, чувствительные данные пользователя и другие данные, которые не нужны для аналитики воронки.
Пример custom event
Ниже пример события для API V2. Дополнительные поля передаются в customProps.
{
"type": "assistant_message_sent",
"name": "Assistant Message Sent",
"customProps": {
"threadId": "thread-8f2b1c",
"resourceId": "665f0a000000000000000001",
"messageId": "message-1001",
"requestId": "request-7001",
"trafficType": "test",
"tenant_id": "670ccaae56afcafaf808c146",
"campaignId": "696a3dcf26ec5935e70a7f05",
"experienceId": "69f9fd5a4006ae8b33086404",
"variationId": "69f9fd5a4006ae8b3308640e"
}
}
Для передачи события используйте тот же канал, который уже применяется в вашей интеграции: Web, API или SDK.
Tracking товарных подборок
В ответе Shopping Assistant tracking-события могут находиться на двух уровнях:
При наступлении события обработайте все элементы events[] с соответствующим type. Для каждого элемента выполните GET-запрос по каждому URL из urls[].
async function sendTrackingEvents(events, type) {
const urls = events
.filter((event) => event.type === type)
.flatMap((event) => event.urls ?? (event.url ? [event.url] : []));
await Promise.allSettled(
urls.map((url) => fetch(url, { method: "GET", keepalive: true }))
);
}
sendTrackingEvents(result.events ?? [], "WRIMP");
sendTrackingEvents(product.events ?? [], "visible_impression");
Отправляйте видимый показ один раз для одного фактического показа блока или карточки. Ошибка tracking-запроса не должна блокировать отображение рекомендаций или действие пользователя. Общие правила описаны в разделе Передача взаимодействий пользователя с кампаниями.
Диагностика разрывов
Разрыв воронки возникает, когда пользователь отправил сообщение, но frontend не зафиксировал получение ответа:
assistant_message_sent -> нет assistant_response_received
Чтобы такие случаи можно было анализировать, важно:
- использовать стабильный
threadIdна протяжении всего диалога; - передавать
messageIdилиrequestIdдля каждого пользовательского сообщения; - отправлять
chat_error, если frontend получил ошибку; - отправлять
chat_dialog_close, если пользователь закрыл чат; - передавать
latencyMsвassistant_response_receivedиchat_error, если время ожидания известно.