allegro / allegro-api

Issue tracker and wiki for Allegro REST API
https://developer.allegro.pl/
217 stars 39 forks source link

[NEWS] Produktyzacja - powiąż ofertę z produktem #1377

Open KrzysztofLukanowski opened 5 years ago

KrzysztofLukanowski commented 5 years ago

Od dziś możesz wskazać produkt w ofercie, dzięki temu zgrupujemy ją z pozostałymi ofertami z danym produktem. To nowa opcja, którą wprowadzamy od początku 2019 roku, na razie w wybranych kategoriach. Jej zasięg planujemy stopniowo rozszerzać, a dzięki niej klient łatwiej znajdzie oferty, które spełniają jego oczekiwania.

Udostępniliśmy nowe zasoby w wersji beta i przygotowaliśmy poradnik, w którym znajdziesz szczegółowe informacje o tym, jak powiązać ofertę z produktem.

rtnet-pl commented 5 years ago

Bardzo brakuje, aby GET /sale/offers/{offerId} oprócz ID produktu zwracał też jego nazwę, pozwoliłoby to na zaprezentowanie użytkownikowi w miarę wiarygodnej informacji o tym czy podpiął sobie właściwy produkt

rtnet-pl commented 5 years ago

A czy jest szansa, że dorzucicie taką funkcjonalność jak jest w WWW, czyli podpowiadanie produktu na podstawie nazwy i kategorii w której się znajduje? https://edge.allegro.pl.allegrosandbox.pl/product-facade/suggest?name=PULA%20MARZE%C5%83%20Trigiani&categoryId=91926&seller.id=43950914

KrzysztofLukanowski commented 5 years ago

Dziękuję za opinie i sugestie, przekazałem Twój głos do zespołu developerskiego. Jak będę miał więcej informacji, dam znać.

rtnet-pl commented 5 years ago

Jedziemy dalej, w dokumentacji GET /sale/products zwraca m in. eany produktów pasujących do eanu którego szukamy https://developer.allegro.pl/documentation/#operation/getSaleProducts (pola ean i eans) natomiast w API tych informacji nie ma, a jest niezbędna do przypięcia produktu do oferty.

HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
Pragma: no-cache
X-Frame-Options: DENY
Trace-Id: b69aaf0e4ef1a91d
Date: Thu, 21 Mar 2019 21:12:39 GMT
Connection: close
X-Content-Type-Options: nosniff
Content-Type: application/vnd.allegro.beta.v1+json;charset=UTF-8
Content-Length: 1894

{"products":[{"id":"5272069b-0759-4283-8ba7-7f05b416f1d9","name":"Smartfon Apple iPhone 6S srebrny 128 GB","category":{"id":"253002"},"parameters":[{"id":"224017","name":"Kod producenta","valueLabels":["MKQU2PM/A"],"values":["MKQU2PM/A"],"options":{"identifiesProduct":true}},{"id":"127448","name":"Kolor","valueLabels":["srebrny"],"valuesIds":["127448_8"],"options":{"identifiesProduct":true}},{"id":"202869","name":"Wbudowana pamięć","valueLabels":["128 GB"],"valuesIds":["202869_214189"],"options":{"identifiesProduct":true}},{"id":"202865","name":"Pamięć RAM","valueLabels":["2 GB"],"valuesIds":["202865_214129"],"options":{"identifiesProduct":true}},{"id":"202821","name":"Opcje SIM","valueLabels":["Single SIM"],"valuesIds":["202821_213913"],"options":{"identifiesProduct":true}}],"images":[{"url":"https://a.allegroimg.com/original/00e0c9/1d7c95614fd6a7c713b075d0251a/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://0.allegroimg.com/original/00bfe0/a2e7acb6453896a18c0830f0e7f0/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://7.allegroimg.com/original/00d092/6e25f2604057a62f810bf3835597/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://4.allegroimg.com/original/005535/b073af024f67a1e5bf0991dd5f84/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://1.allegroimg.com/original/00f83c/94168c944c0ab19d5cf47b2bebc1/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://3.allegroimg.com/original/0013c4/cc4b37da4ee2a4dba948dd89f3c3/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://6.allegroimg.com/original/00da5a/f2bd0b8d4811ac592aa1142f7126/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://b.allegroimg.com/original/002550/bd448bd94aa9aedde7f7d4b49aeb/Smartfon-Apple-iPhone-6S-srebrny-128-GB"},{"url":"https://e.allegroimg.com/original/00d857/3f4775404823aea1bc6a997668ae/Smartfon-Apple-iPhone-6S-srebrny-128-GB"}]}],"count":1}
KrzysztofLukanowski commented 5 years ago
  1. Co do pierwszej sugestii, na razie nie planujemy zwracać nazwy produktu, ale możesz spróbować odpytać endpoint produktowy dla danego product-id.
  2. Planujemy podpowiadać produkt, możliwe, że w ciagu kilku najbliższych tygodni wprowadzimy taką możliwość.
  3. Jak odpytujesz o konkretny product-d, np. https://api.allegro.pl/sale/products/5272069b-0759-4283-8ba7-7f05b416f1d9 to na końcu response znajdziesz listę eans.
rtnet-pl commented 5 years ago

