allegro / allegro-api

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

Dodawanie oferty - Message not readable #9070

Open goses opened 6 months ago

goses commented 6 months ago

Witam,

Zacznę od tego że linki do materiałów podanych tutaj nie działają.

Mam problem z dodaniem oferty Allegro poprzez API oczywiście , wydaje mi się że uzupełniłem wszystkie wymagane dane poprawnie, niestety błędy zwrotne nic konkretnego nie podpowiadają, Mam taki response: Array ( [errors] => Array ( [0] => Array ( [code] => ValidationError.HttpMessageNotReadableException [message] => Message not readable [details] => [path] => /sale/offers [userMessage] => Message not readable ) ) )

Mój curl:

$url = "https://api.allegro.pl/sale/offers";
$headers = [
'Authorization: Bearer ' . $accessToken,
'Accept: application/vnd.allegro.public.v1+json',
'Content-Type: application/vnd.allegro.public.v1+json'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($offerData, JSON_UNESCAPED_SLASHES));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Mój $offerData / JSON:

{
    "productSet": {
        "product": {
            "name": "Filtr oleju silnika spalinowego - 476954 - Manitou",
            "category": {
                "id": "252234"
            },
            "id": "476954",
            "idType": "MPN",
            "parameters": [
                {
                    "id": "11323",
                    "values": [
                        "11323_1"
                    ]
                },
                {
                    "id": "128491",
                    "values": [
                        "128491_32"
                    ]
                },
                {
                    "id": "247835",
                    "values": [
                        "247835_828913"
                    ]
                },
                {
                    "id": "128590",
                    "values": [
                        "128590_2097152"
                    ]
                },
                {
                    "id": "17448",
                    "values": [
                        ""
                    ]
                },
                {
                    "id": "225693",
                    "values": [
                        ""
                    ]
                },
                {
                    "id": "215858",
                    "values": [
                        "476954"
                    ]
                },
                {
                    "id": "227345",
                    "values": [
                        "476954"
                    ]
                },
                {
                    "id": "215941",
                    "values": [
                        ""
                    ]
                },
                {
                    "id": "229205",
                    "values": [
                        "229205_340245"
                    ]
                }
            ],
            "images": [
                {
                    "url": "https://parts-center.pl/img_produkty/476954%20ZD.webp"
                },
                {
                    "url": "https://parts-center.pl/img_produkty/476954%20ZD1.webp"
                }
            ]
        },
        "quantity": {
            "value": 1
        }
    },
    "stock": {
        "available": 167,
        "unit": "UNIT"
    },
    "delivery": {
        "shippingRates": {
            "id": "eb5d572b-12d8-4a1e-9bd7-af03602fd441"
        },
        "handlingTime": "PT0S"
    },
    "publication": {
        "duration": null,
        "status": "ACTIVE",
        "endedBy": "EMPTY_STOCK",
        "republish": true
    },
    "category": {
        "id": "252234"
    },
    "parameters": [
        {
            "id": "11323",
            "values": [
                "11323_1"
            ]
        },
        {
            "id": "128491",
            "values": [
                "128491_32"
            ]
        },
        {
            "id": "247835",
            "values": [
                "247835_828913"
            ]
        },
        {
            "id": "128590",
            "values": [
                "128590_2097152"
            ]
        },
        {
            "id": "17448",
            "values": [
                ""
            ]
        },
        {
            "id": "225693",
            "values": [
                ""
            ]
        },
        {
            "id": "215858",
            "values": [
                "476954"
            ]
        },
        {
            "id": "227345",
            "values": [
                "476954"
            ]
        },
        {
            "id": "215941",
            "values": [
                ""
            ]
        },
        {
            "id": "229205",
            "values": [
                "229205_340245"
            ]
        }
    ],
    "afterSalesServices": {
        "impliedWarranty": {
            "id": "705a34d0-fbae-44e5-8e50-08dd10a27172"
        },
        "returnPolicy": {
            "id": "3eb58b03-79e8-4a0b-adab-302351d1408f"
        }
    },
    "name": "Filtr oleju silnika spalinowego - 476954 - Manitou",
    "payments": {
        "invoice": "VAT"
    },
    "sellingMode": {
        "format": "ADVERTISEMENT",
        "price": {
            "amount": "29.94",
            "currency": "PLN"
        }
    },
    "location": {
        "city": "Zambr\u00f3w",
        "countryCode": "PL",
        "postCode": "18-300",
        "province": "podlaskie"
    },
    "images": [
        {
            "url": "https://parts-center.pl/img_produkty/476954%20ZD.webp"
        },
        {
            "url": "https://parts-center.pl/img_produkty/476954%20ZD1.webp"
        }
    ],
    "description": {
        "sections": [
            {
                "items": [
                    {
                        "type": "TEXT",
                        "content": "<h1>Filtr oleju silnika spalinowego - 476954 - Manitou</h1>"
                    }
                ]
            },
            {
                "items": [
                    {
                        "type": "TEXT",
                        "content": "<h2>📄 Opis produktu:</h2><p>Filtr oleju silnikowego, zalecana wymiana co 500 godzin.</p>"
                    },
                    {
                        "type": "IMAGE",
                        "url": "https://parts-center.pl/img_produkty/476954%20ZD.webp"
                    }
                ]
            },
            {
                "items": [
                    {
                        "type": "IMAGE",
                        "url": "https://parts-center.pl/img_produkty/476954%20ZD1.webp"
                    },
                    {
                        "type": "TEXT",
                        "content": "<h2>🚜 Przeznaczenie cz\u0119\u015bci:</h2><p>\u0141adowarka teleskopowa i w\u00f3zki wid\u0142owe manitou</p><p><b>Nie jeste\u015b pewien czy dana cz\u0119\u015b\u0107 pasuje do Twojej maszyny? Skontaktuj si\u0119 z nami - Nasi wyspecjalizowani doradcy techniczni pomog\u0105 Ci w doborze w\u0142a\u015bciwej cz\u0119\u015bci!</b></p>"
                    }
                ]
            }
        ]
    },
    "external": {
        "id": "1103542"
    },
    "taxSettings": {
        "rates": {
            "rate": "23.00",
            "countryCode": "PL"
        },
        "subject": "GOODS"
    }
}
MaciejFrackowiak commented 6 months ago

