Lokales Inventar für Vertex AI Search for Retail aktualisieren

LocalInventory sind die Inventarinformationen, die mit einer bestimmten mit place_id gekennzeichnet ist. Ein LocalInventory könnte beispielsweise die für ein Geschäft oder eine Region erstellt wurden, in der ein bestimmter Preis verfügbar ist. LocalInventory enthält die folgenden Felder:

  • LocalInventory.price_info
  • LocalInventory.attributes
  • LocalInventory.fulfillment_types

Vorhandene LocalInventory-Einträge sind sichtbar über Product.local_inventories (mit Ausnahme von fulfillment_types, aus Gründen der Abwärtskompatibilität, Product.fulfillment_info. Dieses Feld dient nur der Ausgabe. Die Einstellung von Product.local_inventories für Product-CRUD-APIs oder SetInventory hat keine Auswirkungen.

Jedes (LocalInventory.place_id, LocalInventory.fulfillment_types[...])-Paar verweist auf dasselbe (fulfillment_info.place_ids, fulfillment_info.type)-Paar erwähnt im Dokumentation zur Inventaraktualisierung fulfillment_types, das durch AddLocalInventories und RemoveLocalInventories aktualisiert wird (siehe unten), stellt eine Zuordnung von jeder Orts-ID zu einer Liste der unterstützten Auftragsausführungstypen dar. fulfillment_info, das durch AddFulfillmentPlaces und RemoveFulfillmentPlaces aktualisiert wird, stellt eine Zuordnung von jedem Auftragsausführungstyp zu einer Liste der Orts-IDs dar, die diesen Typ unterstützen. Beide API-Typen ändern jedoch dieselben zugrunde liegenden Informationen zur Auftragsausführung und die Auswirkungen beider API-Typen werden auf Product.fulfillment_info angewendet.

Methoden zur Aktualisierung von lokalem Inventar

Änderungen an den Informationen zum lokalen Inventar eines Produkts können wesentlich häufiger erfolgen als Änderungen an seinen Kataloginformationen. Ein spezialisiertes Set Methoden bereitgestellt werden, um große Mengen Aktualisierungen. Diese Methoden sind asynchron aufgrund von nachgelagerten Optimierungen, die Hunderte von gleichzeitigen Aktualisierungen pro Produkt unterstützen, ohne die Leistung zu beeinträchtigen.

AddLocalInventories

Mit AddLocalInventories können Sie lokale Inventare an neuen Orten erstellen (dargestellt durch neue place_ids) oder vorhandene Felder in vorhandenen lokalen Inventaren aktualisieren. Felder, die in der Spalte Liste mit LocalInventory-Einträgen im Anfragetext kann angegeben werden durch AddLocalInventoriesRequest.add_mask. Gültige add_mask-Werte sind:

  • price_info: überschreibt LocalInventory.price_info.
  • attributes: Alle LocalInventory.attributes werden überschrieben. Vorhandene Attribute, die nicht im Anfragetext vorkommen, werden entfernt.
  • attributes.PLACEHOLDER_NAME: überschreibt nur das angegebene benutzerdefinierte Attribut. Wenn in der Anfrage kein vorhandener Attributname angegeben wird, wird das Attribut gelöscht. Es können mehrere attributes.PLACEHOLDER_NAME angegeben werden, solange die einzelnen Attributnamen unterschiedlich sind. AddLocalInventoriesRequest.add_mask kann jedoch nicht den Wert attributes und attributes.PLACEHOLDER_NAME in derselben Anfrage enthalten.
  • fulfillment_types: überschreibt alle unterstützten Auftragsausführungstypen. Vorhandene Auftragsausführungstypen, die im Anfragetext nicht erwähnt werden, werden entfernt.

Proto

{
  product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
  local_inventories: {
    place_id: "store1"
    price_info: {
      currency_code: "USD"
      price: 100
      original_price: 110
      cost: 95
    }
    fulfillment_types: "pickup-in-store"
    fulfillment_types: "ship-to-store"
  }
  local_inventories: {
    place_id: "store2"
    price_info: {
      currency_code: "USD"
      price: 200
      original_price: 210
      cost: 195
    }
    attributes: {
      key: "attr1",
      value: {
        text: "store2_value"
      }
    }
    fulfillment_types: "custom-type-1"
  }
  add_mask: {
    paths: "price_info"
    paths: "attributes.attr1"
    paths: "fulfillment_types"
  }
  add_time: {
    seconds: 100
    nanos: 100
  }
  allow_missing: true
}
  

In diesem Beispiel AddLocalInventoriesRequest werden zwei lokale Inventare mit den Standort-IDs "store1" und "store2" für das angegebene Produkt hinzugefügt oder aktualisiert. Wenn store1 vorhanden ist und store2 vor der Anfrage nicht vorhanden ist, werden durch die Anfrage die Felder von store1 aktualisiert und store2 mit den angegebenen Feldwerten erstellt.

Mit diesem AddLocalInventoriesRequest.add_mask wird angegeben, dass price_info, ein einzelnes benutzerdefiniertes Attribut mit dem Namen "attr1", und fulfillment_types mit den in AddLocalInventoriesRequest.local_inventories angegebenen Werten aktualisiert werden sollen.

attributes sind mit einem Ort verknüpfte Attribute mit anpassbarem Namen und Werte. Da LocalInventory von store1 nicht den Wert von attr1 liefert in der Anfrage wird das benutzerdefinierte Attribut attr1 aus dem vorhandenen LocalInventory von store1, falls vorhanden. Für store2 ist der Wert des Attributs attr1 auf den Textwert store2_value festgelegt. Andere vorhandene benutzerdefinierte Attribute auf store1 und store2 bleiben unverändert.

fulfillment_types steht für eine Liste der Verfügbarkeit der Auftragsausführung für eine Product an einem zentralen Ort. Es ist dasselbe und akzeptiert dieselben Werte wie fulfillment_info.type. Diese AddLocalInventoriesRequest gibt an, dass store1 die Auftragsausführungstypen pickup-in-store und ship-to-store unterstützt, während store1 custom-type-1 unterstützt. Auftragsausführungstypen, die vor dieser Aktualisierung vorhanden waren und nicht in der Anfrage erwähnt werden, werden gelöscht.

Da AddLocalInventoriesRequest.allow_missing auf „true“ gesetzt ist, Produkt nicht bereits vorhanden ist, werden die aktualisierten Informationen zum lokalen Inventar für den Zeitpunkt der Produkterstellung gespeichert werden. Die Aktualisierung ist mit einem Zeitstempel versehen, der mit AddLocalInventoriesRequest.add_time versehen ist, um zu verhindern, dass veraltete Aktualisierungen die angegebenen Felder dieser Orts-IDs überschreiben. Weitere Informationen dazu, wie Sie veraltete Aktualisierungen und die Speicherung von Informationen zum lokalen Inventar, bevor das Produkt erstellt haben, siehe Zeitstempelschutz für Aktualisierungen von lokalem Inventar und Inventarinformationen werden vorab geladen.

Proto

{
  product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
  local_inventories: {
    place_id: "store3"
    attributes: {
      key: "attr1",
      value: {
        text: "attr1_value"
      }
    }
    attributes: {
      key: "attr2",
      value: {
        numbers: 123
      }
    }
  }
  add_mask: {
    paths: "attributes"
  }
  add_time: {
    seconds: 100
    nanos: 100
  }
}
  

In diesem Beispiel AddLocalInventoriesRequest wird eine einzelne lokale Inventar mit der Orts-ID "store3" für das angegebene Produkt. Da das add_mask von store3 "attributes" enthält, werden alle vorhandenen benutzerdefinierten Attribute von store3 gelöscht und durch attr1 und attr2 ersetzt, wie in der Anfrage angegeben. Da allow_missing nicht festgelegt ist, muss das angegebene Produkt vorhanden sein. Andernfalls wird der Fehler NOT_FOUND ausgegeben.

RemoveLocalInventories

RemoveLocalInventories kann zum Entfernen verwendet werden vorhandene lokale Verzeichnisse an Orten mit vorgegebenen Orts-IDs.

Proto

{
  product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123"
  place_ids: "store1"
  place_ids: "store2"
  remove_time: {
    seconds: 100
    nanos: 100
  }
  allow_missing: true
}
  

In diesem Beispiel RemoveLocalInventoriesRequest wird lokales Inventar für Standorte mit den Standort-IDs "store1" und "store2" für das angegebene Produkt entfernt. Die Aktualisierung ist mit einem Zeitstempel versehen, der mit RemoveLocalInventoriesRequest.remove_time versehen ist, um zu verhindern, dass veraltete Aktualisierungen das Löschen dieser Orts-IDs überschreiben. Für angegebene Orts-IDs ohne vorhandenes lokales Inventar wird in der Anfrage auch die Aktualisierungszeit auf remove_time festgelegt. Weitere Informationen zu Zeitstempeln für Aktualisierungen finden Sie unter Zeitstempelschutz für lokale Inventaraktualisierungen.

Zeitstempelschutz für Aktualisierungen des lokalen Inventars

Zum Schutz vor Out-of-Order-Aktualisierungen ist jedes lokale Inventarfeld mit einer letzten Aktualisierungszeit verknüpft.

Für jeden (place_id, price_info) wird die letzte Aktualisierungszeit aufgezeichnet. (place_id, attributes[...]) und (place_id, fulfillment_types[...]) Paar zusammen.

Mit den Methoden AddLocalInventories und RemoveLocalInventories kann der Aufrufer eine Aktualisierungszeit der Anfrage angeben. Zeitpunkt der Aktualisierung: verglichen mit der letzten Aktualisierungszeit für das relevante Inventar und die Aktualisierung wird nur dann übernommen, wenn der Aktualisierungszeitpunkt strikt ist. nach der letzten Aktualisierung.

Beispiel: Für die Orts-ID "store1" ist price_info festgelegt, wobei die letzte aufgezeichnete Aktualisierungszeit auf Zeit T gesetzt ist. Wenn RemoveLocalInventoriesRequest.place_ids "store1" enthält, wird im Rahmen des Antrags price_info aus "store1" entfernt Nur wenn RemoveLocalInventoriesRequest.remove_time nach dem T liegt. Dasselbe gilt für RemoveLocalInventoriesRequest-Werte.

Im Zeitstempelschutz ist es möglich, Mit RemoveLocalInventoriesRequest werden möglicherweise nur bestimmte Felder einer LocalInventory. Angenommen, für ein lokales Inventar mit der Orts-ID "store1" ist price_info mit der letzten aufgezeichneten Aktualisierungszeit T1 festgelegt. Das einzige vorhandene benutzerdefinierte Attribut mit dem Namen "attr1" hat die letzte aufgezeichnete Aktualisierungszeit T2. Wenn ein RemoveLocalInventoriesRequest.place_ids-Objekt enthält, "store1" und remove_time auf T3 gesetzt ist (wobei T1 < T3 < T2), dann price_info von store_1 wird entfernt, während sein Attribut attr1 den unberührt bleiben.

Inventarinformationen vorab laden

Bei jeder der Methoden zur Aktualisierung des lokalen Inventars kann der Aufrufer Folgendes festlegen: allow_missing in der Anfrage. Wenn allow_missing auf „wahr“ gesetzt ist, wird eine lokale Inventaraktualisierung auf ein nicht vorhandenes Product verarbeitet, als wäre das Product gemäß den Methodenspezifikationen vorhanden. Die Informationen zum lokalen Inventar werden maximal zwei Tage lang aufbewahrt, wenn der entsprechende Product innerhalb dieses Zeitraums nicht über CreateProduct erstellt wird.