Proszę o wskazówkę w jaki sposób powinniśmy przypiąć parametry do oferty. Wg dokumentacji powinniśmy zastąpić istniejące w ofercie parametry parametrami z produktu. Z tym, że jeśli tak postępujemy, otrzymujemy czasem błąd o brakującym parametrze który jest wymagany. Np. tu.:

pobieramy produkt

HTTP/1.1 200 OK
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
Pragma: no-cache
X-Frame-Options: DENY
Trace-Id: 6f6ee226d32e0d2c
Date: Mon, 25 Mar 2019 09:57:59 GMT
Connection: close
X-Content-Type-Options: nosniff
Content-Type: application/vnd.allegro.beta.v1+json;charset=UTF-8
Content-Length: 798

{"products":[{"id":"544f59a7-9baf-42ae-a41a-d30ee8450886","name":"Nie śpiewaj przy stole Adriana Trigiani","category":{"id":"91880"},"parameters":[{"id":"223545","name":"Tytuł","valueLabels":["Nie śpiewaj przy stole"],"values":["Nie śpiewaj przy stole"],"options":{"identifiesProduct":true}},{"id":"223489","name":"Autor","valueLabels":["Adriana Trigiani"],"values":["Adriana Trigiani"],"options":{"identifiesProduct":true}},{"id":"75","name":"Okładka","valueLabels":["miękka"],"valuesIds":["75_1"],"options":{"identifiesProduct":true}},{"id":"74","name":"Rok wydania","valueLabels":["2011"],"values":["2011"],"options":{"identifiesProduct":true}}],"images":[{"url":"https://e.allegroimg.com/original/00bc7b/a5bdfb3a453dbd82b58c26b4126e/Nie-spiewaj-przy-stole-Adriana-Trigiani"}]}],"count":1}

aktualizujemy ofertę

PUT https://allegroapi.io/sale/offers/7929263879 HTTP/1.1
Accept: application/vnd.allegro.public.v1+json
Content-Type: application/vnd.allegro.public.v1+json
Authorization: Bearer xxxxx
Api-Key: xxxxxx
Host: allegroapi.io
Content-Length: 1754
Expect: 100-continue
Connection: Close

{"additionalServices":null,"afterSalesServices":{"impliedWarranty":{"id":"6057f6b5-2419-49f9-88fc-8dc48202fac5"},"returnPolicy":{"id":"6bfaa3c2-651d-47f7-9950-0544efafb342"},"warranty":null},"category":{"id":"91880"},"compatibilityList":null,"contact":null,"createdAt":"2019-03-25T09:52:44Z","delivery":{"additionalInfo":"","handlingTime":"PT24H","shipmentDate":null,"shippingRates":null},"description":{"sections":[{"items":[{"type":"TEXT","content":"<p>test</p>"}]}]},"ean":"9788376487632","external":null,"id":"7929263879","images":[],"location":{"city":"Tarnowo Podgórne","countryCode":"PL","postCode":"62-080","province":"WIELKOPOLSKIE"},"name":"test 123 456","parameters":[{"id":"223545","rangeValue":null,"values":["Nie śpiewaj przy stole"],"valuesIds":null,"name":"Tytuł","valueLabels":["Nie śpiewaj przy stole"]},{"id":"223489","rangeValue":null,"values":["Adriana Trigiani"],"valuesIds":null,"name":"Autor","valueLabels":["Adriana Trigiani"]},{"id":"75","rangeValue":null,"values":null,"valuesIds":["75_1"],"name":"Okładka","valueLabels":["miękka"]},{"id":"74","rangeValue":null,"values":["2011"],"valuesIds":null,"name":"Rok wydania","valueLabels":["2011"]}],"payments":{"invoice":"NO_INVOICE"},"product":null,"promotion":{"bold":false,"departmentPage":false,"emphasized":false,"emphasizedHighlightBoldPackage":false,"highlight":false},"publication":{"duration":"PT240H","endingAt":"2019-04-04T08:55:20Z","startingAt":null,"status":"ACTIVE","endedBy":null},"sellingMode":{"format":"BUY_NOW","minimalPrice":null,"price":{"amount":"1","currency":"PLN"},"startingPrice":null},"sizeTable":null,"stock":{"available":666,"unit":"UNIT"},"updatedAt":"2019-03-25T09:56:05.942Z","validation":{"errors":[],"validatedAt":"2019-03-25T09:55:20.415Z"}}

dostajemy 422

HTTP/1.1 422 Unprocessable Entity
Expires: 0
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
X-XSS-Protection: 1; mode=block
Pragma: no-cache
X-Frame-Options: DENY
Trace-Id: 683fc4116a09c27b
Date: Mon, 25 Mar 2019 09:58:06 GMT
Connection: close
X-RateLimit-Remaining: 8917
X-Content-Type-Options: nosniff
Content-Type: application/json
X-RateLimit-Limit: 9000
Content-Length: 161

{"errors":[{"code":"VALIDATION_ERROR","message":"Missing required parameters: Stan.","details":"","path":"","userMessage":"Missing required parameters: Stan."}]}
KrzysztofLukanowski commented 5 years ago

Parametr "Stan" w większości kategorii jest parametrem obowiązkowym, nie jest on przypisany do produktu, określa go użytkownik - to parametr ofertowy.

