Aggiornare l'inventario locale per Vertex AI Search per la vendita al dettaglio

LocalInventory è le informazioni sull'inventario associate a un determinato luogo, identificate dal relativo place_id. Ad esempio, potresti creare un LocalInventory per un negozio o una regione in cui è disponibile un determinato prezzo. LocalInventory contiene i seguenti campi:

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

Le voci LocalInventory esistenti sono visibili tramite Product.local_inventories (ad eccezione di fulfillment_types che, per compatibilità con le versioni precedenti, è disponibile tramite Product.fulfillment_info). Questo campo è solo di output. L'impostazione di Product.local_inventories per le API CRUD Product o SetInventory non ha alcun effetto.

Ogni coppia (LocalInventory.place_id, LocalInventory.fulfillment_types[...]) punta alla stessa coppia (fulfillment_info.place_ids, fulfillment_info.type) menzionata nella documentazione sull'aggiornamento dell'inventario. fulfillment_types aggiornato da AddLocalInventories e RemoveLocalInventories descritto di seguito riflette una mappatura di ciascun ID luogo a un elenco dei tipi di evasione degli ordini supportati, mentre l'aggiornamento di fulfillment_info tramite AddFulfillmentPlaces e RemoveFulfillmentPlaces riflette una mappatura di ogni tipo di evasione specifico a un elenco di ID luogo che supporta questo tipo. Tuttavia, entrambi i tipi di API stanno modificando le stesse informazioni di fulfillment sottostanti e l'effetto di entrambi i tipi di API si rifletterà in Product.fulfillment_info.

Metodi di aggiornamento dell'inventario locale

Le modifiche alle informazioni dell'inventario locale di un prodotto possono essere apportate molto più spesso delle modifiche alle informazioni del catalogo. Viene fornito un set di metodi specializzati per gestire grandi volumi di aggiornamenti specifici dell'inventario locale. Questi metodi sono asincroni per via delle ottimizzazioni downstream che supportano centinaia di aggiornamenti simultanei per prodotto, senza sacrificare le prestazioni.

AddLocalInventories

AddLocalInventories può essere utilizzato per creare inventari locali in nuovi luoghi (rappresentati con nuovi place_id) o aggiornare i campi esistenti negli inventari locali esistenti. I campi aggiunti o aggiornati nell'elenco di voci LocalInventory nel corpo della richiesta possono essere specificati tramite AddLocalInventoriesRequest.add_mask. I valori add_mask validi sono:

  • price_info: sovrascrive LocalInventory.price_info.
  • attributes: sovrascrive tutti i LocalInventory.attributes. Gli attributi esistenti non menzionati nel corpo della richiesta vengono rimossi.
  • attributes.PLACEHOLDER_NAME: sovrascrive solo l'attributo personalizzato specificato. Se nella richiesta non viene fornito il nome di un attributo esistente, l'attributo viene eliminato. È possibile specificare più attributes.PLACEHOLDER_NAME, purché ogni nome di attributo sia diverso. Tuttavia, AddLocalInventoriesRequest.add_mask non può includere nella stessa richiesta sia il valore attributes sia i valori attributes.PLACEHOLDER_NAME.
  • fulfillment_types: sovrascrive tutti i tipi di evasione degli ordini supportati. I tipi di evasione degli ordini esistenti non menzionati nel corpo della richiesta vengono rimossi.

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
}
  

Questo esempio AddLocalInventoriesRequest aggiunge o aggiorna due inventari locali con gli ID luogo "store1" e "store2" per il prodotto specificato. Se store1 esiste, ma store2 non esiste prima della richiesta, la richiesta aggiornerà i campi di store1 e creerà store2 con i valori dei campi specificati.

Questo AddLocalInventoriesRequest.add_mask specifica che price_info, un singolo attributo personalizzato con nome "attr1", e fulfillment_types devono essere aggiornati utilizzando i valori forniti nel AddLocalInventoriesRequest.local_inventories.

attributes sono attributi associati a un luogo con nome e valori personalizzabili. Poiché LocalInventory di store1 non fornisce il valore di attr1 nella richiesta, l'attributo personalizzato attr1 verrà eliminato dal valore LocalInventory di store1 esistente, se esistente. Per store2 il valore dell'attributo attr1 sarà impostato su un valore di testo store2_value. Gli altri attributi personalizzati esistenti su store1 e store2 rimangono invariati.

fulfillment_types rappresenta un elenco di disponibilità di evasione degli ordini per un Product in un singolo luogo. È uguale e accetta gli stessi valori di fulfillment_info.type. Questo criterio AddLocalInventoriesRequest specifica che store1 supporta i tipi di evasione degli ordini pickup-in-store e ship-to-store, mentre store1 supporta custom-type-1. I tipi di evasione esistenti prima di questo aggiornamento non menzionati nella richiesta verranno eliminati.

