Przejdź do głównej zawartości

Feed zamówień

Feed zamówień umożliwia merchantowi przesyłanie danych zamówień do silnika rekomendacji OpenApp. Dla każdego zamówienia feed zawiera zakupiony koszyk - id produktu, ean, ilości i ceny - oraz identyfikator użytkownika, który je złożył.

informacja

Zamówienia złożone przez checkout OpenApp są automatycznie przekazywane do silnika rekomendacji. Wysyłanie ich również przez ten feed jest zbędne - ponowne wysłanie orderId zastępuje zapisane zamówienie, więc nie powoduje żadnych szkód, ale nie przynosi też żadnych korzyści. Feed służy do zamówień z innych kanałów sprzedaży (własny checkout w sklepie internetowym, aplikacja mobilna, sklepy stacjonarne).

informacja

Po początkowym pobraniu katalogu OpenApp potrzebuje czasu na przetworzenie danych, zanim pobieranie zamówień i rekomendacji stanie się dostępne. Do zakończenia przetwarzania endpoint odpowiada 409 RecommendationsNotReadyException. Przed rozpoczęciem uzupełniania danych należy poczekać na potwierdzenie od OpenApp.

Ten sam endpoint obsługuje dwa wzorce użycia:

  • Początkowe uzupełnienie danych: po aktywacji prześlij historię zamówień w batchach (zalecamy co najmniej ostatnie 12 miesięcy), aby zapewnić silnikowi punkt startowy. Nie uwzględniaj anulowanych zamówień w początkowym uzupełnieniu - przesyłaj anulowania wyłącznie dla zamówień, które zostały wcześniej przekazane do feedu.
  • Bieżący feed: przesyłaj nowe zamówienia w miarę ich składania, pojedynczo lub w periodycznych batchach (np. co godzinę).

Żądanie

Zamówienia są przesyłane żądaniem POST do następującego endpointu:

POST {{OpenAppUrl}}/merchant/v1/recommendations/orders

Pojedyncze żądanie może zawierać co najwyżej 100 zamówień.

{
"orders": [
{
"orderId": "WS1213ASDZXC231A",
"loggedUser": "user-id-from-webshop",
"createdAt": "2026-06-09T17:23:00.000Z",
"channel": "WEB",
"currency": "PLN",
"products": [
{
"id": "id123-red",
"ean": "5901234123457",
"quantity": 2,
"unitPrice": 6000,
"linePrice": 12000
},
{
"id": "id124",
"ean": "5901234123464",
"quantity": 1,
"unitPrice": 6000,
"linePrice": 6000
}
]
},
{
"orderId": "WS1213ASDZXC231B",
"loggedUser": "user-id-from-webshop",
"status": "CANCELLED",
"createdAt": "2026-06-09T18:05:00.000Z",
"channel": "IN_STORE",
"currency": "PLN",
"products": [
{
"id": "id124",
"ean": "5901234123464",
"quantity": 3,
"unitPrice": 5500,
"linePrice": 16500
}
]
}
]
}

Wartość loggedUser to własny, stabilny identyfikator użytkownika merchanta - OpenApp nie próbuje powiązać go z żadnym kontem OpenApp. Każde zamówienie musi identyfikować użytkownika, który je złożył.

id produktu musi odpowiadać id wariantu z katalogu. Produkty jeszcze nieznane z katalogu są ignorowane i zwracane w ignoredProducts - samo zamówienie jest mimo to przyjmowane. Ponieważ ponowne wysłanie orderId zastępuje zapisane zamówienie, merchant może ponownie przesłać wcześniej odrzucone lub częściowo zignorowane zamówienie po następnej synchronizacji katalogu, aby uzupełnić brakujące produkty.

Status zamówienia i anulowania

Opcjonalne pole status domyślnie przyjmuje wartość CREATED. Gdy użytkownik anuluje zamówienie, które zostało już wysłane do feedu, należy ponownie je przesłać z status: CANCELLED - OpenApp usunie je z silnika rekomendacji. Ponieważ przyjmowanie zamówień jest operacją upsert na orderId, anulowanie jest stosowane przez zastąpienie zamówienia jego odpowiednikiem z anulacją.

Odpowiedź

Zamówienia są przyjmowane niezależnie: problem z jednym zamówieniem nie wpływa na pozostałe w batchu. OpenApp odpowiada 200 OK zawierającym liczbę accepted zamówień, listę rejected dla zamówień, które nie przeszły walidacji, oraz listę ignoredProducts dla produktów nieznanych w katalogu.

{
"accepted": 99,
"rejected": [
{
"orderId": "WS1213ASDZXC231F",
"error": "VALIDATION_FAILED",
"message": "createdAt is missing"
}
],
"ignoredProducts": [
{
"orderId": "WS1213ASDZXC231A",
"productIds": [
"id999"
]
}
]
}

Całe żądanie kończy się niepowodzeniem tylko wtedy, gdy samo żądanie jest nieprawidłowe lub zbyt duże - patrz błędy poniżej.

Błędy

Nazwa błęduKod
OrderValidationException400
TooManyOrdersException413
RecommendationsNotReadyException409