rtnet-pl commented 5 years ago

OK, rozumiem. A czy są jakieś inne parametry, które mogą zachować się jak powyżej? Jak je rozpoznać, czy parametr "Stan" zawsze ma nazwę "Stan"?

KrzysztofLukanowski commented 5 years ago

Tak jak napisałem, "Stan" w większości kategorii jest parametrem ofertowym, który jest obowiązkowy. Inne parametry obowiązkowe to parametry produktowe. W naszej bazie produktów nie mamy kompletnych informacji o produkcie, dlatego może się zdarzyć, że parametry uzyskane za pomocą w/w zasobu nie wyczerpują w 100% informacji o produkcie. Wówczas warto rozszerzyć informacje o produkcie w parametrach nieobowiązkowych.

rtnet-pl commented 5 years ago

Dzięki. Dokumentacja sugeruje, że parametry oferty należy zamienić z tymi z produktu, a nie merge'ować. Jest jeszcze jeden problem projektowy - produktu nie można przypiąć, jeśli wiąże się to ze zmianą kategorii, a w ofercie są już jakieś zakupy. Tylko że w /sale/offers brakuje informacji o tym czy był w niej jakiś zakup.

pgasidlo commented 5 years ago

Przydałoby się, aby odpowiedź na zapytanie GET /sale/offers (czyli moich aukcji) zawierała też informację do jakiego produktu jest ona przypisana. Teraz pozostaje mi dla każdej aukcji wywoływanie GET /sale/offers/{offerId} aby się tego dowiedzieć.

pgasidlo commented 5 years ago

Allegro aktualnie przypisało istniejące aukcje do produktów w sposób automatyczny. Widzę, że są przypadki aukcji, dla których podczas ich edycji (na stronie Allegro) pojawia się informacja, aby zmienić niektóre parametry aby były zgodne z przypisanym do nich produktem (okienko modalne). Czy Allegro nie może tego robić samo? Ew. czy są plany aby robiło to samo tj. jak ja wystawię aukcję i świadomie przypisze ją do produktu? Czy teraz jest okres przejściowy, i Allegro boi się że źle poprawi i w przypadku problemów z kupujących będzie ponosiło część winy?

pgasidlo commented 5 years ago

Odpytania o informacje o produkt (po UUID, tj. GET /sale/products/{productId}) są bardzo wolne. Zamierzacie je przyspieszyć? Teraz to trwa jakieś 5 sekund, a wydaje się, że po kluczu powinno być natychmiastowe.

pgasidlo commented 5 years ago

Czy planujecie publikować listę produktów, które zmieniły parametry (np. wylistuj listę produktów, które zmieniły się w ostatnich 7 dniach)? Co w przypadku, gdyby okazało się, że przypisany do produktu EAN był błędny i został usunięty? Czy wtedy moja aukcja straci przypisanie do produktu? Czy będę o tym wiedział? Przyznam, że mam bardzo dużo aukcji i raczej nie widzę możliwości aby to śledzić ręcznie.

Co w takim przypadku:

Czy Allegro też zmieni kategorię mojej aukcji? Czy odepnie moją aukcję od produktu?

KrzysztofLukanowski commented 5 years ago

@rtnet-pl Na tę chwilę, jedynym rozwiązaniem jest zamknięcie oferty i wystawienie nowej z prawidłowym produktem. Nie wykluczamy wprowadzenia rozwiązania, w którym zaadresujemy ten problem. Sprawdzimy ile jest tego typu przypadków.

@pgasidlo W swoich postach często piszesz o grupie produktów, liście grup. Co masz przez to na myśli? Kategorie? Podaj proszę konkretny przykład.

pgasidlo commented 5 years ago

@KrzysztofLukanowski Doprecyzowałem moje pytania. Użyłem nazewnictwa allegro tj. "aukcja" i "produkt". Mam nadzieję, że teraz jest to czytelniejsze.

KrzysztofLukanowski commented 5 years ago

@pgasidlo

Przydałoby się, aby odpowiedź na zapytanie GET /sale/offers (czyli moich aukcji) zawierała też informację do jakiego produktu jest ona przypisana.

Przyjmuję jako sugestię.

[...] Widzę, że są przypadki aukcji, dla których podczas ich edycji (na stronie Allegro) pojawia się informacja, aby zmienić niektóre parametry aby były zgodne z przypisanym do nich produktem (okienko modalne). Czy Allegro nie może tego robić samo?

Nie, nie możemy zmieniać parametrów oferty, jakie ustawił sprzedający.

Odpytania o informacje o produkt (po UUID, tj. GET /sale/products/{productId}) są bardzo wolne.

Zasoby są dostępne jako beta, gdyż cały czas je doskonalimy.

Czy planujecie publikować listę produktów, które zmieniły parametry (np. wylistuj listę produktów, które zmieniły się w ostatnich 7 dniach)?

Przyjmuję jako sugestię.

Co w przypadku, gdyby okazało się, że przypisany do produktu EAN był błędny i został usunięty? Czy wtedy moja aukcja straci przypisanie do produktu?

Oferty łączymy z produktem na podstawie productId, więc w takiej hipotetycznej sytuacji oferta nie straci połączenia z produktem.

