Lokales Inventar für Vertex AI Search für den Einzelhandel aktualisieren

LocalInventory sind die Inventarinformationen, die mit einem bestimmten Ort verknüpft sind und durch seine place_id identifiziert werden. Ein LocalInventory kann beispielsweise für ein Geschäft oder eine Region erstellt werden, 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 bis Product.local_inventories sichtbar (mit Ausnahme von fulfillment_types, das aus Gründen der Abwärtskompatibilität über Product.fulfillment_info verfügbar ist). Dieses Feld wird nur ausgegeben. Die Einstellung 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, das in der Dokumentation zur Inventaraktualisierung erwähnt wird. fulfillment_types, der von AddLocalInventories und RemoveLocalInventories wie unten beschrieben aktualisiert wird, spiegelt eine Zuordnung von jeder Orts-ID zu einer Liste der unterstützten Auftragsausführungstypen wider. fulfillment_info, das von AddFulfillmentPlaces und RemoveFulfillmentPlaces aktualisiert wurde, entspricht einer Zuordnung von jedem spezifischen Auftragsausführungstyp zu einer Liste von Orts-IDs, die einen solchen Typ unterstützen. Beide API-Typen ändern jedoch dieselben zugrunde liegenden Auftragsausführungsinformationen und die Auswirkungen beider API-Typen spiegeln sich in Product.fulfillment_info wider.

Methoden zur Aktualisierung von lokalem Inventar

Die lokalen Inventarinformationen eines Produkts können wesentlich häufiger geändert werden als die Kataloginformationen. Es stehen spezielle Methoden zur Verfügung, um große Mengen an inventarspezifischen Aktualisierungen für lokales Inventar zu verarbeiten. Diese Methoden sind aufgrund von nachgelagerten Optimierungen asynchron, die Hunderte von gleichzeitigen Aktualisierungen pro Produkt ohne Leistungseinbußen unterstützen.

AddLocalInventories

AddLocalInventories kann verwendet werden, um lokale Inventare an neuen Orten zu erstellen (die durch neue place_id-Objekte dargestellt werden) oder um vorhandene Felder in vorhandenen lokalen Inventaren zu aktualisieren. Felder, die der Liste der LocalInventory-Einträge im Anfragetext hinzugefügt oder aktualisiert werden, können über AddLocalInventoriesRequest.add_mask angegeben werden. Gültige add_mask-Werte sind:

  • price_info: überschreibt LocalInventory.price_info.
  • attributes: überschreibt alle LocalInventory.attributes. Vorhandene Attribute, die nicht im Anfragetext angegeben sind, werden entfernt.
  • attributes.PLACEHOLDER_NAME: Überschreibt nur das angegebene benutzerdefinierte Attribut. Wenn in der Anfrage kein vorhandener Attributname angegeben ist, 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 sowohl den Wert attributes als auch den Wert attributes.PLACEHOLDER_NAME in derselben Anfrage enthalten.
  • fulfillment_types: überschreibt alle unterstützten Auftragsausführungstypen. Vorhandene Auftragsausführungstypen, die nicht im Anfragetext angegeben sind, 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
}
  

Im Beispiel AddLocalInventoriesRequest werden zwei lokale Inventare mit den Orts-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, aktualisiert die Anfrage die Felder von store1 und erstellt store2 mit den angegebenen Feldwerten.

Dieses AddLocalInventoriesRequest.add_mask gibt an, 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 Attribute, die einem Ort mit anpassbarem Namen und benutzerdefinierten Werten zugeordnet sind. Da LocalInventory von store1 nicht den Wert von attr1 in der Anfrage bereitstellt, wird das benutzerdefinierte Attribut attr1 aus dem vorhandenen LocalInventory von store1 (falls vorhanden) gelöscht. Für store2 wird der Wert des Attributs attr1 auf den Textwert store2_value festgelegt. Andere vorhandene benutzerdefinierte Attribute für 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 einzigen Ort. Sie ist identisch und akzeptiert die gleichen Werte wie fulfillment_info.type. Dieser 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. Vor dieser Aktualisierung vorhandene Auftragsausführungstypen, die nicht in der Anfrage erwähnt werden, werden gelöscht.

