Skip to content

Удаление из корзины

Нужно передавать это событие, когда клиент удаляет товар из корзины.

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

  1. Триггер "Брошенная корзина"
  2. Триггер "Цена на товар в корзине снижена"
  3. Отображение корзины в карточке клиента
  4. Некоторые товарные метрики
POST https://api.rees46.ru/push

Параметры

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

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

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

Совет про полную очистку корзины

Если клиент полностью очистил корзину, вместо передачи нескольких событий удаления товара из корзины, передайте событие cart с full_cart=true и items в виде пустого массива. Это надежнее.

Запрос

TODO

Ревью мобильных SDK

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

shell
curl 'https://api.rees46.ru/push' \
    -X 'POST' \
    -H 'Content-Type: application/json' \
    --data-raw '{"event":"remove_from_cart", "shop_id":"SHOP_ID", "did":"DEVICE_ID", "sid":"SEANCE_ID", "items":[{"id":"PRODUCT_ID"}]}'
javascript
r46('track', 'remove_from_cart', 'id');
swift
sdk.track(event: .productRemovedFromCart(id: "PRODUCT_ID")) { trackResponse in
    // ... обработка коллбэков показана в описании события "Просмотр товара"
}
kotlin
TBD
java
TBD
javascript
sdk.track("remove_from_cart", id);

Ответ

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

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"
  }
}

Справочник ошибок