wystawiam aukcję przypisaną do produktu w kategorii X (która jest podana w parametrach produktu), aukcja się rozkręca, ma dużą sprzedaż, produkt po pewnym czasie (moderacja po Państwa stronie, zmiana drzewa kategorii) zmienia swoją kategorię na Y

Taka sytuacja nie powinna mieć miejsca, gdyż dane o produkcie, m.in. kategoria, zaciągane są z naszego katalogu produktów.

pgasidlo commented 5 years ago

@KrzysztofLukanowski Odnośnie zmiany kategorii.

Mam aukcję: 7029868558. Sprzedaż wykręcona. Została zakończona przez nas (chwilowy brak towaru). Teraz chcę wznowić. Do aukcji jest przypisany produkt o ID 645d0a0c-7c39-458a-8679-4372b8f994ff. Przy wznawianiu problem - brak parametrów. Chce skorzystać z produktu. Lecz dowiaduje się, że produkt jest w innej kategorii niż moja aukcja i jego identyfikatory parametrów nie pokrywają się z moimi (moja aukcja była wystawiona w innej kategorii). Ustawiam parametry z produktu + kategorię z produktu i dostaję:

"You cannot change category after 12 hours from publication.

Co z tym zrobić?

TomekKaczmarek commented 5 years ago

@pgasidlo Niestety na ten moment nie mamy wypracowanego rozwiązania dla takich przypadków. Analizujemy różne podejścia i w przyszłości będziemy je adresować. Póki co nie walidujemy kategorii w ofercie powiązanej z produktem, więc nie trzeba jej uspójniać.

pgasidlo commented 5 years ago

Jeszcze jedno. Niespójność w odpowiedziach. Jeżeli produktu w waszej bazie po EAN 9788326733376 (tj. https://api.allegro.pl/sale/products?ean=9788326733376), to zwrócone dane (wymagane parametry) różnią się od tych, które zwraca wyszukiwanie po identyfikatorze grupy 748eb8be-90ca-4514-abef-f9f44257112e (tj. https://api.allegro.pl/sale/products/748eb8be-90ca-4514-abef-f9f44257112e`).

W tym przypadku, w wyszukiwaniu po EAN brakuje np. bloku:

object(stdClass)#33 (5) {
      ["id"]=>
      string(6) "223493"
      ["name"]=>
      string(12) "Liczba stron"
      ["valuesLabels"]=>
      array(1) {
        [0]=>
        string(3) "252"
      }
      ["values"]=>
      array(1) {
        [0]=>
        string(3) "252"
      }
      ["options"]=>
      object(stdClass)#34 (1) {
        ["identifiesProduct"]=>
        bool(false)
      }
    }

Nie wiem czy to celowe, ale wydaje mu się, że dodanie tych danych zlikwidowałoby konieczność wykonywania drugiego zapytania do API (pytanie po EAN -> i pytanie po ID aby mieć wszystkie dane).

TomekKaczmarek commented 5 years ago

@pgasidlo zgadza się - tak to działa - wyszukiwarka zwraca wiele danych o produkcie, ale nie wszystkie. Trzeba osobno pobrać szczegóły danego produktu - na razie są to kategoria i parametry, ale w przyszłości tych danych może być więcej, dlatego zdecydowaliśmy się na takie podejście. Taki proces zalecamy też w naszym poradniku.

pgasidlo commented 5 years ago

@KrzysztofLukanowski Ok, to jeszcze jedno pytanie. Czy można dostać przykład (id) produktu, który ma dwa EANy przypisane?

Chce również zgłosić, że podany wyżej produkt, tj. 748eb8be-90ca-4514-abef-f9f44257112e powinien mieć dodany również drugi EAN: 9788326735509 obok tego, co już jest, tj. 9788326733376. Ten nowy EAN pochodzi z dodruku.

TomekKaczmarek commented 5 years ago

@pgasidlo Przykład produktu - 50d155ae-998b-420b-8fa0-1c32c2cf0281. Wkrótce dodamy go również do poradnika.

Na tym etapie nie udostępniamy jeszcze procesu dodawania i uzupełniania produktów. Korzystamy z zewnętrznej bazy danych, pracujemy nad tym by sprzedawcy mogli dodawać nowe produkty i uzupełniać istniejące o dodatkowe dane. Więcej informacji na ten temat już wkrótce.

pgasidlo commented 5 years ago

Aukcja 7897766944. Chcę ją wznowić, jednocześnie przypisując produkt 3ca06c37-4f56-4fa5-bde7-363ca8a4cab2. Zarówno aukcja jak i produkt są w dobrej kategorii, tj. 90844. W produkcie jest parametr Język (id: 2868) ustawiony na polski (wartość: 2868_1). Ten parametr jest dopuszczalny w kategorii. Jednak, gdy go ustawiam dostają błąd walidacji: Parameter (2868) is not expected. Co ciekawe, jak próbuje wznowić aukcję na stronie, to pole Język nie jest wogóle wyświetlane w parametrach aukcji (nie można go wypełnić). Jest za to prezentowane w bloku z wybranym produktem.

