Même si les méthodes CRUD (création, lecture, mise à jour et suppression) Product
sont utilisées pour modifier de manière générale les attributs d'un objet Product
, il existe un ensemble de méthodes Product
qui peuvent être utilisées pour mettre à jour des champs spécifiques à l'inventaire avec différents niveaux de précision. Les champs Product
suivants sont considérés comme des champs d'inventaire :
Product.price_info
Product.availability
Product.available_quantity
Product.fulfillment_info
Configurer l'inventaire
Ce tutoriel explique comment mettre à jour l'inventaire à l'aide de la méthode SetInventory
plutôt que de mettre à jour l'intégralité du produit.
Pour obtenir des instructions détaillées sur cette tâche directement dans l'éditeur Cloud Shell, cliquez sur Visite guidée :
Ajouter des lieux de traitement
Nous vous recommandons d'utiliser la méthode AddLocalInventories
plutôt que AddFulfillmentPlaces
. AddLocalInventories
obtient les mêmes résultats, mais offre un contrôle plus précis de l'ingestion des données d'inventaire en magasin. Pour en savoir plus, reportez-vous à la documentation AddLocalInventories
.
Ce tutoriel explique comment mettre à jour les informations de traitement des produits à l'aide de la méthode AddFulfillmentPlaces
. De cette manière, la recherche peut afficher des informations sur les produits disponibles et les commandes pouvant être traitées. Par exemple, un client recherche un jean bleu dans un magasin, mais il n'est pas en stock. Dès que le jean est de nouveau en stock dans ce magasin ou dans un autre, le client voit les mises à jour et peut passer sa commande.
Pour obtenir des instructions détaillées sur cette tâche directement dans l'éditeur Cloud Shell, cliquez sur Visite guidée :
Supprimer des lieux de traitement
Nous vous recommandons d'utiliser la méthode RemoveLocalInventories
plutôt que RemoveFulfillmentPlaces
. RmoveLocalInventories
obtient les mêmes résultats, mais offre un contrôle plus précis de l'ingestion des données d'inventaire en magasin. Pour en savoir plus, reportez-vous à la documentation RemoveLocalInventories
.
Ce tutoriel explique comment mettre à jour les informations de traitement des produits à l'aide de la méthode RemoveFulfillmentPlaces
. De cette façon, Vertex AI Search pour le commerce peut afficher des informations sur les produits qui ne sont pas disponibles et les commandes qui ne peuvent pas être traitées. De cette façon, la recherche peut afficher des informations lorsque des produits ne sont pas disponibles et que les commandes ne peuvent pas être traitées. Par exemple, un client recherche un jean bleu dans un magasin. Si les jeans ne sont plus en stock dans ce magasin, l'acheteur le voit et ne peut pas passer commande.
Pour obtenir des instructions détaillées sur cette tâche directement dans l'éditeur Cloud Shell, cliquez sur Visite guidée :
Méthodes de mise à jour de l'inventaire
Les modifications d'informations d'inventaire d'un produit peuvent survenir beaucoup plus fréquemment que les modifications de ses informations de catalogue. De ce fait, un ensemble de méthodes spécialisées est fourni pour gérer de grands volumes de mises à jour spécifiques à l'inventaire. Ces méthodes sont asynchrones en raison des optimisations en aval qui permettent d'accepter des centaines de mises à jour simultanées par produit, sans compromis sur les performances.
Mises à jour incrémentielles
Notez qu'il est recommandé de suivre le guide des mises à jour d'inventaire en magasin pour effectuer des mises à jour incrémentielles de l'inventaire. Les nouvelles méthodes d'API offrent un contrôle plus précis des attributs d'inventaire par établissement.
fulfillment_info
est souvent utilisé pour encoder la disponibilité de fulfillment au niveau du lieu pour un Product
. Dans certains cas, la disponibilité de fulfillment pour certains lieux spécifiques peut changer. Vous pouvez décider de publier des mises à jour décrivant cette modification plutôt que d'utiliser la méthode UpdateProduct
pour spécifier à nouveau l'intégralité des informations de fulfillment du produit.
Dans ce cas, les méthodes AddFulfillmentPlaces
et RemoveFulfillmentPlaces
peuvent être utilisées pour mettre à jour de manière incrémentielle les modifications de fulfillment d'un produit en fonction des ID de lieu qui sont ajoutés ou supprimés pour un type de fulfillment donné.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour Vertex AI Search for retail, consultez la page Bibliothèques clientes Vertex AI Search for retail. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Search for retail Java.
Pour vous authentifier auprès de Vertex AI Search pour le commerce, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
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 }
Cet exemple AddFulfillmentPlacesRequest
ajoute le type de fulfillment "pickup-in-store"
aux ID de lieu "store0"
et "store1"
pour le produit spécifié. Étant donné que AddFulfillmentPlacesRequest.allow_missing
est défini sur "true", même si le produit n'existe pas déjà, les informations d'inventaire mises à jour seront stockées pour être utilisées une fois le produit créé. La mise à jour est horodatée par AddFulfillmentPlacesRequest.add_time
afin d'empêcher les mises à jour obsolètes d'ignorer l'état de fulfillment pour ces ID de lieu. Ces fonctionnalités sont décrites plus en détail dans les sections suivantes.
Le comportement de RemoveFulfillmentPlacesRequest
est identique et le schéma est très similaire.
Lorsque fulfillment_types
est mis à jour par AddLocalInventories
et RemoveLocalInventories
, il reflète une mise en correspondance de chaque ID de lieu avec une liste des types de traitement compatibles. Lorsque fulfillment_info
est mis à jour par AddFulfillmentPlaces
et RemoveFulfillmentPlaces
, il reflète un mappage de chaque type de traitement spécifique à une liste d'ID de lieu compatibles avec chaque type. Les deux types d'API modifient les mêmes informations de traitement sous-jacentes, et l'effet des deux types d'API est reflété par Product.fulfillment_info
.
Mises à jour non incrémentielles
price_info
, availability
et available_quantity
ne peuvent pas être mis à jour de manière incrémentielle, car ils représentent l'inventaire au niveau du produit plutôt que des informations au niveau du lieu. De plus, il peut être souhaitable de publier des mises à jour non incrémentielles sur fulfillment_info
plutôt que de n'effectuer que des modifications incrémentielles. Dans ce cas, la méthode SetInventory
est recommandée.
Java
Pour savoir comment installer et utiliser la bibliothèque cliente pour Vertex AI Search for retail, consultez la page Bibliothèques clientes Vertex AI Search for retail. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Search for retail Java.
Pour vous authentifier auprès de Vertex AI Search pour le commerce, configurez les Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.
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 }
Dans cette requête spécifique, les champs SetInventoryRequest.product.fulfillment_info
sont des descriptions complètes des ID de lieu éligibles pour chaque type de fulfillment plutôt que des spécifications incrémentielles. La mise à jour de "same-day-delivery"
indique qu'aucun ID de lieu n'est éligible pour ce type de fulfillment pour ce produit. Tous les autres types de fulfillment ne sont pas mis à jour dans cette requête. Ainsi, cette méthode peut être utilisée pour remplacer les ID de lieu de seulement un sous-ensemble de types de fulfillment, tout en laissant les autres types inchangés.
Par défaut, SetInventory
met à jour tous les champs d'inventaire si SetInventory.set_mask
n'est pas défini ou est vide. Si le masque n'est pas vide ou si un champ d'inventaire n'est pas explicitement répertorié dans SetInventoryRequest.set_mask
, toute valeur spécifiée pour ce champ d'inventaire sera ignorée dans la requête de mise à jour.
Comme pour les mises à jour incrémentielles, le champ SetInventoryRequest.set_time
peut être utilisé pour définir une heure de mise à jour qui sera comparée à la dernière heure de mise à jour enregistrée de tous les champs d'inventaire mis à jour.
Protections d'horodatage pour les mises à jour d'inventaire
Il existe plusieurs chemins pour mettre à jour les champs d'inventaire d'un produit. Pour se protéger contre les mises à jour désordonnées, chaque champ d'inventaire est associé à une heure de dernière mise à jour.
L'heure de dernière mise à jour est enregistrée pour price_info
, availability
, available_quantity
et chaque paire de (fulfillment_info.place_ids,
fulfillment_info.type)
.
Les méthodes AddFulfillmentPlaces
, RemoveFulfillmentPlaces
et SetInventory
permettent à l'appelant de spécifier une heure de mise à jour pour le moment où la requête est émise. Cette heure de mise à jour est comparée à l'heure de dernière mise à jour enregistrée pour les champs d'inventaire concernés. La mise à jour n'est validée que si elle est strictement postérieure à l'heure de dernière mise à jour.
Par exemple, supposons que l'ID de lieu "store1"
dispose du type de fulfillment "pickup-in-
store"
, avec T
comme heure de dernière mise à jour enregistrée. Si RemoveFulfillmentPlacesRequest.type = "pickup-in-store"
et RemoveFulfillmentPlacesRequest.place_ids
contiennent "store1"
, la requête effacera "pickup-in-store"
de "store1"
si et seulement si RemoveFulfillmentPlacesRequest.remove_time
est postérieur à T
. Il en va de même pour AddFulfillmentPlacesRequests
.
SetInventory
fonctionne de la même manière pour mettre à jour price_info
, availability
et available_quantity
. Lors de la mise à jour de fulfillment_info
, une requête SetInventoryRequest
demande implicitement d'ajouter tous les ID de lieu spécifiés pour un type de fulfillment donné et de supprimer tous les ID de lieu existants non spécifiés.
Ainsi, lorsque le SetInventoryRequest
est traité, la mise à jour de fulfillment_info
est implicitement convertie en AddFulfillmentPlacesRequest
et RemoveFulfillmentPlacesRequest
pour chaque type de fulfillment spécifié. Cela signifie que si un emplacement existant "store1"
avec le fulfillment "pickup-in-store"
a une date et une heure de dernière mise à jour T
plus récentes que SetInventoryRequest.set_time
, l'ajout/la suppression implicite sur "store1"
et "pickup-in-store"
ne sera pas appliqué.
Précharger les informations d'inventaire
Chacune des méthodes de mise à jour d'inventaire permet à l'appelant de définir allow_missing
dans la requête. Lorsque allow_missing
est défini sur "true", une mise à jour d'inventaire vers un Product
inexistant est traitée comme si l'objet Product
existait et conformément aux spécifications de la méthode. Les informations d'inventaire sont conservées pendant deux jours au maximum si la valeur Product
correspondante n'est pas créée via CreateProduct
dans ce délai.
Java
Quand utiliser les méthodes Product
Bien qu'il soit possible de mettre à jour les champs d'inventaire avec les méthodes CRUD de produit, l'appelant doit bien comprendre les effets d'une telle modification sur les informations d'inventaire existantes ou préexistantes.
Ces méthodes sont synchrones, ce qui signifie que les optimisations en aval utilisées pour les méthodes d'inventaire ne s'appliquent pas et qu'il peut s'avérer coûteux de s'appuyer sur ces méthodes pour des mises à jour d'inventaire fréquentes. Dans la mesure du possible, préférez l'utilisation des méthodes de mise à jour d'inventaire mentionnées ci-dessus.
CreateProduct
Lorsque CreateProduct
est appelé avec un ou plusieurs champs d'inventaire définis, les valeurs fournies dans CreateProductRequest.product
remplacent les valeurs préchargées pour ces champs respectifs. Si aucun champ d'inventaire n'est défini, toutes les informations d'inventaire préexistantes sont automatiquement utilisées.
En outre, l'heure de la dernière mise à jour des champs d'inventaire remplacés est réinitialisée sur l'heure de l'appel de méthode.
CreateProduct
avec un inventaire préchargé.
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 } }
Dans cet exemple, aucun champ d'inventaire n'est défini pour le produit créé. Cela signifie que les informations d'inventaire préchargées seront automatiquement utilisées si ont été mises à jour à l'aide des méthodes de mise à jour d'inventaire. Cela peut être utile lorsque les mises à jour d'inventaire sont découplées des mises à jour de catalogue et que vous souhaitez synchroniser Product
avec des informations d'inventaire préexistantes.
CreateProduct
avec un inventaire explicite.
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" } } }
Dans cet exemple, un objet Product
est créé avec des champs d'inventaire explicitement définis.
Ces champs remplacent les valeurs préexistantes, en ignorant la dernière heure de mise à jour pour les champs correspondants. Ainsi, vous pouvez garantir que la disponibilité de l'objet Product
est définie sur OUT_OF_STOCK
et qu'aucun ID de lieu n'est compatible avec les types de fulfillment "pickup-in-store"
et "same-day-delivery"
.
CreateProduct
avec les informations d'inventaire peut être utile si vous ne savez pas si toutes les informations d'inventaire préchargées sont exactes et que vous préférez définir explicitement l'inventaire au moment de la création deProduct
pour synchroniser entièrement le catalogue et l'inventaire.
UpdateProduct
Lorsque UpdateProduct
est appelé et que le masque de champ UpdateProductRequest.update_mask
contient des champs d'inventaire, les valeurs fournies dans UpdateProductRequest.product
remplacent les valeurs préchargées pour ces champs respectifs.
En outre, l'heure de la dernière mise à jour des champs d'inventaire remplacés est réinitialisée sur l'heure de l'appel de méthode.
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" } }
Cet exemple est très semblable à l'exemple SetInventory
, à ceci près qu'il est garanti que la mise à jour est appliquée, quelle que soit l'heure de la dernière mise à jour de chaque champ d'inventaire.
UpdateProduct
pour l'inventaire peut être utile lorsque vous devez synchroniser des informations d'inventaire en ignorant les protections d'horodatage.
Bien qu'il soit possible de précharger les informations d'inventaire à l'aide de UpdateProduct
en définissant UpdateProductRequest.allow_missing
sur true
pour effectuer une insertion Product
, la méthode nécessite de définir des champs de catalogue spécifiques tels queUpdateProductRequest.product.title
. Par conséquent, il est recommandé d'utiliser les méthodes de mise à jour d'inventaire pour les cas d'utilisation de préchargement.
DeleteProduct
Lorsque DeleteProduct
est appelé, toutes les informations d'inventaire existantes pour le produit spécifié dans DeleteProductRequest.name
sont supprimées, y compris tous les enregistrements de l'heure de dernière mise à jour pour chaque champ d'inventaire.