Mettre à jour l'inventaire en magasin pour Vertex AI Search pour le commerce

LocalInventory correspond aux informations d'inventaire associées à un lieu donné, identifié par son place_id. Par exemple, un LocalInventory peut être créé pour un magasin ou une région où un certain prix est disponible. LocalInventory comporte les champs suivants :

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

Les entrées LocalInventory existantes sont visibles via Product.local_inventories (à l'exception de fulfillment_types, qui, pour assurer la rétrocompatibilité, est disponible via Product.fulfillment_info). Ce champ n'est fourni qu'en sortie. Paramètre Product.local_inventories pour les API CRUD Product ou SetInventory n'a pas d'API l'effet.

Chaque paire (LocalInventory.place_id, LocalInventory.fulfillment_types[...]) pointe vers le même Paire (fulfillment_info.place_ids, fulfillment_info.type) mentionnée dans Documentation sur la mise à jour de l'inventaire fulfillment_types mis à jour par AddLocalInventories et RemoveLocalInventories décrits ci-dessous reflète une mise en correspondance de chaque ID de lieu avec une liste de types de traitement pris en charge, tandis que fulfillment_info est mis à jour AddFulfillmentPlaces et RemoveFulfillmentPlaces reflète un mappage de chaque un type de traitement spécifique à une liste d'ID de lieu compatibles avec ce type. Cependant, les deux types d'API modifient le même traitement sous-jacent d'informations, et l'effet des deux types d'API se reflètera Product.fulfillment_info

Méthodes de mise à jour de l'inventaire en magasin

Les modifications apportées aux informations sur l'inventaire en magasin d'un produit peuvent se produire beaucoup plus souvent que les modifications apportées aux informations de son catalogue. Un ensemble de méthodes spécialisées est fourni pour gérer de grands volumes de mises à jour spécifiques à l'inventaire en magasin. Ces méthodes sont asynchrones en raison des optimisations en aval qui prendre en charge des centaines de mises à jour simultanées par produit, sans sacrifier la sécurité ; des performances.

AddLocalInventories

AddLocalInventories permet de créer des fichiers locaux les inventaires de nouveaux lieux (représentés par de nouveaux place_id) ou mettre à jour des données existantes des inventaires en magasin existants. Les champs ajoutés ou mis à jour dans la la liste des entrées LocalInventory dans le corps de la requête peut être spécifiée via AddLocalInventoriesRequest.add_mask Les valeurs add_mask valides sont les suivantes:

  • price_info: écrase LocalInventory.price_info.
  • attributes : remplace tous les LocalInventory.attributes. Les attributs existants qui ne sont pas mentionnés dans le corps de la requête sont supprimés.
  • attributes.PLACEHOLDER_NAME : ne remplace que l'attribut personnalisé spécifié. Si un nom d'attribut existant n'est pas fourni dans la requête, l'attribut est supprimé. Vous pouvez spécifier plusieurs attributes.PLACEHOLDER_NAME, à condition que chaque nom d'attribut soit différent. Toutefois, AddLocalInventoriesRequest.add_mask ne peut pas inclure à la fois les valeurs attributes et attributes.PLACEHOLDER_NAME dans la même requête.
  • fulfillment_types: écrase tous les types de traitements compatibles. Les types de traitement existants qui ne sont pas mentionnés dans le corps de la requête sont supprimés.

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
}
  

Cet exemple AddLocalInventoriesRequest ajoute ou met à jour deux inventaires en magasin avec les ID de lieu "store1" et "store2" pour le produit spécifié. Si store1 existe, mais store2 n'existe pas avant la requête, la requête mettra à jour les champs de store1 et créera store2 avec les valeurs de champ indiquées.

Ce AddLocalInventoriesRequest.add_mask spécifie que price_info, un seul l'attribut personnalisé nommé "attr1", et fulfillment_types doit être mis à jour à l'aide des valeurs fournies dans AddLocalInventoriesRequest.local_inventories

attributes sont des attributs associés à un lieu dont le nom et la valeur peuvent être personnalisés. valeurs. Étant donné que LocalInventory de store1 ne fournit pas la valeur de attr1 dans la requête, l'attribut personnalisé attr1 sera supprimé LocalInventory sur store1, le cas échéant. store2 aura son attribut La valeur de attr1 est définie sur une valeur textuelle store2_value. Autre requête personnalisée existante sur store1 et store2 ne sont pas modifiés.