To, które przesyłam do PUT sale/offers/7897766944:


  ["id"]=>
  string(10) "7897766944"
  ["name"]=>
  string(44) "Wióry lecą Renowacja mebli i tapicerka dla"
  ["category"]=>
  object(stdClass)#22 (1) {
    ["id"]=>
    string(5) "79168"
  }
  ["product"]=>
  array(1) {
    ["id"]=>
    string(36) "3ca06c37-4f56-4fa5-bde7-363ca8a4cab2"
  }
  ["parameters"]=>
  array(8) {
    [0]=>
    array(4) {
      ["id"]=>
      string(2) "75"
      ["name"]=>
      string(8) "Okładka"
      ["values"]=>
      array(0) {
      }
      ["valuesIds"]=>
      array(1) {
        [0]=>
        string(9) "75_306417"
      }
    }
    [1]=>
    array(3) {
      ["id"]=>
      string(2) "74"
      ["name"]=>
      string(11) "Rok wydania"
      ["values"]=>
      array(1) {
        [0]=>
        string(4) "2019"
      }
    }
    [2]=>
    array(4) {
      ["id"]=>
      string(4) "2868"
      ["name"]=>
      string(6) "Język"
      ["values"]=>
      array(0) {
      }
      ["valuesIds"]=>
      array(1) {
        [0]=>
        string(6) "2868_1"
      }
    }
    [3]=>
    array(3) {
      ["id"]=>
      string(6) "223545"
      ["name"]=>
      string(6) "Tytuł"
      ["values"]=>
      array(1) {
        [0]=>
        string(61) "Wióry lecą Renowacja mebli i tapicerka dla początkujących"
      }
    }
    [4]=>
    array(3) {
      ["id"]=>
      string(6) "223489"
      ["name"]=>
      string(5) "Autor"
      ["values"]=>
      array(1) {
        [0]=>
        string(11) "Kasia Sawko"
      }
    }
    [5]=>
    array(4) {
      ["id"]=>
      string(6) "223541"
      ["name"]=>
      string(11) "Wydawnictwo"
      ["values"]=>
      array(0) {
      }
      ["valuesIds"]=>
      array(1) {
        [0]=>
        string(13) "223541_302977"
      }
    }
    [6]=>
    array(3) {
      ["id"]=>
      string(6) "223493"
      ["name"]=>
      string(12) "Liczba stron"
      ["values"]=>
      array(1) {
        [0]=>
        string(3) "224"
      }
    }
    [7]=>
    array(5) {
      ["id"]=>
      string(5) "11323"
      ["name"]=>
      string(4) "Stan"
      ["values"]=>
      array(0) {
      }
      ["rangeValue"]=>
      NULL
      ["valuesIds"]=>
      array(1) {
        [0]=>
        string(7) "11323_1"
      }
    }
  }
  ["ean"]=>
  string(13) "9788328060722"
  ["description"]=>
  object(stdClass)#48 (1) {
    ["sections"]=>
    array(2) {
      [0]=>
      object(stdClass)#46 (1) {
        ["items"]=>
        array(2) {
          [0]=>
          object(stdClass)#44 (2) {
            ["type"]=>
            string(5) "IMAGE"
            ["url"]=>
            string(69) "https://a.allegroimg.com/original/013d23/8f37d0d14007a2930b64bb67d913"
          }
          [1]=>
          object(stdClass)#45 (2) {
            ["type"]=>
            string(4) "TEXT"
            ["content"]=>
            string(251) "<h1>Wióry lecą Renowacja mebli i tapicerka dla początkujących</h1>
<p>Autor: <b>Sawko Kasia</b></p><p>EAN: <b>9788328060722</b></p><p>Strony: <b>224</b></p><p>Oprawa: <b>Miękka ze sk</b></p><p>Wydawca: <b>Buchmann</b></p><p>SID: <b>862962</b></p>"
          }
        }
      }
      [1]=>
      object(stdClass)#43 (1) {
        ["items"]=>
        array(1) {
          [0]=>
          object(stdClass)#42 (2) {
            ["type"]=>
            string(4) "TEXT"
            ["content"]=>
            string(953) "<h1>Wióry lecą Renowacja mebli i tapicerka dla początkujących</h1>
<p>Wióry lecą. Renowacja mebli i tapicerka dla początkujących to praktyczny poradnik, dzięki któremu nauczymy się podstaw pracy z drewnem. Książka podzielona jest na dwie części. Pierwsza ? teoretyczna wprowadza nas w tajniki sztuki. Dowiemy się z niej o niezbędnych narzędziach, wyborze odpowiedniego mebla do wykonania i poznamy podstawy warsztatu. Druga ? praktyczna to ponad dwadzieścia instrukcji krok po kroku. Wśród przedmiotów poddanych renowacji znajduje się banalnie prosta deska do krojenia, nieco trudniejszy taboret czy wymagający znacznie więcej pracy słynny fotel 366 Chierowskiego. Bohaterami kolejnych instrukcji są członkowie warsztatów stolarskich, które od kilku lat z powodzeniem prowadzi autorka publikacji ? Katarzyna Sawko.
Wióry lecą to świetna lektura dla osób, które chcą zacząć przygodę z drewnem w domowym zaciszu.</p>"
          }
        }
      }
    }
  }
  ["compatibilityList"]=>
  NULL
  ["images"]=>
  array(1) {
    [0]=>
    object(stdClass)#40 (1) {
      ["url"]=>
      string(69) "https://a.allegroimg.com/original/013d23/8f37d0d14007a2930b64bb67d913"
    }
  }
  ["sellingMode"]=>
  array(2) {
    ["format"]=>
    string(7) "BUY_NOW"
    ["price"]=>
    array(2) {
      ["amount"]=>
      float(29.98)
      ["currency"]=>
      string(3) "PLN"
    }
  }
  ["stock"]=>
  array(2) {
    ["available"]=>
    string(1) "5"
    ["unit"]=>
    string(4) "UNIT"
  }
  ["publication"]=>
  object(stdClass)#37 (5) {
    ["duration"]=>
    NULL
    ["status"]=>
    string(5) "ENDED"
    ["startingAt"]=>
    NULL
    ["endingAt"]=>
    NULL
    ["endedBy"]=>
    string(4) "USER"
  }
  ["delivery"]=>
  array(3) {
    ["shippingRates"]=>
    array(1) {
      ["id"]=>
      string(36) "f01fbe47-f8aa-46ac-b2d1-e40f6e17ba13"
    }
    ["handlingTime"]=>
    string(5) "PT24H"
    ["shippmentDate"]=>
    NULL
  }
  ["payments"]=>
  array(1) {
    ["invoice"]=>
    string(3) "VAT"
  }
  ["afterSalesServices"]=>
  array(3) {
    ["impliedWarranty"]=>
    array(1) {
      ["id"]=>
      string(36) "27fcf592-3b8f-45ed-86fb-2bfe2960211e"
    }
    ["returnPolicy"]=>
    array(1) {
      ["id"]=>
      string(36) "2b709c19-e22f-4675-a1d4-8dab8364ff76"
    }
    ["warranty"]=>
    array(1) {
      ["id"]=>
      string(36) "38c73c1d-0aef-4189-ad03-989dcc6b923f"
    }
  }
  ["additionalServices"]=>
  NULL
  ["sizeTable"]=>
  NULL
  ["promotion"]=>
  object(stdClass)#29 (5) {
    ["emphasized"]=>
    bool(false)
    ["bold"]=>
    bool(false)
    ["highlight"]=>
    bool(false)
    ["departmentPage"]=>
    bool(false)
    ["emphasizedHighlightBoldPackage"]=>
    bool(false)
  }
  ["location"]=>
  array(4) {
    ["countryCode"]=>
    string(2) "PL"
    ["province"]=>
    string(7) "SLASKIE"
    ["city"]=>
    string(14) "Bielsko-Biała"
    ["postCode"]=>
    string(6) "40-382"
  }
  ["external"]=>
  NULL
  ["attachments"]=>
  array(0) {
  }
  ["contact"]=>
  NULL
  ["validation"]=>
  object(stdClass)#27 (2) {
    ["errors"]=>
    array(0) {
    }
    ["validatedAt"]=>
    string(24) "2019-04-09T19:55:43.648Z"
  }
  ["createdAt"]=>
  string(20) "2019-03-11T18:32:44Z"
  ["updatedAt"]=>
  string(24) "2019-04-10T11:42:56.356Z"
}
TomekKaczmarek commented 5 years ago

