PlentyAddItemImages und die ImageAvailabilityMap

Hi zusammen,
ich komme grade in die Verlegenheit, Bilder an sehr vielen Artikeln setzen zu müssen.

Klappt an sich auch super, nur die Verfügbarkeit ist mir absolut unklar.
Ist weder bei euch noch in der Plenty-Doku weiter dokumentiert. Das Feld ist ImageAvailabilityMap

Ich hätte gerne keine, also kein Mandant, keine Herkunft, kein Listing.

Aus eurer Doku hab ich den Beispiel-String mandant=-1.00;marketplace=-1.00;listing=104.00, und hab es entsprechend mal mit mandant=-1.00;marketplace=-1.00;listing=-1.00 versucht gehabt. Führt dann aber dazu, dass alle angehakt sind.

Gut, ist die „-1“ vielleicht echt für „alle“ gedacht? :thinking:
Dann hab ichs mit mandant=0;marketplace=0;listing=0 versucht, führt leider zum Warning

WARNING:Could not upload ImageUrl https://my-domain.tld/image.png to ItemID 2. Error: (Root Causes: PlentyRESTBaseException: Error: SQLSTATE[23000]: Integrity constraint violation: 1048 Column ‚plenty_item_image_reference_value‘ cannot be null (SQL: insert into plenty_item_image_reference (plenty_item_image_reference_type, plenty_item_image_reference_value, plenty_item_image_reference_image_id) values (mandant, ?, 128807)) (Code=23000)

Es wird weiter behauptet

Total Images added: 0; Total skipped images: 1

Aber: das Bild kommt an. Mit leerer Verfügbarkeit, wie gewünscht :partying_face:
Würde mir reichen, wenn ich das Warning irgendwie unterdrücken kann :wink:

Aber vermutlich mach ich ja irgendwas falsch. Komme hier mit trial & error nicht weiter.

Wenn ich ein leeres ImageAvailabilityMap übergebe, sind wieder alle angehakt, das ist es also auch nicht…

Danke Daniel

Nein, leider nicht. In dem Fall kommt das Bild dann zwar ohne Verfügbarkeiten rein, aber auch ohne die VariantenID-Zuordnung, die ich auch mit gegeben hatte.

Wenn ich die ImageAvailabilityMap leer übergebe, wird die VID-Zuordnung korrekt gesetzt. Aber dann passen die Verfügbarkeiten wieder nicht.

Hallo Daniel,

ich habe mir den Step angesehen. Aktuell ist nicht möglich ein Bild ohne Verfügbarkeiten hochzuladen.

Wenn die ImageAvailabilityMap Spalte im Step leer ist, setzen wir das Feld availabilities im Request (POST /rest/items/{itemId}/images/upload) nicht. Das führt offenbar dazu, dass alle Verfügbarkeiten für das Bild gesetzt.
Durch ausprobieren habe ich rausbekommen, dass wir availabilities als leeres Array ("availabilities": []) übermitteln müssen, damit keine Verfügbarkeit gesetzt wird.
Wir werden dafür noch eine zusätzliche Möglichkeit im Step einbauen. Das aktuelle Verhalten bei leerer Spalte müssen wir aber beibehalten.

Zu:

Da wir die Varianten ID Zuordnung nicht direkt beim Upload Request mitgeben können, wird (pro Varianten ID) noch ein extra Request (POST /rest/items/{itemId}/variations/{variantId}/variation_images) ausgeführt.

Die Warnung kommt vom ersten Request (POST /rest/items/{itemId}/images/upload). Die 0 bei den Verfügbarkeiten führt offenbar bei Plenty dazu, dass das Bild hochgeladen wird, aber beim setzen der Verfügbarkeiten der Fehler auftritt, den wir in der Response erhalten und ausgeben. Die Varianten Zuordnung wird nach dem Fehler, dann von unsere Seite nicht mehr ausgeführt.

Viele Grüße,
Torsten

1 „Gefällt mir“

Hi Torsten,
kannst du mir einen Ausblick geben wann das möglich sein wird?

Mein Bilder-Generator ist quasi fertig, jetzt würde ich ihn gern testen :wink:

Beste Grüße Daniel

Hallo Daniel,

es ist ab sofort möglich. Du musst deinen Bilder-Generator aber vermutlich nochmal etwas anpassen. Um keine Verfügbarkeit zu setzen, musst du in der Spalte den Wert none angeben. Wenn der Wert in der Spalte leer ist, werden weiterhin alle Verfügbarkeiten gesetzt.

Viele Grüße
Torsten

2 „Gefällt mir“

Super @synesty-Torsten. Jetzt hab ich ne Folgefrage :nerd_face:

Ich will jetzt ein Bild aktualisieren. Oder löschen und mit identischen Settings neu hochladen.

Die Bilder hab ich mir aus einem PlentyGetItemImages vorselektiert, geht bei uns gut über die Auflösung.

