Sebbene i metodi CRUD (Create, Read, Update, Delete) di Product
vengano utilizzati per modificare in modo generale gli attributi di un Product
, esiste un insieme di metodi Product
che possono essere utilizzati per aggiornare i campi specifici dell'inventario con diversi livelli di granularità. I seguenti campi Product
sono considerati campi di inventario:
Product.price_info
Product.availability
Product.available_quantity
Product.fulfillment_info
Tutorial sulla configurazione dell'inventario
Questo tutorial mostra come inviare aggiornamenti dell'inventario utilizzando il metodo SetInventory
anziché aggiornare l'intero prodotto.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:
Tutorial sull'aggiunta di fulfillment
Ti consigliamo di utilizzare il metodo AddLocalInventories
anziché AddFulfillmentPlaces
. AddLocalInventories
ottiene gli stessi risultati, ma offre un controllo più granulare sull'importazione dei dati di inventario locale. Per ulteriori informazioni, consulta la documentazione di AddLocalInventories
.
Questo tutorial mostra come aggiornare le informazioni di evasione degli ordini dei prodotti utilizzando il metodo
AddFulfillmentPlaces
. In questo modo, la ricerca può mostrare gli aggiornamenti relativi ai prodotti disponibili e ai relativi ordini. Ad esempio, un acquirente sta cercando jeans blu in un
negozio, ma non sono disponibili. Nel momento in cui i jeans sono di nuovo disponibili in questo
o in un altro negozio, lo shopper vede gli aggiornamenti e può procedere con il suo
ordine.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:
Tutorial sulla rimozione dei luoghi di evasione degli ordini
Ti consigliamo di utilizzare il metodo RemoveLocalInventories
anziché RemoveFulfillmentPlaces
. RmoveLocalInventories
ottiene gli stessi risultati, ma offre un controllo più granulare sull'importazione dei dati di inventario locale. Per ulteriori informazioni, consulta la documentazione di RemoveLocalInventories
.
Questo tutorial mostra come aggiornare le informazioni di evasione degli ordini dei prodotti utilizzando il metodo RemoveFulfillmentPlaces
. In questo modo,
Vertex AI Search for Retail può mostrare aggiornamenti relativi ai prodotti non disponibili e agli ordini
che non possono essere soddisfatti. In questo modo, la rete di ricerca può mostrare aggiornamenti relativi ai prodotti non disponibili e agli ordini che non possono essere evasi. Ad esempio, un acquirente sta cercando jeans blu in un negozio. Se i jeans non sono più disponibili in questo negozio, l'acquirente lo vede e non può procedere con l'ordine.
Per seguire le indicazioni dettagliate per questa attività direttamente nell'editor di Cloud Shell, fai clic su Procedura guidata:
Metodi di aggiornamento dell'inventario
Le modifiche alle informazioni sull'inventario di un prodotto possono verificarsi molto più di frequente rispetto alle modifiche alle informazioni del catalogo. Di conseguenza, viene fornito un insieme specializzato di metodi per gestire grandi volumi di aggiornamenti specifici per l'inventario. Questi metodi sono asincroni grazie alle ottimizzazioni downstream che supportano centinaia di aggiornamenti simultanei per prodotto senza compromettere le prestazioni.
Aggiornamenti incrementali
Tieni presente che ti consigliamo di seguire la guida agli aggiornamenti dell'inventario locale per emettere aggiornamenti incrementali dell'inventario. I metodi API più recenti offrono un controllo più granulare per gli attributi dell'inventario per località.
fulfillment_info
viene spesso utilizzato per codificare la disponibilità di evasione a livello di località per un Product
. In alcuni casi, la disponibilità di evasione degli ordini per alcuni luoghi specifici può cambiare e puoi decidere di pubblicare aggiornamenti che descrivono questa variazione anziché utilizzare il metodo UpdateProduct
per specificare di nuovo le informazioni di evasione degli ordini dell'intero prodotto.
In questi casi, è possibile utilizzare i metodi AddFulfillmentPlaces
e
RemoveFulfillmentPlaces
per
aggiornare in modo incrementale le modifiche all'evasione di un prodotto in base agli ID luogo
che vengono aggiunti o rimossi per un determinato tipo di evasione.
Java
Per scoprire come installare e utilizzare la libreria client per Vertex AI Search per il retail, consulta Librerie client di Vertex AI Search per il retail. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Vertex AI Search per la vendita al dettaglio.
Per autenticarti in Vertex AI Search per il retail, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Proto
{ product: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" type: "pickup-in-store" place_ids: "store0" place_ids: "store1" add_time: { seconds: 100 nanos: 100 } allow_missing: true }
Questo esempio AddFulfillmentPlacesRequest
aggiunge il tipo di evasione"pickup-in-store"
agli ID posizione "store0"
e "store1"
per il prodotto specificato. Poiché
AddFulfillmentPlacesRequest.allow_missing
è impostato su true, anche se il prodotto
non esiste già, le informazioni sull'inventario aggiornate verranno memorizzate per
quando il prodotto verrà finalmente creato. L'aggiornamento è contrassegnato da un timestamp con
AddFulfillmentPlacesRequest.add_time
per evitare che gli aggiornamenti non aggiornati sostituiscano
lo stato di adempimento di questi ID luogo. Queste funzionalità sono descritte in maggiore dettaglio nelle sezioni seguenti.
Il comportamento è identico per RemoveFulfillmentPlacesRequest
e lo schema è molto simile.
Quando fulfillment_types
viene aggiornato da
AddLocalInventories
e
RemoveLocalInventories
, riflette una mappatura da
ogni ID luogo a un elenco di tipi di evasione supportati. Quando
fulfillment_info
viene aggiornato da
AddFulfillmentPlaces
e
RemoveFulfillmentPlaces
, riflette una mappatura
da ogni tipo di evasione degli ordini specifico a un elenco di ID luogo che supporta ciascun
tipo. Entrambi i tipi di API modificano le stesse informazioni di evasione sottostanti e l'effetto di entrambi i tipi di API è riportato da Product.fulfillment_info
.
Aggiornamenti non incrementali
price_info
, availability
e available_quantity
non possono essere aggiornati in modo incrementale perché rappresentano l'inventario a livello di prodotto, anziché le informazioni a livello di luogo. Inoltre, potrebbe essere opportuno emettere aggiornamenti non incrementali per fulfillment_info
anziché solo modifiche incrementali. In questi
casi, è consigliato il metodo SetInventory
.
Java
Per scoprire come installare e utilizzare la libreria client per Vertex AI Search per il retail, consulta Librerie client di Vertex AI Search per il retail. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API Java Vertex AI Search per la vendita al dettaglio.
Per autenticarti in Vertex AI Search per il retail, configura le Credenziali predefinite dell'applicazione. Per ulteriori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.
Proto
{ product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" availability: IN_STOCK fulfillment_info: { type: "pickup-in-store" place_ids: "store0" place_ids: "store1" place_ids: "store2" place_ids: "store3" } fulfillment_info: { type: "same-day-delivery" } } set_time: { seconds: 100 nanos: 100 } set_mask: { paths: "availability" paths: "fulfillment_info" } allow_missing: true }
In questa richiesta specifica, i campi SetInventoryRequest.product.fulfillment_info
sono descrizioni complete degli ID luogo idonei di ciascun tipo di evasione,
diversamente dalle specifiche incrementali. L'aggiornamento a "same-day-delivery"
indica che nessun ID luogo è idoneo per questo tipo di evasione per questo
prodotto. Tutti gli altri tipi di adempimento non vengono aggiornati in questa richiesta. Pertanto, questo metodo può essere utilizzato per sostituire gli ID luogo solo per un sottoinsieme di tipi di evasione, lasciando invariati gli altri tipi.
Per impostazione predefinita,SetInventory
aggiorna tutti i campi dell'inventario seSetInventory.set_mask
non è impostato o è vuoto. Se la maschera non è vuota o se un campo dell'inventario non è elencato esplicitamente in SetInventoryRequest.set_mask
, qualsiasi valore specificato per quel campo dell'inventario verrà ignorato nella richiesta di aggiornamento.
Come per gli aggiornamenti incrementali, il campo SetInventoryRequest.set_time
può essere utilizzato per impostare un'ora di aggiornamento che verrà confrontata con l'ora di aggiornamento registrata più recente di tutti i campi dell'inventario aggiornati.
Protezioni dei timestamp per gli aggiornamenti dell'inventario
Esistono diversi percorsi per aggiornare i campi dell'inventario di un prodotto e, per proteggerti dagli aggiornamenti fuori ordine, a ogni campo dell'inventario è associata un'ora dell'ultimo aggiornamento.
L'ora dell'ultimo aggiornamento viene registrata per price_info
, availability
,
available_quantity
e per ogni coppia di (fulfillment_info.place_ids,
fulfillment_info.type)
.
I metodi AddFulfillmentPlaces
,
RemoveFulfillmentPlaces
e
SetInventory
consentono all'utente che chiama di specificare un'ora di
aggiornamento per il momento in cui viene emessa la richiesta. Questa ora di aggiornamento viene confrontata con l'ora di aggiornamento più recente registrata per i campi dell'inventario pertinenti e l'aggiornamento viene eseguito se e solo se l'ora di aggiornamento è successiva all'ora di aggiornamento più recente.
Ad esempio, supponiamo che per l'ID luogo "store1"
sia attivato il tipo di evasione "pickup-in-
store"
, con l'ora dell'ultimo aggiornamento registrato impostata sull'ora T
. Se
RemoveFulfillmentPlacesRequest.type = "pickup-in-store"
e
RemoveFulfillmentPlacesRequest.place_ids
contengono "store1"
, la richiesta eliminerà "pickup-in-store"
da "store1"
se e solo se
RemoveFulfillmentPlacesRequest.remove_time
è successiva all'ora T
. Lo stesso vale per AddFulfillmentPlacesRequests
.
SetInventory
funziona in modo simile per l'aggiornamento di price_info
,
availability
e available_quantity
. Quando aggiorni fulfillment_info
, un
SetInventoryRequest
chiede implicitamente di aggiungere tutti gli ID luogo specificati per un
determinato tipo di evasione e di rimuovere tutti gli ID luogo esistenti non specificati.
Pertanto, quando viene elaborato SetInventoryRequest
, l'aggiornamento fulfillment_info
viene implicitamente convertito in AddFulfillmentPlacesRequest
e RemoveFulfillmentPlacesRequest
per ogni tipo di evasione degli ordini specificato. Ciò significa che se un luogo esistente "store1"
con evasione "pickup-in-store"
ha un'ora dell'ultimo aggiornamento T
più recente di SetInventoryRequest.set_time
, l'aggiunta/rimozione implicita su "store1"
e "pickup-in-store"
non verrà applicata.
Precaricare le informazioni sull'inventario
Ciascuno dei metodi di aggiornamento dell'inventario consente all'utente che effettua la chiamata di impostare allow_missing
nella richiesta. Quando allow_missing
è impostato su true, un aggiornamento dell'inventario a un Product
non esistente verrà elaborato come se Product
esistesse in base alle specifiche del metodo. Le informazioni sull'inventario verranno conservate per un massimo di due giorni se il Product
corrispondente non viene creato tramite CreateProduct
entro questo periodo di tempo.
Java
Quando utilizzare i metodi Product
Sebbene sia possibile aggiornare i campi dell'inventario con i metodi CRUD di Product, il chiamante deve essere esplicitamente consapevole degli effetti sulle informazioni di inventario esistenti o preesistenti.
Si tratta di metodi sincroni, il che significa che le ottimizzazioni downstream utilizzate per i metodi di inventario non si applicano e potrebbe essere costoso fare affidamento su questi metodi per aggiornamenti frequenti dell'inventario. Ove possibile, preferisci utilizzare i metodi di aggiornamento dell'inventario sopra indicati.
CreateProduct
Quando CreateProduct
viene richiamato con i campi di inventario impostati,
i valori forniti in CreateProductRequest.product
sostituiranno eventuali
valori precaricati per i rispettivi campi. Se non sono impostati campi di inventario,
le informazioni di inventario preesistenti verranno utilizzate automaticamente.
Inoltre, l'ora dell'ultimo aggiornamento per i campi dell'inventario sostituiti verrà reimpostata sull'ora della chiamata al metodo.
CreateProduct
con inventario precaricato
PROTO
{ parent: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch" product_id: "p123" product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" title: "some product" type: VARIANT } }
In questo esempio, per il prodotto creato non sono impostati campi di inventario,
il che significa che tutte le informazioni di inventario precaricate verranno utilizzate automaticamente se
aggiornate utilizzando i metodi di aggiornamento dell'inventario. Questa operazione può essere utile quando gli aggiornamenti dell'inventario sono disaccoppiati dagli aggiornamenti del catalogo e vuoi sincronizzare un Product
appena creato con le informazioni di inventario preesistenti.
CreateProduct
con inventario esplicito
PROTO
{ parent: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch" product_id: "p123" product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" title: "some product" type: VARIANT availability: OUT_OF_STOCK fulfillment_info: { type: "pickup-in-store" } fulfillment_info: { type: "same-day-delivery" } } }
In questo esempio, viene creato un Product
con campi di inventario impostati in modo esplicito.
Questi campi sostituiranno eventuali valori preesistenti, ignorando l'ora dell'ultimo aggiornamento per i campi corrispondenti. Pertanto, per Product
appena creato è garantito che la disponibilità sia impostata su OUT_OF_STOCK
e che nessun ID luogo supporti i tipi di evasione "pickup-in-store"
e "same-day-delivery"
.
CreateProduct
con le informazioni sull'inventario può essere utile se non hai la certezza che tutte le informazioni sull'inventario precaricato siano accurate e preferisci impostare esplicitamente l'inventario al momento della creazione di Product
per sincronizzare completamente il catalogo e l'inventario.
UpdateProduct
Quando viene invocato UpdateProduct
e la maschera di campo
UpdateProductRequest.update_mask
contiene campi di inventario, i valori forniti in UpdateProductRequest.product
sovrascriveranno eventuali valori precaricati
per i rispettivi campi.
Inoltre, l'ora dell'ultimo aggiornamento per i campi dell'inventario sostituiti verrà reimpostata sull'ora della chiamata al metodo.
PROTO
{ product: { name: "projects/123/locations/global/catalogs/default_catalog/branches/default_branch/products/p123" availability: IN_STOCK fulfillment_info: { type: "pickup-in-store" place_ids: "store0" place_ids: "store1" place_ids: "store2" place_ids: "store3" } fulfillment_info: { type: "same-day-delivery" } } update_mask: { paths: "availability" paths: "fulfillment_info" } }
Questo esempio è molto simile all'esempio SetInventory
, tranne per il fatto che l'aggiornamento è garantito indipendentemente dall'ora dell'ultimo aggiornamento di ciascun campo dell'inventario.
UpdateProduct
per l'inventario può essere utile quando è necessaria una sincronizzazione completa delle informazioni sull'inventario, ignorando al contempo le protezioni dei timestamp.
Sebbene sia possibile precaricare le informazioni sull'inventario utilizzando UpdateProduct
impostando UpdateProductRequest.allow_missing
su true
per eseguire un upsert Product
, il metodo richiede l'impostazione di campi del catalogo specifici come UpdateProductRequest.product.title
. Pertanto, ti consigliamo di utilizzare i metodi di aggiornamento dell'inventario per i casi d'uso di precaricamento.
DeleteProduct
Quando viene invocato DeleteProduct
, tutte le informazioni di inventario esistenti per il prodotto specificato in DeleteProductRequest.name
verranno eliminate, inclusi tutti i record dell'ora dell'ultimo aggiornamento per ogni campo di inventario.