Sprawdziłem ofertę i jest wystawiona w kategorii: Kultura i rozrywka > Książki i Komiksy >Literatura piękna, popularna i faktu > Pozostałe (Id 79168)

W tej kategorii parametry są inne niż dla kategorii, w której jest produkt Kultura i rozrywka >Książki i Komiksy >Poradniki i albumy > Dom i ogród > Naprawy, remonty, majsterkowanie (Id 90844).

Stąd problem. W tej sytuacji najlepiej wystawić nową ofertę w tej samej kategorii, w której jest produkt.

pgasidlo commented 5 years ago

@TomekKaczmarek Ok, coś źle popatrzyłem.

pgasidlo commented 5 years ago

Mam problem z przypisaniem produktu 49e4cfac-d9b8-40fb-afb8-340789d5c8cd do aukcji. Utworzyłem drafta: 8011067718. Chodzi o parametr Autor. W produkcie jest to Reşat Ekrem Koçu i taki ustawiam w parametrach. Lecz podczas walidacji dostaję błąd: The value of a parameter "Autor" contains illegal characters: ş.. Jak usunę ten parametr, to dostaję zaś błąd Invalid parameter Autor (223489) value for offer with product. Value should be "Reşat Ekrem Koçu". I koło się zamyka.

pgasidlo commented 5 years ago

Czy jest jakiś problem z pobieraniem konkretnych produktów? Pytając o 3698680a-8c55-4a57-a985-a3aecc3d499c zawsze dostaje w odpowiedzi dane odnośnie grupy e2db1b34-43c1-4ace-9f44-19065d32d43e.

pgasidlo commented 5 years ago

Czy są jakieś (inne niż dla RestAPI) limity dla wywołań GET /sale/products?ean=XXX i GET /sale/products/UUID?

TomekKaczmarek commented 5 years ago