Wystawianie ofert za pośrednictwem zasobów /sale/offers zostało wyłączone wraz z końcem 2023 roku. Obecnie, jedyna właściwa ścieżka to skorzystanie z zasobów /sale/product-offers. Szczegółowe informacje jak wystawić ofertę znajdziesz w naszym poradniku.

goses commented 6 months ago

Ah, faktycznie... poprawiłem url w curl ale nadal jest podobny błąd, coś z productSet ale nie wiem, jak podaje same id lub pełne dane jest taka sama odpowiedź: Array ( [errors] => Array ( [0] => Array ( [code] => JsonMappingException [message] => Message is not readable. [details] => [path] => productSet [userMessage] => Request contains invalid data. Contact the application author. [metadata] => Array ( ) ) ) )

MaciejFrackowiak commented 6 months ago

Proszę podaj trace-id wywołania.

goses commented 6 months ago

d2df2be6e6ec5dcc

MaciejFrackowiak commented 6 months ago

Widzę częściowo dane z Twojego requestu i błędów jest sporo:

Zajrzyj do naszego poradnika, o którym wspomniałem, ponieważ mając na uwadze zawarte tam wskazówki prędzej uzyskasz właściwą strukturę swojego wywołania.

goses commented 6 months ago

Ok, dziękuje za szybkie odpowiedzi, poprawiłem swój request, udało mi się dodać ofertę do Allegro, ale jest jako Szkic, dodałem ze 2 godziny temu i jest tak samo, chciałbym aby oferty były od razu aktywne. W czym może być problem? wysyłam:

