Promocje - integracja z systemami zewnętrznymi
Artykuł opisuje, jak system zewnętrzny (sklep internetowy, aplikacja, ERP) pobiera promocje klienta z AMPER i jak należy je interpretować.
Skąd pobrać promocje
GET https://{amper_ws_url}/external/v1/promotions/?api_key={amper_api_key}
Uwierzytelnienie, paginacja (limit, offset) i limity zapytań działają tak samo jak w całym API zewnętrznym. Promocje mają rozbudowaną strukturę, więc pobieraj je stronami (np. limit=50) i nie wysyłaj więcej niż 3 zapytań jednocześnie.
Lista zawiera tylko promocje, które jednocześnie:
- trwają w chwili zapytania (data
startjuż minęła,endjeszcze nie) i są włączone, - są przeznaczone dla B2B,
- obejmują klienta przypisanego do klucza API – bezpośrednio albo przez kategorię klienta (i nie wykluczają go),
- mają co najmniej jedną nagrodę typu stała cena.
Ważne: API zwraca wyłącznie nagrody typu stała cena (cena promocyjna produktu). Gratisy, upusty procentowe i kwotowe – również na cały koszyk – nie są udostępniane przez to API. Jeśli promocja ma także takie nagrody, w odpowiedzi zobaczysz tylko jej nagrody ze stałą ceną.
1. Struktura promocji
Każdy element listy to jedna promocja:
{
"id": 22960679,
"name": "Promocja na paletę",
"description": "",
"start": "2025-10-23T00:00:00+02:00",
"end": "2028-10-20T23:59:00+02:00",
"short_code": "promocja-na-palete",
"default_image": { "image": "https://.../promo.jpg", "alt": "Promocja na paletę" },
"keep_bundle_multiplayer_same": false,
"use_promotion_price_for_threshold": false,
"calculate_using_cumulative_units": true,
"multiply_reward": 0,
"color_in_cart": null,
"start_using_default_price": false,
"is_active": true,
"conditions": [ ... ]
}
| Pole | Typ | Opis |
|---|---|---|
id |
int | ID promocji |
name |
string | nazwa promocji (nazwa handlowa, jeśli jest ustawiona) |
description |
string | opis (może być pusty) |
start, end |
datetime | okres obowiązywania |
short_code |
string | kod promocji |
default_image |
object | grafika promocji (image, alt); gdy promocja nie ma grafiki – obrazek domyślny |
keep_bundle_multiplayer_same |
bool | w promocjach pakietowych: czy elementy pakietu muszą być kupione w tej samej wielokrotności |
use_promotion_price_for_threshold |
bool | próg wartościowy liczony według ceny promocyjnej zamiast ceny klienta |
calculate_using_cumulative_units |
bool | próg ilościowy wyrażony w jednostkach zbiorczych (np. kartonach) zamiast podstawowych |
multiply_reward |
int | limit wielokrotności nagrody – patrz punkt 4.3 |
color_in_cart |
string / null | kolor wyróżnienia produktów promocji w koszyku |
start_using_default_price |
bool | rabat liczony od ceny katalogowej zamiast od ceny klienta |
is_active |
bool | czy promocja jest aktywna – lista zawiera tylko trwające promocje, więc w praktyce zawsze true |
conditions |
array / null | warunki promocji; null, gdy promocja nie ma warunków |
2. Warunki (conditions)
Każdy warunek opisuje próg, który trzeba osiągnąć, i nagrody, które wtedy obowiązują:
{
"threshold_min": 10.0,
"threshold_max": 0.0,
"measure": "quantity",
"rewards": [ ... ]
}
| Pole | Typ | Opis |
|---|---|---|
threshold_min |
liczba | minimalny próg |
threshold_max |
liczba | maksymalny próg; 0 oznacza brak górnej granicy |
measure |
string | quantity – próg ilościowy (sztuki); value – każdy inny rodzaj progu, w tym próg wartościowy (kwota) |
rewards |
array / null | nagrody obowiązujące po osiągnięciu progu; null, gdy żaden produkt nagrody nie jest dostępny dla klienta |
Warunki są zwracane w stałej kolejności. Kilka warunków może mieć tę samą listę nagród – należą wtedy do jednej reguły promocji. Progi cenowe (np. inna cena od 10 i od 50 sztuk) to osobne warunki z różnymi nagrodami.
measurerozróżnia tylko próg ilościowy. Progi wielokrotności, „mix wymagany” i próg liczby różnych indeksów (SKU) również są zwracane jakovalue.
3. Nagrody (rewards)
Każda nagroda to cena promocyjna jednego produktu:
{
"given_price": 8.0,
"reward_value": 0.0,
"value_type": "3",
"quantity": 0.0,
"product": {
"id": 817,
"ean": "5901234123457",
"name": "BATERIA ENERGIZER...",
"short_code": "426684-CC",
"default_unit_of_measure": "bl.",
"cumulative_unit_of_measure": "karton",
"cumulative_converter": "24.00",
"can_be_split": true,
"cumulative_unit_ratio_splitter": "24.00",
"unit_roundup": false
}
}
| Pole | Typ | Opis |
|---|---|---|
given_price |
liczba | cena promocyjna netto produktu |
reward_value |
liczba | wartość rabatu – dla nagrody ze stałą ceną zwykle 0 |
value_type |
string | kod rodzaju wartości (patrz tabela niżej) |
quantity |
liczba | ilość nagrody – dla nagrody ze stałą ceną zwykle 0 |
product |
object | produkt objęty ceną promocyjną |
Kody value_type:
| Kod | Znaczenie |
|---|---|
1 |
wartość |
2 |
ilość |
3 |
stała cena |
4 |
ilościowy próg wielokrotności |
5 |
mix wymagany |
6 |
kwotowy próg wielokrotności |
7 |
SKU (liczba unikalnych indeksów) |
Pola produktu w nagrodzie:
| Pole | Typ | Opis |
|---|---|---|
id |
int | ID produktu w AMPER |
ean |
string | kod EAN |
name |
string | nazwa |
short_code |
string | kod produktu |
default_unit_of_measure |
string | jednostka podstawowa |
cumulative_unit_of_measure |
string | jednostka zbiorcza |
cumulative_converter |
string (liczba dziesiętna) | liczba jednostek podstawowych w jednostce zbiorczej |
can_be_split |
bool | czy jednostkę zbiorczą można dzielić |
cumulative_unit_ratio_splitter |
string (liczba dziesiętna) | na ile części można podzielić jednostkę zbiorczą |
unit_roundup |
bool | czy ilość jest zaokrąglana w górę do kroku jednostki |
4. Logika promocji
4.1 Rodzaj progu
quantity– liczy się ilość produktów objętych warunkiem.value– liczy się wartość produktów objętych warunkiem (domyślnie według ceny klienta; według ceny promocyjnej, gdyuse_promotion_price_for_threshold=true).
4.2 Jednostki zbiorcze
Gdy calculate_using_cumulative_units = true, próg ilościowy jest liczony w jednostkach zbiorczych produktu (cumulative_unit_of_measure, przelicznik cumulative_converter), a nie w jednostkach podstawowych.
4.3 Wielokrotność nagrody
Gdy klient osiąga próg kilka razy (np. próg 10 szt., w koszyku 30 szt.), nagroda może zostać zwielokrotniona. multiply_reward ogranicza tę wielokrotność:
0– bez limitu (próg osiągnięty 3 razy = nagroda 3 razy),Nwiększe od zera – najwyżejNrazy (dlamultiply_reward=1i 30 szt. nagroda zostanie przyznana raz).
4.4 Typowe przypadki
Stała cena przy minimalnej ilości – np. „5 zł za sztukę przy zakupie min. 10 szt.”: warunek z measure = quantity, threshold_min = 10, nagroda z given_price = 5.00.
Progi cenowe – kilka warunków dla tego samego produktu z rosnącym threshold_min i coraz niższą given_price.
5. Schemat struktury
Promocja
├── conditions [Warunek]
│ ├── threshold_min
│ ├── threshold_max
│ ├── measure (quantity / value)
│ └── rewards [Nagroda]
│ ├── given_price
│ ├── reward_value
│ ├── value_type
│ ├── quantity
│ └── product (Produkt)
└── pozostałe pola promocji
6. Wyliczanie cen po stronie systemu zewnętrznego
Pełna logika promocji AMPER (pakiety, wielokrotności, łączenie promocji, kolejność ich stosowania) jest rozbudowana i nie zalecamy odtwarzania jej po stronie systemu zewnętrznego. Dane z tego API nadają się do prezentacji – np. oznaczenia produktów w promocji i pokazania ceny promocyjnej od określonej ilości.
Aby poznać ostateczne ceny dla konkretnego koszyka, wyślij go do AMPER w trybie symulacji:
POST /create-order
{ "customer_id": 42, "playground": true, "lines": [ ... ] }
AMPER zwróci dla każdej linii zastosowaną promocję i cenę, nie tworząc zamówienia. Szczegóły: Tworzenie zamówienia „create-order”.
7. Prezentacja w sklepie (koszyk)
System zewnętrzny powinien:
- wyróżnić produkty w promocji (kolor
color_in_cart, jeśli jest ustawiony), - pokazać cenę promocyjną
given_pricei próg, od którego obowiązuje (threshold_min), - pokazać nazwę i opis promocji (
name,description) oraz jej grafikę (default_image), - przy finalizacji zamówienia polegać na cenach wyliczonych przez AMPER (
create-order).
No comments to display
No comments to display