@pgasidlo

  1. 49e4cfac-d9b8-40fb-afb8-340789d5c8cd - z bazy dostawcy zaciągnęliśmy znaki w autorze, które nie przechodzą walidacji - problem zgłosiłem do odpowiedniego działu, wkrótce go poprawimy.
  2. Baza żyje - tak jak pisałem w artykule - dodajemy w niej nowe produkty i aktualizujemy istniejące. Dane dostajemy od wielu dostawców, w efekcie czasem jeden produkt może sie pojawić wiele razy. Wtedy łączymy takie produkty w jeden ID - w efekcie, odpytując o 3698680a-8c55-4a57-a985-a3aecc3d499c otrzymujesz produkt, do którego został zmerdżowany - 2db1b34-43c1-4ace-9f44-19065d32d43e.
  3. Dla tych zasobów obowiązują standardowe limity wywołań. Dodatkowo wdrożyliśmy zabezpieczenie przed scrapowaniem bazy o produktach - które opóźnia odpowiedź przy zbyt dużej liczbie requestów na minutę.
pgasidlo commented 5 years ago

@TomekKaczmarek Rozumiem, że zostaną też sprawdzone wszystkie produkty. Bo znam jeszcze trochę podobnych przypadków.

Dodaktowo proszę jeszcze zobaczyć na produkt 1e7fbee8-3624-44f6-846f-1ae825eef952. Tutaj problem jest inny: Tytuł jest za długi, i podczas tworzenia aukcji dostaję błąd: Value is too long in parameter Tytuł(223545). Przykład DRAFTa: 8033928869.

Może jednak pewnym rozwiązaniem, będzie dodanie jakiegoś parametru podczas edycji/tworzenia aukcji, gdzie podaje/zmieniam product.id, dodać np. product.forceParameters, które ustawi wszystkie parametry na takie jakie wymaga grupa.

TomekKaczmarek commented 5 years ago

@pgasidlo

  1. 49e4cfac-d9b8-40fb-afb8-340789d5c8cd - autor poprawiony
  2. 1e7fbee8-3624-44f6-846f-1ae825eef952 - problem zgłosiłem, wkrótce poprawimy tytuł.

Pracujemy nad wdrożeniem walidacji na poziomie bazy produktów, zgodnej z zasadami, które obowiązują dla wystawiania ofert w Allegro. Docelowo, nie powinno być zatem problemów przy walidacji danych z produktu. Póki co zgłaszaj proszę takie problemy - będziemy je rozwiązywać.

pgasidlo commented 5 years ago

@TomekKaczmarek To lista produktów, których dane nie są poprawne:

EDIT: uzupełniłem o zawartość pól w produkcie.

TomekKaczmarek commented 5 years ago

@pgasidlo dzięki, zgłosiłem do odpowiedniego działu.

mjag8 commented 5 years ago

Czy jest szansa, żeby przypisując w strukturze oferty w polu product znaleziony w waszej bazie identyfikator paremetry i pola w strukturze oferty były automatycznie przypisywane? Moim zdaniem tak to właśnie powinno funkcjonować. Np. robię draft, przypisuję produkt xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx do oferty i mam już w strukturze wypełnione odpowiadające produktowi parametry itp. Po jakimś czasie produkt w waszej bazie xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx przykładowo ma coś zmienione, coś dodane. W takim wypadku oferta z takim wskaźnikiem na ten produkt automatycznie uwzględnia te zmiany. No bo w tym momencie de facto należałoby dla wszystkich ofert, po kolei, co jakiś czas (jaki?) zrobić: pobrać strukturę oferty -> wyszukać w waszej bazie, czy istnieje powiązany produkt -> polecieć po wszystkich wartościach porównując i nadpisując w strukturze oferty

Prosiłbym o jakieś info w tej kwestii

MaciejFrackowiak commented 5 years ago

@mjag8 Twoje spostrzeżenie przekażę jako sugestię do działu odpowiedzialnego za rozwój REST API.

chryssalid commented 3 years ago

Podczas próby wystawienia oferty z produktem dostaję komunikat zwrotny 422 "Nie mogliśmy wystawić oferty. Niektóre wymagane pola nie zostały wypełnione." - niezbyt to jest przydatne. Jak uzyskać informację o tym, czego brakuje?

AureliuszBrussy commented 3 years ago

@chryssalid prześlij proszę Twój pełen request i response w formacie curl (z wyciętym access tokenem). Sprawdzę to.

chryssalid commented 3 years ago

@AureliuszBrussy

POST
'https://api.allegro.pl.allegrosandbox.pl/sale/product-offers'
-H 'Authorization: Bearer {token}'
-H 'Accept-Charset: UTF-8'
-H 'content-type: application/vnd.allegro.beta.v2+json'
-H 'accept: application/vnd.allegro.beta.v2+json'