Da AddLocalInventoriesRequest.allow_missing auf „true“ gesetzt ist, werden die aktualisierten Informationen zum lokalen Inventar auch dann gespeichert, wenn das Produkt schließlich erstellt wird. Der Zeitstempel der Aktualisierung enthält AddLocalInventoriesRequest.add_time, damit die angegebenen Felder dieser Orts-IDs nicht durch veraltete Aktualisierungen überschrieben werden. Weitere Informationen dazu, wie Sie veraltete Aktualisierungen verhindern und Informationen zum lokalen Inventar speichern, bevor das Produkt erstellt wird, finden Sie unter Zeitstempelschutz für Aktualisierungen des lokalen Inventars und Inventarinformationen vorab laden.

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
  }
}
  

Mit dem Beispiel AddLocalInventoriesRequest wird ein einzelnes lokales Inventar mit der Orts-ID "store3" für das angegebene Produkt hinzugefügt oder aktualisiert. Da seine add_mask "attributes" enthält, werden alle vorhandenen benutzerdefinierten Attribute von store3 gelöscht und wie in der Anfrage angegeben durch attr1 und attr2 ersetzt. Da allow_missing nicht festgelegt ist, muss das angegebene Produkt vorhanden sein. Andernfalls wird der Fehler NOT_FOUND ausgegeben.

RemoveLocalInventories

Mit RemoveLocalInventories lassen sich vorhandene lokale Inventare an Orten mit Orts-IDs entfernen.

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
}
  

Im Beispiel RemoveLocalInventoriesRequest werden lokale Inventare für Orte mit den Orts-IDs "store1" und "store2" für das angegebene Produkt entfernt. Der Zeitstempel der Aktualisierung hat RemoveLocalInventoriesRequest.remove_time, damit das Löschen dieser Orts-IDs nicht durch veraltete Aktualisierungen überschrieben wird. Für angegebene Orts-IDs ohne lokale Inventare wird in der Anfrage auch die Aktualisierungszeit auf remove_time erfasst. Weitere Informationen zu Zeitstempeln für Updates finden Sie unter Zeitstempelschutz für Aktualisierungen des lokalen Inventars.

Zeitstempelschutz bei Aktualisierung des lokalen Inventars

Zum Schutz vor Aktualisierungen außerhalb der Reihenfolge ist jedem lokalen Inventarfeld eine letzte Aktualisierungszeit zugeordnet.

Die letzte Aktualisierungszeit wird für jedes (place_id, price_info)-, (place_id, attributes[...])- und (place_id, fulfillment_types[...])-Paar aufgezeichnet.

Mit den Methoden AddLocalInventories und RemoveLocalInventories kann der Aufrufer eine Aktualisierungszeit für die Ausgabe der Anfrage angeben. Diese Aktualisierungszeit wird mit der letzten Aktualisierungszeit verglichen, die für die entsprechenden Inventarfelder erfasst wurde. Die Aktualisierung wird nur dann durchgeführt, wenn die Aktualisierungszeit strikt nach der letzten Aktualisierung liegt.

Angenommen, für die Orts-ID "store1" ist price_info angegeben, wobei die letzte aufgezeichnete Aktualisierungszeit auf T festgelegt ist. Wenn RemoveLocalInventoriesRequest.place_ids "store1" enthält, entfernt die Anfrage price_info nur dann aus "store1", wenn RemoveLocalInventoriesRequest.remove_time nach dem Zeitpunkt T liegt. Dasselbe gilt für RemoveLocalInventoriesRequests.

Beim Zeitstempelschutz ist es möglich, dass ein RemoveLocalInventoriesRequest nur bestimmte Felder eines LocalInventory anstelle aller Felder entfernt. Angenommen, für ein lokales Inventar mit der Orts-ID "store1" ist der price_info mit der letzten aufgezeichneten Aktualisierungszeit auf T1 festgelegt und das einzige vorhandene benutzerdefinierte Attribut mit dem Namen "attr1" ist der letzte aufgezeichnete Aktualisierungszeitpunkt um T2. Wenn ein RemoveLocalInventoriesRequest.place_ids "store1" enthält und remove_time auf T3 gesetzt ist (wobei T1 < T3 < T2), wird price_info von store_1 von store_1 entfernt. Das Attribut attr1 bleibt unverändert.

Inventarinformationen vorab laden

Mit jeder der Methoden zur Aktualisierung des lokalen Inventars kann der Aufrufer allow_missing in der Anfrage festlegen. Wenn allow_missing auf „true“ gesetzt ist, wird das lokale Inventar in eine nicht vorhandene Product aktualisiert, als ob die Product gemäß den Methodenspezifikationen vorhanden ist. Die Informationen zum lokalen Inventar werden maximal zwei Tage aufbewahrt, wenn die entsprechende Product nicht innerhalb dieses Zeitraums über CreateProduct erstellt wird.