СценарийПример запросаКод ошибки
HTTP Method Validation
Использование не-POST методаGET /push?event=remove_from_cart&items[][id]=123405 Method Not Allowed
Authentication & Shop Validation
Запрос без shop_idPOST /push (без параметров)401 Unauthorized
Пустой shop_idPOST /push?shop_id=&event=remove_from_cart&items[][id]=123422 Unprocessable
Некорректный формат shop_id (не 30 hex)POST /push?shop_id=INVALID_ID&event=remove_from_cart&items[][id]=123422 Unprocessable
Несуществующий shop_idPOST /push?shop_id=000000000000000000000000000000&event=remove_from_cart&items[][id]=123404 Not Found
Device Validation
Корректный shop_id, но без didPOST /push?shop_id={valid}&event=remove_from_cart&items[][id]=123401 Unauthorized
Пустой did (трактуется как отсутствие)POST /push?shop_id={valid}&did=&event=remove_from_cart&items[][id]=123401 Unauthorized
Некорректный формат didPOST /push?shop_id={valid}&did=INVALID_ID&event=remove_from_cart&items[][id]=123422 Unprocessable
Несуществующий didPOST /push?shop_id={valid}&did=0000000000&event=remove_from_cart&items[][id]=123404 Not Found
Shop Status Validation
Магазин неактивен (non-active)POST /push?shop_id={non_active}&did={valid}&event=remove_from_cart&items[][id]=123403 Access Denied
Магазин ограничен (restricted)POST /push?shop_id={restricted}&did={valid}&event=remove_from_cart&items[][id]=123403 Access Denied
У магазина истекла оплатаPOST /push?shop_id={unpaid}&did={valid}&event=remove_from_cart&items[][id]=123403 Access Denied
Required Parameters Validation
Отсутствует параметр eventPOST /push?items[][id]=123&shop_id={valid}&did={valid}422 Unprocessable
Пустой параметр eventPOST /push?event=&items[][id]=123&shop_id={valid}&did={valid}422 Unprocessable
Некорректное значение event (не 'remove_from_cart')POST /push?event=INVALID&items[][id]=123&shop_id={valid}&did={valid}422 Unprocessable
Items Validation
Отсутствует параметр itemsPOST /push?event=remove_from_cart&shop_id={valid}&did={valid}422 Unprocessable
Пустой items (не массив)POST /push?event=remove_from_cart&items=&shop_id={valid}&did={valid}422 Unprocessable
Пустой массив itemsPOST /push (JSON: {"event": "remove_from_cart", "items": [], ...})422 Unprocessable
Все items отфильтрованы из-за некорректного IDPOST /push (JSON: {"event": "remove_from_cart", "items": [{"id": "Hello\\World"}], ...})422 Unprocessable
Optional Parameters Validation
Пустой streamPOST /push?event=remove_from_cart&items[][id]=123&stream=&shop_id={valid}&did={valid}422 Unprocessable
stream не строка (массив)POST /push?event=remove_from_cart&items[][id]=123&stream[]=42&shop_id={valid}&did={valid}422 Unprocessable
Пустой sidPOST /push?event=remove_from_cart&items[][id]=123&sid=&shop_id={valid}&did={valid}422 Unprocessable
sid не строкаPOST /push?event=remove_from_cart&items[][id]=123&sid[]=42&shop_id={valid}&did={valid}422 Unprocessable
Пустой refererPOST /push?event=remove_from_cart&items[][id]=123&referer=&shop_id={valid}&did={valid}422 Unprocessable
referer не строкаPOST /push?event=remove_from_cart&items[][id]=123&referer[]=42&shop_id={valid}&did={valid}422 Unprocessable
Пустой segmentPOST /push?event=remove_from_cart&items[][id]=123&segment=&shop_id={valid}&did={valid}422 Unprocessable
Некорректный segment (не 'A' или 'B')POST /push?event=remove_from_cart&items[][id]=123&segment=C&shop_id={valid}&did={valid}422 Unprocessable
Пустой recommended_byPOST /push?event=remove_from_cart&items[][id]=123&recommended_by=&shop_id={valid}&did={valid}422 Unprocessable
Некорректный recommended_byPOST /push?event=remove_from_cart&items[][id]=123&recommended_by=INVALID&shop_id={valid}&did={valid}422 Unprocessable
recommended_by не строка (массив)POST /push?event=remove_from_cart&items[][id]=123&recommended_by[]=dynamic&shop_id={valid}&did={valid}422 Unprocessable
Пустой recommended_codePOST /push?event=remove_from_cart&items[][id]=123&recommended_code=&shop_id={valid}&did={valid}422 Unprocessable
recommended_code не строкаPOST /push?event=remove_from_cart&items[][id]=123&recommended_code[]=42&shop_id={valid}&did={valid}422 Unprocessable
Пустой source (строка)POST /push?event=remove_from_cart&items[][id]=123&source=&shop_id={valid}&did={valid}422 Unprocessable
Некорректный source (не JSON)POST /push?event=remove_from_cart&items[][id]=123&source=not-json&shop_id={valid}&did={valid}422 Unprocessable
Source Logic
Корректный JSON в source (строка)POST /push (JSON: {"event": "remove_from_cart", "source": "{\"code\": \"abc\", \"from\": \"dynamic\"}", ...})200 OK (recommended_by=dynamic, recommended_code=abc)
Корректный объект в sourcePOST /push (JSON: {"event": "remove_from_cart", "source": {"code": "abc", "from": "dynamic"}, ...})200 OK (recommended_by=dynamic, recommended_code=abc)
Некорректный source.fromPOST /push (JSON: {"source": "{\"code\": \"abc\", \"from\": \"example\"}"})200 OK (source игнорируется, поля null)
Отсутствует source.from в JSONPOST /push (JSON: {"source": "{\"code\": \"abc\"}"})200 OK (source игнорируется, поля null)
Отсутствует source.code в JSONPOST /push (JSON: {"source": "{\"from\": \"dynamic\"}"})200 OK (source игнорируется, поля null)
Item Amount/Quantity Logic
items.amount: -1 (ниже минимума)POST /push (JSON: {"items": [{"id": "x", "amount": -1}], ...})200 OK (amount становится 1)
items.amount: 1001 (выше максимума)POST /push (JSON: {"items": [{"id": "x", "amount": 1001}], ...})200 OK (amount становится 1000)
items.quantity: -1 (синоним amount)POST /push (JSON: {"items": [{"id": "x", "quantity": -1}], ...})200 OK (amount становится 1)
Item Price Logic
items.price: -1 (отрицательное число)POST /push (JSON: {"items": [{"id": "x", "price": -1}], ...})200 OK (поле price отсутствует)
items.price: -0.1 (отрицательный float)POST /push (JSON: {"items": [{"id": "x", "price": -0.1}], ...})200 OK (поле price отсутствует)
items.price: '-666' (отрицательная строка)POST /push (JSON: {"items": [{"id": "x", "price": "-666"}], ...})200 OK (поле price отсутствует)
items.price: 'asdasd' (не число)POST /push (JSON: {"items": [{"id": "x", "price": "asdasd"}], ...})200 OK (поле price отсутствует)
Item Other Fields Logic
items.line_id: '' (пустая строка)POST /push (JSON: {"items": [{"id": "x", "line_id": ""}], ...})200 OK (поле line_id отсутствует)
items.fashion_size: '' (пустая строка)POST /push (JSON: {"items": [{"id": "x", "fashion_size": ""}], ...})200 OK (поле fashion_size отсутствует)
Пустой items.idPOST /push (JSON: {"items": [{"id": ""}, {"id": "valid"}], ...})200 OK (пустой ID фильтруется)
Слишком длинный items.idPOST /push (JSON: {"items": [{"id": "aaaa...(>255 chars)"}, ...]})200 OK (длинный ID фильтруется)
Successful Tracking
Трекинг удаления одного товараPOST /push?event=remove_from_cart&stream=test&items[][id]=123&shop_id={valid}&did={valid}200 OK
Трекинг удаления нескольких товаровPOST /push (JSON: {"event": "remove_from_cart", "items": [{"id": "first", "amount": 42}, {"id": "second", "amount": 23}], ...})200 OK
Трекинг со всеми опциональными параметрамиPOST /push (JSON: {"event": "remove_from_cart", "stream": "test", "sid": "test-session-id", "segment": "A", "referer": "https://example.com", "recommended_by": "dynamic", "recommended_code": "abc123", ...})200 OK