...
"publication": {
        "duration": null,
        "status": "ACTIVE",
        "endedBy": "EMPTY_STOCK",
        "republish": true
},
...
MaciejFrackowiak commented 6 months ago

Wydłużony czas publikacji oferty to zamierzony efekt zmiany.

goses commented 6 months ago

Ok rozumiem, ale od wczoraj ta oferta jest dalej jako Szkic.. Oferta jest powiązana z waszym katalogiem produktów, więc wg. opisu powinna przejść szybciej weryfikację, ale no max 2 godziny...

Co się stanie, jeśli odrzucimy ofertę Takiej oferty nie wyświetlimy kupującym. Nowe oferty pozostaną [szkicami], a zakończonych nie wznowimy. Możesz je poprawić i wystawić jeszcze raz – a my sprawdzimy je ponownie.

Oferty, które odrzuciliśmy, znajdziesz w zakładce [Mój asortyment], gdy zaznaczysz filtr Oferty odrzucone.

Powody, dla których odrzuciliśmy ofertę i wskazówki, jak ją poprawić zobaczysz w kilku różnych miejscach:

  • w formularzu wystawiania w postaci komunikatów w lewym dolnym rogu
  • gdy w [Moim asortymencie] klikniesz [popraw błędy] przy danej ofercie
  • w powiadomieniach mejlowych o wystawieniu oferty.

Wg mnie to jest trochę nie jasne, raz piszecie że nowe oferty pozostaną szkicami a dalej jest że będą jako Oferty odrzucone - tylko że takiego filtru nie widzę w Moim asortymencie, poza tym:

MaciejFrackowiak commented 6 months ago

Proszę podaj trace-id swojego wywołania, wówczas będę mógł sprawdzić co się zadziało.

goses commented 6 months ago

tzn nie mam trace-id pierwszego wywołania, ale teraz dodałem ofertę jeszcze raz trace-id: 689d11daf4ef0281

MaciejFrackowiak commented 6 months ago

Przyjrzałem się requestowi i widzę coś nadmiarowego - mianowicie:

"endedBy": "EMPTY_STOCK"

sugeruje jakoby oferta miała być zakończona. Proszę usuń ten wpis z requestu, powinno pomóc.

goses commented 6 months ago

Ok, faktycznie, pierwszy raz zinterpretowałem to inaczej, wyrzuciłem to z requestu, ale oferta dalej jest jako Szkic, a już minęło ponad 2h, zapomniałem zapisać trace-id, ale dodałem jeszcze raz ofertę, minęło paręnaście minut i też nie widać by stawała się aktywna... trace-id: c1e119eaad62a7f

Pytanie, czy te odpytywanie po Location jest konieczne? Czy to tylko do sprawdzenia statusu?

Poza tym zauważyłem bug na Allegro, w Mój asortyment, gdy usuwam Szkic oferty to nic się nie dzieje tzn, wyświetla się tylko komunikat na dole że usunięto, ale oferta nie znika z listy, mogę klikać w Usuń wiele razy, dopiero odświeżenie strony pomaga. image

MaciejFrackowiak commented 6 months ago

Odpytując adres z nagłówka Location otrzymasz finalny rezultat operacji wystawienia oferty. Tym samym dowiesz się, co się stało - ot z ww. przykładu:

{
    "errors": [
        {
            "code": "5f59fb97c4b1764d7ac069de",
            "message": "OfferValidation",
            "details": null,
            "path": null,
            "userMessage": "Z opisu Twojej oferty wynika, że kupujący powinien skontaktować się z Tobą przed dokonaniem zakupu lub przedmiot oferty można zakupić mailowo bądź telefonicznie. Takie działanie może skutkować sfinalizowaniem transakcji poza Allegro. Usuń z opisu niedozwolone zapisy.",
            "metadata": {}
        }
    ]
}

Tym samym znamy powód, dla którego oferta nie pojawiła się w serwisie. Natomiast kwestię z serwisu WWW proszę zgłoś bezpośrednio do obsługi Allegro.