fulfillment_types représente une liste de disponibilités de traitement pour un Product à un seul endroit. Elle est identique et accepte les mêmes valeurs que fulfillment_info.type Ce AddLocalInventoriesRequest indique que store1 prend en charge les types de traitement pickup-in-store et ship-to-store, tandis que store1 est compatible avec custom-type-1. Les types de traitement existants avant cette mise à jour qui ne sont pas mentionnés dans la demande seront supprimés.

Étant donné que AddLocalInventoriesRequest.allow_missing est défini sur "true", même si le produit n'existe pas déjà, les informations d'inventaire en magasin mises à jour seront stockées pour être utilisées une fois le produit créé. La mise à jour est horodatée avec AddLocalInventoriesRequest.add_time pour éviter que les mises à jour obsolètes remplacer les champs spécifiés pour ces identifiants de lieu. Pour en savoir plus sur la prévention des mises à jour obsolètes et le stockage d'informations sur l'inventaire en magasin avant la création du produit, consultez les pages Protections d'horodatage pour les mises à jour d'inventaire en magasin et Précharger des informations sur l'inventaire.

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

Cet exemple AddLocalInventoriesRequest ajoute ou met à jour un seul élément local inventaire avec l'ID de lieu "store3" pour le produit spécifié. Étant donné que son add_mask contient "attributes", tous les attributs personnalisés existants de store3 sont supprimés et remplacés par attr1 et attr2, comme spécifié dans la requête. Notez que, comme allow_missing n'est pas défini, le produit spécifié doit exister. Sinon, une erreur NOT_FOUND est générée.

RemoveLocalInventories

RemoveLocalInventories permet de supprimer les inventaires en magasin existants pour des lieux associés à des ID de lieu donnés.

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
}
  

Cet exemple RemoveLocalInventoriesRequest supprime les inventaires en magasin pour des lieux avec les ID de lieu "store1" et "store2" pour le produit spécifié. La mise à jour est horodatée avec RemoveLocalInventoriesRequest.remove_time pour empêcher des mises à jour obsolètes d'ignorer la suppression de ces ID de lieu. Pour les ID de lieu spécifiés sans inventaire en magasin existant, la requête enregistre également leur heure de mise à jour sur remove_time. Pour en savoir plus sur les horodatages des mises à jour, consultez la section Protections d'horodatage pour les mises à jour d'inventaire en magasin.

Protections concernant le code temporel pour les mises à jour de l'inventaire en magasin

Pour éviter les mises à jour hors service, chaque champ d'inventaire en magasin est associées à la date et à l'heure de la dernière mise à jour.

La dernière heure de mise à jour est enregistrée pour chaque (place_id, price_info), (place_id, attributes[...]) et (place_id, fulfillment_types[...]) .

Les méthodes AddLocalInventories et RemoveLocalInventories permettent à l'appelant de spécifier une heure de mise à jour pour le moment où la requête est émise. L'heure de cette mise à jour est par rapport à la date de la dernière mise à jour enregistrée pour l'inventaire concerné et la mise à jour est validée uniquement si l'heure de mise à jour est strictement après la dernière mise à jour.

Par exemple, supposons que l'ID de lieu "store1" dispose de price_info, avec T comme heure de dernière mise à jour enregistrée. Si RemoveLocalInventoriesRequest.place_ids contient "store1", la requête ne supprimera price_info de "store1" que si RemoveLocalInventoriesRequest.remove_time est postérieur à T. Il en va de même pour les RemoveLocalInventoriesRequest.

Avec la protection par code temporel, il est possible qu'un RemoveLocalInventoriesRequest ne supprime que certains champs d'un LocalInventory au lieu de tous. Supposons qu'un inventaire local avec l'ID de lieu "store1" dispose de price_info avec l'heure de dernière mise à jour enregistrée définie sur T1 et que son seul attribut personnalisé existant, nommé "attr1", ait pour heure de dernière mise à jour enregistrée T2. Si une RemoveLocalInventoriesRequest.place_ids contient "store1", et dont la valeur remove_time est définie sur T3 (où T1 < T3 < T2), puis L'élément price_info de store_1 sera supprimé, tandis que l'attribut attr1 sera supprimé intacts.

Précharger les informations d'inventaire

Chacune des méthodes de mise à jour d'inventaire en magasin 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 local 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 locales sont conservées pendant deux jours au maximum si la valeur Product correspondante n'est pas créée via CreateProduct dans ce délai.