Embora os métodos de criação, leitura, atualização e exclusão (CRUD, na sigla em inglês) Product
sejam usados para
modificar amplamente os atributos de um Product
, há um conjunto de métodos Product
que pode ser usado para atualizar campos específicos de inventário com níveis diferentes de
granularidade. Os campos Product
a seguir são considerados campos de inventário:
Product.price_info
Product.availability
Product.available_quantity
Product.fulfillment_info
Tutorial de configuração do inventário
Neste tutorial, mostramos como enviar atualizações de inventário usando o
SetInventory
em vez de atualizar todo o produto.
Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:
Tutorial de adição de fulfillment
Recomendamos usar o método AddLocalInventories
em vez de AddFulfillmentPlaces
. O AddLocalInventories
alcança os mesmos resultados, mas oferece um controle mais granular sobre a ingestão de dados de inventário local. Para mais informações, consulte
a documentaçãoAddLocalInventories
.
Este tutorial mostra como atualizar as informações de fulfillment de produtos usando o
método
AddFulfillmentPlaces
. Dessa forma, a pesquisa pode mostrar atualizações onde os produtos estão disponíveis e
pedidos podem ser atendidos. Por exemplo, um comprador está procurando jeans azuis em uma
loja, mas eles estão esgotados. Assim que o jeans estiver em estoque novamente,
loja ou qualquer outra loja, o comprador vê as atualizações e pode prosseguir com as
ordem.
Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:
Tutorial de remoção de fulfillment
Recomendamos usar o método RemoveLocalInventories
em vez de RemoveFulfillmentPlaces
. O RmoveLocalInventories
atinge os mesmos resultados, mas fornece um controle mais refinado sobre a ingestão de dados de inventário local. Para mais informações, consulte
a documentaçãoRemoveLocalInventories
.
Este tutorial mostra como atualizar as informações de fulfillment de produtos usando
o método RemoveFulfillmentPlaces
. Dessa forma,
a Vertex AI para Pesquisa para varejo pode mostrar atualizações em que os produtos não estão disponíveis e os pedidos
não podem ser atendidos. Dessa forma, a pesquisa pode mostrar atualizações quando os produtos não estão
disponível e os pedidos não podem ser atendidos. Por exemplo, um comprador está procurando
jeans azul em uma loja. Se o jeans ficar sem estoque na loja, o comprador
vai saber disso e não poderá prosseguir com o pedido.
Para seguir as instruções da tarefa diretamente no editor do Cloud Shell, clique em Orientação:
Métodos de atualização de inventário
Alterações nas informações de inventário de um produto podem ocorrer com muito mais frequência do que as alterações nas informações de catálogo. Assim, um conjunto especializado de métodos é fornecido para lidar com grandes volumes de atualizações específicas do inventário. Esses métodos são assíncronos devido a otimizações downstream compatíveis com centenas de atualizações simultâneas por produto, sem sacrificar o desempenho.
Atualizações incrementais
Recomendamos seguir o guia de atualizações de inventário local para emitir atualizações incrementais de inventário. Os métodos mais recentes da API oferecem um controle mais preciso para atributos de inventário por lugar.
fulfillment_info
é usado com frequência para codificar a disponibilidade de fulfillment em nível de lugar para um Product
. Em alguns casos, a disponibilidade do fulfillment para alguns locais específicos pode mudar, e você pode decidir emitir atualizações que descrevem essa mudança em vez de usar o método UpdateProduct
para especificar novamente as informações de fulfillment de todo o produto.
Nesses casos, os métodos AddFulfillmentPlaces
e RemoveFulfillmentPlaces
podem ser usados para atualizar incrementalmente as alterações de fulfillment de um produto com base nos IDs do lugar. são adicionados ou removidos para um determinado tipo de fulfillment.
Java
Para saber como instalar e usar a biblioteca de cliente da Pesquisa da Vertex AI para varejo, consulte Bibliotecas de cliente da Pesquisa da Vertex AI para varejo. Para mais informações, consulte a documentação de referência da API Vertex AI Search for retail Java.
Para autenticar na Vertex AI para Pesquisa para Retail, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 }
Este exemplo de AddFulfillmentPlacesRequest
adiciona um tipo de fulfillment
"pickup-in-store"
para colocar os IDs "store0"
e "store1"
do objeto especificado
produto. Devido ao
AddFulfillmentPlacesRequest.allow_missing
é definido como verdadeiro, mesmo que o produto
ainda não existir, as informações atualizadas do inventário serão armazenadas para
quando o produto é criado. A atualização é carimbada com AddFulfillmentPlacesRequest.add_time
para evitar que atualizações desatualizadas modifiquem o status de fulfillment desses IDs de local. Esses recursos são discutidos com mais detalhes nas seções a seguir.
O comportamento é idêntico para RemoveFulfillmentPlacesRequest
, e o esquema é
muito semelhante.
Quando fulfillment_types
é atualizado por
AddLocalInventories
e
RemoveLocalInventories
, ele reflete um mapeamento de
cada ID de lugar para uma lista de tipos de fulfillment compatíveis. Quando
fulfillment_info
foi atualizado por
AddFulfillmentPlaces
e
RemoveFulfillmentPlaces
, reflete um mapeamento
de cada tipo de fulfillment específico para uma lista de IDs de lugar que aceitam cada
não é válido. Os dois tipos de API estão modificando as mesmas informações de
cumprimento, e o efeito dos dois tipos de API é refletido por
Product.fulfillment_info
.
Atualizações não incrementais
price_info
, availability
e available_quantity
não podem ser atualizados de forma incremental porque representam inventário no nível de produto, em vez de informações no nível do local. Além disso, é recomendável emitir atualizações não incrementais para fulfillment_info
em vez de apenas alterações incrementais. Nesses
casos, o método SetInventory
é recomendado.
Java
Para saber como instalar e usar a biblioteca de cliente da Pesquisa da Vertex AI para varejo, consulte Bibliotecas de cliente da Pesquisa da Vertex AI para varejo. Para mais informações, consulte a documentação de referência da API Vertex AI Search for retail Java.
Para autenticar na Pesquisa da Vertex AI para varejo, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 }
Nesta solicitação específica, os campos SetInventoryRequest.product.fulfillment_info
são descrições completas dos IDs de lugar qualificados de cada tipo de fulfillment, em vez das especificações incrementais. A atualização para "same-day-delivery"
indica que nenhum ID de lugar está qualificado para esse tipo de fulfillment para esse produto. Todos os outros tipos de fulfillment não são atualizados nesta solicitação. Portanto, esse método pode ser usado para substituir os IDs de lugar de apenas um subconjunto de tipos de fulfillment, sem alterar os outros tipos.
Por padrão,SetInventory
atualizará todos os campos de inventário se SetInventory.set_mask
não estiver definido ou estiver vazio. Se a máscara não estiver vazia ou se um
campo de inventário não estiver explicitamente listado em SetInventoryRequest.set_mask
, qualquer
valor especificado para esse campo será ignorado na solicitação de
atualização.
Assim como acontece com as atualizações incrementais, o campo SetInventoryRequest.set_time
pode ser usado para definir um horário de atualização que será a última hora de atualização registrada de todos os campos de inventário atualizados.
Proteções de carimbo de data/hora para atualizações de inventário
Há vários caminhos diferentes para atualizar os campos de inventário de um produto. Para proteger contra atualizações fora de ordem, cada campo de inventário é associado a um horário de atualização mais recente.
O horário da última atualização é registrado para price_info
, availability
, available_quantity
e cada par de (fulfillment_info.place_ids,
fulfillment_info.type)
.
Os métodos AddFulfillmentPlaces
,
RemoveFulfillmentPlaces
e
SetInventory
permitem que o autor da chamada especifique uma o horário de atualização do momento em que a solicitação é emitida. Esse tempo de atualização é comparado com o horário da atualização mais recente registrado para os campos de inventário relevantes, e a atualização será confirmada se e somente se o tempo de atualização for estritamente posterior ao da atualização mais recente
Por exemplo, suponha que o ID do lugar "store1"
tenha o tipo de fulfillment "pickup-in-
store"
ativado e o horário da última atualização registrado tenha sido definido como T
. Se
RemoveFulfillmentPlacesRequest.type = "pickup-in-store"
eRemoveFulfillmentPlacesRequest.place_ids
contém"store1"
, a solicitação
será limpa"pickup-in-store"
de"store1"
somente se a
RemoveFulfillmentPlacesRequest.remove_time
é posterior ao horárioT
de dados. O mesmo acontece
para AddFulfillmentPlacesRequests
.
SetInventory
opera de maneira semelhante para atualizar price_info
,
availability
e available_quantity
. Ao atualizar fulfillment_info
, um SetInventoryRequest
está solicitando implicitamente a adição de todos os IDs de lugar especificados para um determinado tipo de fulfillment e a remoção de todos os não existentes.
Portanto, quando SetInventoryRequest
for processado, a atualização fulfillment_info
será convertida implicitamente em um AddFulfillmentPlacesRequest
e RemoveFulfillmentPlacesRequest
para cada tipo de fulfillment especificado. Isso significa que, se algum lugar "store1"
atual com fulfillment "pickup-in-store"
tiver um horário da última atualização T
mais recente do que SetInventoryRequest.set_time
, a adição/adicionar implícita remova em "store1"
e "pickup-in-store"
não será aplicado.
Pré-carregar informações do inventário
Cada um dos métodos de atualização de inventário permite que o autor da chamada defina allow_missing
na
solicitação. Quando allow_missing
for definido como verdadeiro, uma atualização de inventário para um Product
inexistente será processada como se o Product
existisse de acordo com as especificações do método. As informações de inventário serão retidas por
no máximo dois dias se o Product
correspondente não for criado por
CreateProduct
dentro desse período.
Java
Quando usar os métodos Product
Embora seja possível atualizar campos de inventário com os métodos CRUD do produto, o autor da chamada precisa estar explicitamente ciente dos efeitos nas informações de inventário existentes ou preexistentes.
Esses são métodos síncronos, ou seja, as otimizações downstream usadas para métodos de inventário não se aplicam e pode ficar caro depender desses métodos para atualizações frequentes de inventário. Sempre que possível, prefira usar os métodos de atualização de inventário mencionados acima.
CreateProduct
Quando CreateProduct
é invocado com qualquer campo de inventário definido, os valores fornecidos em CreateProductRequest.product
modificam quaisquer valores pré-carregados para os respectivos campos. Se nenhum campo de inventário for definido, todas as informações de inventário preexistentes serão usadas automaticamente.
Além disso, o horário da atualização mais recente dos campos de inventário modificados será redefinido para a hora da chamada de método.
CreateProduct
com inventário pré-carregado
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 } }
Nesse exemplo, o produto criado não tem nenhum campo de inventário definido, o que significa que as informações de inventário pré-carregadas serão usadas automaticamente se atualizadas usando os métodos de atualização de inventário. Isso pode ser útil quando as atualizações de inventário são separadas das atualizações de catálogo e você quer que um Product
recém-criado seja sincronizado com as informações de inventário existentes.
CreateProduct
com inventário explícito
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" } } }
Neste exemplo, uma Product
é criada com campos de inventário definidos explicitamente.
Esses campos substituirão os valores preexistentes, ignorando o horário da atualização mais recente dos campos correspondentes. Assim, a Product
recém-criada terá a disponibilidade definida como OUT_OF_STOCK
, e nenhum ID de lugar será compatível com os tipos de fulfillment "pickup-in-store"
e "same-day-delivery"
.
CreateProduct
com informações de inventário pode ser útil se você não tiver certeza se todas as informações de inventário pré-carregadas estão corretas e prefere definir explicitamente o inventário no momento da criação de Product
para sincronizar totalmente
o catálogo e o inventário.
UpdateProduct
Quando UpdateProduct
é invocado e a máscara de campo
UpdateProductRequest.update_mask
contém qualquer campo de inventário, os valores
fornecidos no UpdateProductRequest.product
substituem quaisquer valores pré-carregados
para os respectivos campos.
Além disso, o horário da atualização mais recente dos campos de inventário modificados será redefinido para a hora da chamada de método.
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" } }
Este exemplo é muito semelhante ao exemplo SetInventory
, mas a atualização é garantida para ser aplicada independentemente do horário da atualização mais recente de cada campo de inventário.
UpdateProduct
para inventário pode ser útil quando uma sincronização completa em informações
de inventário é necessária ao ignorar as proteções de carimbo de data/hora.
Embora seja possível pré-carregar informações de inventário usando UpdateProduct
definindo UpdateProductRequest.allow_missing
como true
para realizar um comando Product
, o método exige a configuração de campos de catálogo específicos, como
UpdateProductRequest.product.title
. Assim, é recomendável usar os
métodos de atualização de inventário para pré-carregar casos de uso.
DeleteProduct
Quando DeleteProduct
for invocado, todas as informações de inventário existentes
do produto especificado em DeleteProductRequest.name
será excluído, incluindo todos os registros do horário da atualização mais recente de cada campo de inventário.