Przejdź do treści

Oferty i Listingi

Wystawianie produktów na 7 platformach z poziomu jednego widoku. Źródłem produktów jest BaseLinker (TAGI rodzin), publikacja idzie przez API każdej platformy.

Co zostało dostarczone

  • 7 platform: Allegro, eBay, Amazon, Erli, Joom, Temu, WooCommerce.
  • Pobieranie katalogu z BaseLinker — pełny katalog (~2 100 produktów) z tagami rodzin.
  • Grupowanie wariantów (TASK-115, TASK-130) — produkty w jednej rodzinie wystawiane razem na platformach które wspierają warianty (Allegro, Amazon, Erli, WooCommerce, Temu).
  • Uniwersalny moduł cenowy (TASK-123) — wybór price_id z Baselinker + mnożnik per-konto + historia.
  • Snapshot/cache (TASK-131) — zapamiętany stan ofert per platforma, odświeżany na żądanie i schedulerem.
  • Per-row "Refresh now" + scheduled background pull (TASK-132).
  • Auto-retry przy PARAMETER_MISMATCH dla Allegro (TASK-220).
  • Allegro: per-account afterSalesServices + cenniki wysyłki indeksowane kartonami (TASK-224).

Jak korzystać

  1. Otwórz OFERTY w bocznym menu.
  2. Wybierz platformę (zakładka u góry).
  3. Wybierz tag rodziny (lewa kolumna).
  4. W widoku zobaczysz: ile ofert w rodzinie, ile wystawionych, ile niewystawionych.
  5. Kliknij Wystaw przy konkretnej rodzinie aby uruchomić scenariusz wystawienia.

Scenariusz publikacji oblicza cenę według reguły konta, dobiera atrybuty platformy i wysyła ofertę. Postęp i błędy widoczne w /logs.

Znane ograniczenia i naprawy w toku

Zgłoszenie #8 — Reguła (cennik1 + cennik2) × współczynnik

Status: 🟢 W realizacji (TASK-269).

Aktualnie reguła obsługuje pojedynczy price_id × mnożnik. Wymóg: (price_id_1 + price_id_2) × mnożnik — by oddzielić koszt produktu i koszt wysyłki kartonu (różne wysyłki na różnych platformach). Implementacja w finałowym sprincie, na każdym koncie każdej platformy.

Zgłoszenie #19 — Baselinker 80 % / Subiekt 30 %

Status:

  • Baselinker: ✅ pełna integracja zrealizowana — pobieranie katalogu, synchronizacja TAG-ami rodzin, wystawianie z dashboardu, snapshot/cache. Dotyczy wszystkich 7 platform.
  • Subiekt: 🟢 dostarczone w obecnej wersji — Posejdon (.NET 8, Sfera SDK) synchronizuje rozchody Subiekta do BaseLinker (extra fields + CSV przez IIS). Działa na serwerze Windows właściciela; kod źródłowy w aio/posejdon na Forgejo. Pełen opis i granica wsparcia: Sklepy — Posejdon. Rewrite pod Subiekt Nexo Pro v57+ pozostaje odroczony zgodnie z ofertą (str. 4), do migracji właściciela na nowy framework Nexo Pro.

Zgłoszenie #20 — Amazon

Status: 🟠 Częściowe.

Zrealizowane:

  • Amazon SP-API — autoryzacja, pobieranie ofert, wystawianie produktów (TASK-080, TASK-249).
  • Amazon.PL — w pełni podłączony i przetestowany.

Poza zakresem pierwotnej oferty:

  • Każdy rynek Amazon (DE, FR, IT, ES, UK, NL, …) wymaga osobnego konta sprzedawcy po stronie Amazona — to nie jest decyzja techniczna, lecz polityka platformy.
  • Aktualnie podpięte konto Amazon obsługuje rynek polski. Dodanie kolejnych rynków wymaga: a) założenia konta sprzedawcy w danym kraju, b) nowej autoryzacji OAuth w panelu, c) konfiguracji per-rynek (waluta, podatek, polityki wysyłki).

To samo dotyczy otrzymywania wiadomości z platformy Amazon — wsparcie jest, ale per-rynek osobno.

Zgłoszenie #28 — Widoczność wystawionych produktów

Status: 🟢 W realizacji (TASK-270).

Aktualny przepływ wymaga kolejności: platforma → rodzina → widok ofert. Zmiana: dodanie filtra "Wszystkie produkty" (jako pseudo-rodzina) który wyświetla wszystkie wystawione na danej platformie produkty bez konieczności wyboru rodziny. Odfiltrowane zostaną produkty bez TAG-u rodziny (ok. 602 starych rekordów BL = śmieci). Filtr trafi też do Katalogu produktów.

Architektura (techniczna)

  • Pobieranie BL: windmill/f/baselinker/sync_by_tag.ts
  • Listowanie per-platforma: windmill/f/<mp>/list_all_products.flow/
  • Snapshot ofert: tabela marketplace_offers (Convex)
  • Pricing: dashboard/src/lib/marketplace/pricing.ts + convex/lib/prices.ts
  • Schedulery odświeżania: per-konto cron w Windmill

Pełna dokumentacja techniczna: windmill/ARCHITECTURE.md (rozwijana w ramach TASK-262.22).