Skip to content

Просмотр товара

Событие просмотра товара должно срабатывать при открытии карточки товара.

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

На данное событие завязаны следующие механики платформы:

  1. Триггер "Брошенный просмотр"
  2. Сегментация по интересу к товарам и их свойствам
  3. Некоторые товарные метрики
POST https://api.rees46.ru/push

Параметры

ПараметрОбязателен?Описание
shop_idДаAPI-ключ
did*ДаИдентификатор устройства
sidДаИдентификатор сессии . Обязателен при передаче did, желателен при других идентификаторах, если есть возможность
email*ДаEmail клиента
phone*ДаТелефон клиента
external_id*ДаВнешний идентификатор клиента
loyalty_id*ДаИдентификатор внешней программы лояльности клиента
telegram_id*ДаTelegram ID клиента
eventДаКод события. В данном случае view
segmentНетИдентификатор сегмента для встроенных A/B-тестов. Значения: A или B (латиница)
recommended_byНетПризнак атрибуцированного события – инструмент. Значения обычно берутся из ссылки на товар, возвращаемый нашим API
recommended_codeНетПризнак атрибуцированного события – идентификатор. Значения обычно берутся из ссылки на товар, возвращаемый нашим API
streamНетСтрим
refererНетСтраница сайта, на которой произошло событие
itemsДаМассив товаров для события. Обычно содержит только один товар, т.к. посетитель за один клик просматривает только один товар
items[]ДаОбъект товара
items[].idДаИдентификатор (артикул) товара, который указан в импорте товара. Пустой ID или ID длиннее 255 символов будут проигнорированы. Если все переданные ID невалидны, запрос вернёт ошибку 422
items[].priceНетЦена товара (устарело)
items[].nameНетНазвание товара (устарело)
items[].brandНетБренд товара (устарело)
items[].stockНетФлаг, что товар все еще в наличии (устарело)

Идентификаторы

Параметры, отмеченные [*] - обязателен хотя бы один из них. На стороне сайта или мобильных приложений SDK автоматически передает did.

Запрос

Пример запроса:

shell
# Минимальный трекинг 
curl 'https://api.rees46.ru/push' \
    -X 'POST' \
    -H 'Content-Type: application/json' \
    --data-raw '{"event":"view", "shop_id":"SHOP_ID", "did":"DEVICE_ID", "items":[ {"id":"PRODUCT_ID"} ] }'

# Простейший трекинг события без дополнительных свойств
curl 'https://api.rees46.ru/push' \
    -X 'POST' \
    -H 'Content-Type: application/json' \
    --data-raw '{"event":"view", "shop_id":"SHOP_ID", "did":"DEVICE_ID", "sid":"SEANCE_ID", "segment":"A", "items":[ {"id":"PRODUCT_ID"} ] }'

# Трекинг с атрибуцией блока товарных рекомендаций
curl 'https://api.rees46.ru/push' \
    -X 'POST' \
    -H 'Content-Type: application/json' \
    --data-raw '{"event":"view", "shop_id":"SHOP_ID", "did":"DEVICE_ID", "sid":"SEANCE_ID", "segment":"A", "recommended_by": "dynamic", "recommended_code": "...", "items":[ {"id":"PRODUCT_ID"} ] }'
javascript
// Простейший трекинг события без дополнительных свойств
r46("track", "view", "37");

// Трекинг с атрибуцией блока товарных рекомендаций, добавленной вручную (обычно JS SDK берет параметры из URL и добавляет их самостоятельно)
r46("track", "view", {
  id: "37",
  recommended_by: "dynamic",
  recommended_code: "jkIWdXSRfwVyK"
});

// Трекинг с атрибуцией быстрого поиска
r46("track", "view", {
  id: "37",
  recommended_by: "instant_search",
  recommended_code: "iphone"
});

// Трекинг с атрибуцией полного поиска
r46("track", "view", {
  id: "37",
  recommended_by: "full_search",
  recommended_code: "iphone"
});
swift
// Простейший трекинг без атрибуции
sdk.track(event: .productView(id: "PRODUCT_ID")) { trackResponse in
    print("Product viewed callback")
    switch trackResponse {
    case let .success(response):
        print("Successful")
    case let .failure(error):
        switch error {
        case .custom(let customError):
            print("Error: ", customError)
        default:
            print("Error: ", error.localizedDescription)
        }
        fatalError("Task failed successfully")
    }
}

// Трекинг с атрибуцией блока товарных рекомендаций
let recData = RecomendedBy(type: .dynamic, code: "beb620922934b6ba2d6a3fb82b8b3271")
sdk.track(event: .productView(id: "PRODUCT_ID"), recommendedBy: recData) { trackResponse in
    // ... все то же самое, что и выше
}
kotlin
// Простейший трекинг без атрибуции
sdk.trackEventManager.track(TrackEvent.VIEW, "SKU-12345")

// Трекинг с атрибуцией блока товарных рекомендаций в явном виде
val params = Params()
 .put(RecParams(RecParams.TYPE.RECOMMENDATION, "i7y233krghlzifuosy"))
 .put(ProductItemParams("SKU-12345"))

sdk.trackEventManager.track(
    TrackEvent.VIEW,
    params,
    object : OnApiCallbackListener() {
        override fun onSuccess(response: org.json.JSONObject?) { /* ... */ }
        override fun onError(code: Int, msg: String?) { /* ... */ }
    }
)

// Вариант, когда вы задаете контекст атрибуции. 
// Например, при нажатии пользователя на товар в блоке товарных рекомендаций,
// вы отмечаете, что следующий просмотр товара, который будет вызван 
// при открытии карточки товара, должен произойти с этой атрибуцией.
// 1. В момент нажатия на товар задаем контекст:
sdk.setRecommendedByUseCase(
 DomainRec(DomainRec.TYPE.RECOMMENDATION, code = "i7y233krghlzifuosy")
)
// 2. Вызываем простой трекинг просмотра, контекст атрибуции будет 
// передан автоматически и очищен, так что следующий просмотр товара
// будет уже без атрибуции.
sdk.trackEventManager.track(TrackEvent.VIEW, "SKU-12345")
java
Deprecated
javascript
// Простейший трекинг события без дополнительных свойств
sdk.track("view", "37");

// Трекинг с атрибуцией блока товарных рекомендаций, добавленной вручную (обычно JS SDK берет параметры из URL и добавляет их самостоятельно)
sdk.track("view", {
  id: "37",
  recommended_by: "dynamic",
  recommended_code: "jkIWdXSRfwVyK"
});

// Трекинг с атрибуцией быстрого поиска
sdk.track("view", {
  id: "37",
  recommended_by: "instant_search",
  recommended_code: "iphone"
});

// Трекинг с атрибуцией полного поиска
sdk.track("view", {
  id: "37",
  recommended_by: "full_search",
  recommended_code: "iphone"
});

Ответ

Пример ответа сервера:

json
{
  "status": "success"
}

В случае, если к событию добавлен попап, то в ответе будет объект попапа, который нужно показать посетителю:

json
{
  "status": "success",
  "popup": {
    "id": 337,
    "channels": [],
    "position": "...",
    "delay": 0,
    "html": "...",
    "web_push_system": false,
    "popup_actions": { ... }
  }
}

В случае ошибки ответ будет в формате:

json
{
  "status": "error",
  "payload": {
    "message": "Device ID is not valid"
  }
}