goses commented 6 months ago

Ok super, dziękuje, chodziło o to że jeżeli kupujący był niepewny czy dana część pasuje do jego maszyny aby się z nami skontaktował, nie chodziło o sprzedaż poza allegro, ale zmieniłem opis i już jest ok, oferta od razu jest aktywna.

MaciejFrackowiak commented 6 months ago

Cieszę się, iż udało się wystawić aktywną ofertę!

goses commented 6 months ago

Nie chcę zakładać nowych tematów, a mam dwa dodatkowe pytania:

  1. Czy istnieje możliwość pobrania poprzez API statystyk oferty? wizyty / sprzedano / lubią... Tak jak jest to na panelu Allegro? Nie mogę tego znaleźć w dokumentacji. image
  2. Chciałbym zautomatyzować aktualizację ceny ofert i stanu magazynowego, żeby wszystko było spójne z naszym systemem zarządzania, pytanie czy mogę podać samą cenę i stan w requeście czy muszę podać wszystkie informacje jak podczas tworzenia oferty?
AureliuszBrussy commented 6 months ago
  1. Tak, te statystyki możesz pobrać za pomocą GET /sale/offers: w obiekcie obiekt stats oraz stock.
  2. Gdy skorzystasz do edycji z PATCH /sale/product-offers/{offerId} to wystarczy, że wyślesz tylko te pola, które chcesz edytować. Więcej o edycji oferty znajdziesz w naszym poradniku.
goses commented 6 months ago

Ok, super, dziękuje, ale im dalej w las tym więcej drzew ;) Mam kolejne pytania:

  1. Czy da się usunąć z Allegro ofertę która była Aktywna i została Zakończona? Znalazłem tylko endpoint do usuwania Szkiców, metodą PATCH nie mogę zmienić statusu oferty na "INACTIVE" (szkic), a w dokumentacji jest taka opcja podana przy edycji.
  2. Jak dodać ofertę z produktem którego nie ma w katalogu? Według dokumentacji podałem chyba wszystkie potrzebne informacje w ProductSet, błąd jaki dostaje to "Could not find a precisely matching product." (trace-id: 30648743ad8d7131)
AureliuszBrussy commented 6 months ago
  1. Nie da się. Taka oferta zostanie usunięta po 60 dniach. Usunąć samodzielmnie można tylko szkic, który nigdy nie został aktywowany.
  2. Aby utworzyć produkt, pozostaw pole product.id puste i podaj pozostałe dane (GTIN lub MPN możesz dodać jako parametr produktu w polu product.parameters).
goses commented 6 months ago

Ok, dziękuje za informację, jednak mam też taką sytuację że istnieje dany produkt ale jest w złej kategorii, w takim wypadku mogę jakoś dodać swój produkt do prawidłowej kategorii czy muszę zgłaszać błąd w takim produkcie? Przy dodawaniu takiego produktu mam błąd: "A product from our database has been recognized based on the specified data. The indicated category Chwytaki (252255) does not match the product category: Silnik i osprzęt (252239)."

MaciejFrackowiak commented 6 months ago

@goses Konieczne jest zgłoszenie propozycji zmiany w produkcie.

goses commented 5 months ago

Ok rozumiem, ale czy jest jakiś schemat po którym system odrzuca lub akceptuje nowy produkt? Bo z tego co testowałem to raz pozwala dodać jako nowy a raz nie. Opiszę 3 sytuacje:

  1. Produkt z katalogu ma zły parametr Producent części albo jest w złej kategorii, dodaję ofertę ze złym parametrem / kategorią i dopiero po zgłaszam produkt z katalogu do zmiany?
  2. Czy mogę zrobić tak że najpierw zgłoszę produkt z katalogu i od razu dodam produkt / ofertę z nowym produktem z prawidłowymi parametrami / kategorią (wtedy system akceptuje jako nowy produkt),
  3. Mam też taką sytuację że jest dodany jakiś produkt z takim samym numerem katalogowym lecz innym producentem części, jest też w innej kategorii, jest to ewidentnie inna część, nie mogę jej zgłosić bo to nie jest to co chcę dodać, więc dodaję jako nowy ale system odrzuca bo uważa że już jest taki produkt i wyświetla że nie pasuje kategoria / parametr. Co wtedy mam zrobić?