Zuerst hab ich PlentyUpdateImages probiert, aber das hat leider keine Feld für eine neue Bild-URL.
Gut, statt dessen kann ich natürlich mein neues Bild per PlentyAddItemImages hochladen, die nötigen Daten hab ich aus dem vorherigen PlentyGetItemImages ja vorliegen.

Aber dann muss ich immer noch das alte Bild löschen :grimacing: Keiner der beiden Steps hat dazu ein Feld? :thinking:

Ich kann wohl im PlentyAddItemImages alle Bilder löschen vorab. Aber ich will die anderen ja behalten. Ich will nur ein einzelnes austauschen.

Wie muss ich vorgehen?

Grüße Daniel

Hallo Synesty,

ich klinke mich hier mal mit rein, denn ich habe eine ähnliche Problematik.
Um die Flowdurchlaufzeit zu minimieren, will ich irgendwie erkennen ob die Bilder bereits in Plenty hinterlegt sind.
Ich würde dafür eher sehr ungerne die Bilder runterladen, diese hashen und dann den hash mit dem im Plenty vergleichen. Das verursacht einfach zu viel traffic.
Hierzu hatte ich überlegt die Quell URLs (sind Unique und ändern sich bei Updates) als MD5 zu hashen und das hash dann als BildName anzugeben.
Ich kann momentan bereits über AddItemImages einen Bildnamen übergeben.
Leider bekomme ich den Bild Namen jedoch nicht beim Abfragen der Bilder zurück.
Besteht die Möglichkeit das noch irgendwie hinzuzufügen?

Wenn ich die Plenty API direkt anstoße bekomme ich hier folgendes Array zurück:

"names": [
            {
                "imageId": 147927,
                "lang": "de",
                "name": "e72b291582031aae",
                "alternate": ""
            }
        ]

Viele Grüße
Stefan

Hallo Stefan,

im PlentyGetItemImages Step aind jetzt zwei neue Spalten (Names und AlternateNames) vorhanden. Die Werte werden als Schlüssel-Wert Paare (lang=name bzw. lang=alternate) ausgegeben.

image

Viele Grüße
Torsten

2 „Gefällt mir“

Vielen Dank @synesty-Torsten
:+1:

Wie siehts mit „Bilder ersetzen“ aus @synesty-Torsten?

Wenn ich weder ein einzelnes Bild austauschen kann, noch ein einzelnes Bild löschen, gäbs ja noch einen dritten Weg: ich lösche alle Bilder, und lade sie neu hoch. Ich bin mir aber nicht sicher, ob ich im PlentyAddItemImages eine URL vom Plenty-Server angeben kann (selbstreferenziell quasi), oder die URL stirbt sobald sich das alte Bild löscht, oder welche Fallstricke das sonst noch mit sich bringt.

Eine der ersten beiden Varianten wäre mir deutlich lieber. Aber an sich bin ich allem aufgeschlossen, so lange es zuverlässig funktioniert.

Grüße Daniel

Hi @samenhaus-admin

du könntest alternativ auch per API Call Step die Plenty API direkt anhauen um das Bild zu löschen.
Kostet wohl leider nur extra Connector Steps, da du auch die RestAuthentication einmal machen müsstest.
Die Route dafür ist DELETE /rest/items/{id}/images/{imageId}
Das direkte Austauschen von Bild-URLs ist über die Plenty API auf ersten Blick wohl nicht möglich. Zumindest hat der zugehörige PUT request keinen Parameter dafür.

VG
Stefan

1 „Gefällt mir“

Super, dank dir Stefan!

Wenns die Route gibt, hätte ich sie gern in Synesty nach Möglichkeit :wink:

Bild löschen und neu hochladen ist ja absolut okay für mich. Super wäre halt ohne separaten API Call.

Könnte hier auch durchaus etwas warten, wichtig war uns erst mal, automatisiert die Bilder ins System zu bekommen (das klappt), Aktualisierungen sind erst mal zweitrangig.

Hallo Daniel,

sorry, deine Frage oben habe ich doch glatt übersehen. Wir werden im PlentyAddItemImages noch eine zusätzliche Spalte (Modus) einbauen, die es ermöglicht einzelne Bilder über die DELETE /rest/items/{id}/images/{imageId} zu entfernen. Damit wäre es dann möglich einzelne Bilder zu entfernen (über die imageId) und ein neues Bild hochzuladen.

Viele Grüße,
Torsten

1 „Gefällt mir“

Hallo Daniel,

es ist jetzt ein neuer Modus („Bilder über Zielspalte entfernen“) im PlentyAddItemImages Step vorhanden. Wenn du diesen Modus auswählst, kannst du alle ImageIDs die gelöscht werden sollen, in der Zielespalte RemoveImageIDs Komma separiert angeben.

Viele Grüße
Torsten

1 „Gefällt mir“