Poiché AddLocalInventoriesRequest.allow_missing è impostato su true, anche se il prodotto non esiste già, le informazioni aggiornate dell'inventario locale verranno memorizzate per quando il prodotto verrà creato. L'aggiornamento ha un timestamp con AddLocalInventoriesRequest.add_time per evitare che gli aggiornamenti obsoleti eseguino la sostituzione dei campi specificati di questi ID luogo. Per scoprire di più su come evitare aggiornamenti inattivi e archiviare le informazioni dell'inventario locale prima della creazione del prodotto, consulta Protezioni timestamp per gli aggiornamenti di inventario locale e Precaricamento delle informazioni sull'inventario.

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

Questo AddLocalInventoriesRequest di esempio aggiunge o aggiorna un singolo inventario locale con ID luogo "store3" per il prodotto specificato. Poiché add_mask contiene "attributes", tutti gli attributi personalizzati esistenti di store3 vengono eliminati e sostituiti con attr1 e attr2 come specificato nella richiesta. Tieni presente che, poiché allow_missing non è impostato, richiede l'esistenza del prodotto specificato. In caso contrario, viene visualizzato un errore NOT_FOUND.

RemoveLocalInventories

Puoi utilizzare RemoveLocalInventories per rimuovere gli inventari locali esistenti nei luoghi con gli ID luogo specificati.

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 questo esempio RemoveLocalInventoriesRequest vengono rimossi gli inventari locali per i luoghi con ID luogo "store1" e "store2" per il prodotto specificato. L'aggiornamento ha un timestamp con RemoveLocalInventoriesRequest.remove_time per evitare che gli aggiornamenti inattivi sostituiscano l'eliminazione di questi ID luogo. Per gli ID luogo specificati senza inventari locali esistenti, la richiesta registra anche l'ora di aggiornamento in remove_time. Per saperne di più sui timestamp dell'aggiornamento, consulta Protezioni timestamp per gli aggiornamenti dell'inventario locale

Protezioni timestamp per gli aggiornamenti dell'inventario locale

Per evitare aggiornamenti non disponibili, ogni campo di inventario locale è associato a un orario di aggiornamento dell'ultimo aggiornamento.

L'ora dell'ultimo aggiornamento viene registrata per ogni coppia (place_id, price_info), (place_id, attributes[...]) e (place_id, fulfillment_types[...]).

I metodi AddLocalInventories e RemoveLocalInventories consentono al chiamante di specificare un orario di aggiornamento per l'emissione della richiesta. La data e l'ora dell'aggiornamento vengono confrontate con quelle dell'ultimo aggiornamento registrate per i campi dell'inventario pertinenti e l'aggiornamento viene confermato solo se la data/ora dell'aggiornamento è successiva all'ora dell'ultimo aggiornamento.

Ad esempio, supponiamo che l'ID luogo "store1" abbia price_info con l'ora dell'ultimo aggiornamento registrato impostata sull'ora T. Se RemoveLocalInventoriesRequest.place_ids contiene "store1", la richiesta rimuoverà price_info da "store1" solo se RemoveLocalInventoriesRequest.remove_time è successiva all'ora T. Lo stesso vale per i RemoveLocalInventoriesRequest.

Nella protezione dal timestamp, è possibile che un elemento RemoveLocalInventoriesRequest rimuova solo alcuni campi di un LocalInventory e non tutti. Supponiamo che un inventario locale con ID luogo "store1" abbia price_info con ora dell'ultimo aggiornamento registrata impostata sulle ore T1 e abbia il suo unico attributo personalizzato esistente denominato "attr1" con ora dell'ultimo aggiornamento registrato alle ore T2. Se un elemento RemoveLocalInventoriesRequest.place_ids contiene "store1" e remove_time è impostato su T3 (dove T1 < T3 < T2), il price_info di store_1 verrà rimosso, mentre il suo attributo attr1 rimarrà invariato.

Precaricamento delle informazioni sull'inventario

Ciascuno dei metodi di aggiornamento dell'inventario locale consente al chiamante di impostare allow_missing nella richiesta. Quando il criterio allow_missing viene impostato su true, l'aggiornamento dell'inventario locale a un Product inesistente viene elaborato come se il Product esistesse in base alle specifiche del metodo. Le informazioni sull'inventario locale verranno conservate per un massimo di due giorni se il valore Product corrispondente non viene creato tramite CreateProduct entro questo periodo di tempo.