{
    "sellingMode": {
        "format": "BUY_NOW",
        "price": {
            "amount": "29.29",
            "currency": "PLN"
        }
    },
    "stock": {
        "available": 1,
        "unit": "UNIT"
    },
    "location": {
        "countryCode": "PL",
        "province": "ZACHODNIOPOMORSKIE",
        "city": "Szczecin",
        "postCode": "70-261"
    },
    "external": {
        "id": "113015"
    },
    "delivery": {
        "shippingRates": {
            "id": "fdc89cde-4612-4f0c-bb1a-9afb45d55360"
        },
        "handlingTime": "PT0S"
    },
    "payments": {
        "invoice": "VAT"
    },
    "afterSalesServices": {
        "impliedWarranty": {
            "id": "46ba7e50-1f77-4be4-9b1e-83d4c3f64192"
        },
        "returnPolicy": {
            "id": "977c38fb-eb6b-49ff-9aaa-f8303b58d57e"
        }
    },
    "afterSalesServiceConditions": {
        "warranty": {
            "id": "f6dcf488-092e-4932-a765-abd64ab89b40"
        }
    },
    "product": {
        "id": "9788374801737",
        "parameters": [
            {
                "id": "11323",
                "valuesIds": [
                    "11323_1"
                ],
                "values": [],
                "rangeValue": null
            },
            {
                "id": "223545",
                "valuesIds": null,
                "values": [
                    "Poza cieniem"
                ],
                "rangeValue": null
            },
            {
                "id": "223489",
                "valuesIds": null,
                "values": [
                    "Brent Weeks"
                ],
                "rangeValue": null
            },
            {
                "id": "75",
                "valuesIds": [
                    "75_1"
                ],
                "values": [],
                "rangeValue": null
            },
            {
                "id": "74",
                "valuesIds": [],
                "values": [
                    2010
                ],
                "rangeValue": null
            },
            {
                "id": "223541",
                "valuesIds": [
                    "223541_305725"
                ],
                "values": [],
                "rangeValue": null
            }
        ]
    },
    "images": [
        "https:\/\/images.ksiazkiniegryza.pl\/thumb\/500\/0\/zoom\/olejesiuk\/978-83-7480-173-7.jpg"
    ],
    "description": {
        "sections": [
            {
                "items": [
                    {
                        "type": "TEXT",
                        "content": "<h1>Poza cieniem<\/h1>\n<p><b>Autor:<\/b> Brent Weeks<\/p>\n<p><b>Wydawca:<\/b> MAG<\/p>\n\t<p><b>Rok wydania:<\/b> 2010<\/p>\n\t<p><b>ISBN:<\/b> 978-83-7480-173-7<\/p>\n\t<p><b>Stron:<\/b> 616<\/p>\n\t<p><b>Oprawa:<\/b> miękka<\/p>\n\t<p><b>Stan:<\/b> nowa<\/p>\n\n\t<p><b>Format:<\/b> 13.5x20 cm<\/p>\n"
                    }
                ]
            },
            {
                "items": [
                    {
                        "type": "TEXT",
                        "content": "<p>SPRZEDAŻ OD 30-06-2010! <\/p><p> Logan Gyre jest królem Cenarii, oblężonego królestwa, dysponującego szczątkową armią i odrobiną nadziei. Ma jedną szansę i desperacki i ryzykowny pomysł, który może zniszczyć jego kraj. Na północy nowy Król-Bóg ma plan. Jeśli go zrealizuje, nikt już nie zdoła go powstrzymać. Kylar Stern nie ma wyboru. Żeby ratować przyjaciół - i być może wrogów - musi dokonać niemożliwego: zamordować boginię. Poza cieniem - to gęste od zwrotów akcji zakończenie trylogii \"Anioła Nocy\".<\/p>"
                    }
                ]
            },
            {
                "items": [
                    {
                        "type": "TEXT",
                        "content": "<h2>Jak odczytywać stan ksiażki?<\/h2>\n<ol>\n\t<li>Nowa - tego chyba nie trzeba tłumaczyć :)<\/li>\n\t<li>Stan bardzo dobry - jak nowa, ale użwana, bez sladów czytania<\/li>\n\t<li>Stan dobry\/dobry+ - bez defektów ze śladami czytania<\/li>\n\t<li>Stan dobry - widoczne ślady używania, bez braków, ale możliwe zagięte kartki, podpisy poprzednich właścicieli, pieczęcie<\/li>\n<\/ol>\n\n<p>Wszystkie książki ze stanem gorszym niż dobry są opisywane indywidualnie<\/p>"
                    }
                ]
            }
        ]
    }
}
AureliuszBrussy commented 3 years ago

@chryssalid w polu product.id podałeś EAN produktu, który nie istnieje w naszej bazie produktów na Sandboxie. Sprawdź najpierw, czy produkt istnieje (GET /sale/products?ean={ean}).

Jeżeli chcesz utworzyć nowy produkt - nie przekazuj product.id, a strukturze żądania w obiekcie product przekaż komplet danych, które opisują sprzedawany produkt. Skorzystaj z GET /sale/categories/{categoryId}/parameters - w polu requiredForProduct znajdziesz informację, czy dany parametr jest wymagany, gdy tworzysz nowy produkt.

Nie zapomnij o wskazaniu kategorii, w której produkt ma zostać wystawiony (pole product.category.id).

chryssalid commented 3 years ago

@AureliuszBrussy sprawdzę to pod tym kątem, ale powyższy problem pozostaje nierozwiązany - komunikat w takim przypadku niewiele mówi developerowi. Co prawda kategoria w powyższym przykładzie pozostała wycięta, ale to samo otrzymywałem, gdy była podana (i miała requiredForProduct). Sprawdzę, czy to kwestia tego EAN i zobaczę, co się stanie, gdy go nie podam.

AureliuszBrussy commented 3 years ago

@chryssalid rozumiem Twoje spostrzeżenie, zgłosiłem kwestię tego komunikatu błędu do odpowiedniego zespołu.