MaciejFrackowiak commented 5 months ago

Nie ma jednego schematu - każda kategoria posiada swoje własne reguły identyfikujące, po których rozpoznawane są duplikaty istniejących w naszej bazie produktów. Flow działania de facto zależy od Ciebie - możesz wystawić ofertę z przypisanym produktem, który wg Ciebie posiada nieprawidłowe parametry i później zgłosić błąd w produkcie, ale możesz także od razu zgłosić błąd i po ewentualnej edycji produktu dopiero wystawić ofertę. Tu wybór należy stricte do Ciebie. Zgłoszenie błędu /propozycji zmiany w istniejącym produkcie nie otwiera "furtki" do zgłoszenia od razu nowego produktu. W przypadku wszelkich wątpliwości, gdzie zachodzi jak opisana w punkcie 3 sytuacja możesz skontaktować się z obsługą serwisu by przedstawić swoje spostrzeżenia - obsługa ma możliwość dodawania/edycji produktów na podstawie zgłoszeń sprzedających.

goses commented 5 months ago

Póki co operujemy na kategorii "Części do maszyn budowlanych" która ma swoje subkategorie, ale wszystkie mają te same parametry, i szczerze mówiąc z moich testów wychodzi to różnie np.:

  1. Dodałem nowy produkt mimo że już był w katalogu (z innym producentem), a inną część (inny nr katalogowy) już odrzuca w takiej samej sytuacji - są w tej samej subkategorii.
  2. Chciałem dodać jako nowy produkt, system odrzucił, zgłosiłem produkt do zmiany przez allegro, i po chwili spróbowałem jeszcze raz i udało się dodać ofertę z nowym produktem, a zmiana nie została jeszcze zatwierdzona, więc akurat tak to zadziałało że otworzyło "furtkę". Oczywiście oferty z nowymi produktami są jako Szkic do weryfikacji, ale z tego co widzę wszystkie zostały zatwierdzone i są aktywne.

Nie będę ukrywał że te zgłaszanie jest trochę problematyczne bo chodzi o czas, ofert chcemy dodać sporo, a niestety często jest tak że w katalogu wykrywa tylko jeden produkt który akurat ma przypisanego złego producenta lub kategorię. No ale raczej się tego nie uniknie ;)

MaciejFrackowiak commented 5 months ago

Zgadza się, z uwagi na ilość produktów dostępnych w Katalogu produktów Allegro mogą się zdarzyć sytuacje, w których wykrywamy duplikat, a po szczegółowej analizie okazuje się, że to jednak osobny produkt. Nie ma jednego rozwiązania na takie sytuacje - musimy opierać się na zgłoszeniach zmian w produkcie, czy też już bezpośredniej korespondencji ze sprzedającym. Plus takiego rozwiązania jest na pewno jeden - gwarantujemy by produkty dostępne w katalogu posiadały jak najdokładniejsze dane, a jednocześnie odzwierciedlały stan faktyczny i swoją różnorodność.

stale[bot] commented 5 months ago

W tym wątku nie pojawiła się żadna nowa odpowiedź w ciągu 7 dni, dlatego automatycznie oznaczamy go jako przeterminowany. Jeśli w ciągu kolejnych 7 dni nie pojawi się żadna odpowiedź, wątek zostanie zamknięty. Dziękujemy za zaangażowanie w dyskusję i zachęcamy Cię do wypełnienia ankiety dotyczącej naszego wsparcia na forum.


There was no new reply in this thread within 7 days, therefore, we automatically marked it as expired. If no response is received within the next 7 days, this thread will be closed. Thank you for engaging in the discussion. We encourage you to complete our forum support survey.