Halaman ini menguraikan metode untuk mengelola pembaruan harga dan kuantitas real-time untuk katalog Vertex AI Search untuk commerce menggunakan Retail API.
Meskipun metode buat, baca, perbarui, dan hapus (CRUD) Product digunakan untuk
memodifikasi atribut Product secara luas, ada serangkaian metode Product
yang dapat digunakan untuk memperbarui kolom khusus inventaris dengan berbagai tingkat
perincian.
Memahami inventaris
Secara umum, inventaris biasanya merujuk pada tingkat stok (jumlah) dan harga untuk item di situs e-commerce. Untuk Retail API, inventory mengacu pada harga, ketersediaan, jumlah yang tersedia, informasi pemenuhan pesanan, serta harga lokal dan atribut lokal tambahan. Kolom ini ditentukan dalam skema Produk dengan kolom berikut:
Product.availabilityProduct.availableQuantityProduct.priceInfoProduct.fulfillmentInfoProduct.localInventories
Inventaris tingkat produk
Untuk penjual situs e-commerce yang hanya memiliki katalog online, inventory biasanya ditampilkan sebagai produk dalam katalog saja. Harga, ketersediaan, dan semua data lainnya ditetapkan pada setiap entri Produk dalam katalog. Kolom fulfillmentInfo dan localInventories tidak digunakan.
Inventaris lokal
Untuk retailer yang memiliki beberapa lokasi, produk tetap diwakili oleh entri Produk dalam katalog, tetapi inventaris lokal (harga, ketersediaan, dan pemenuhan) dapat ditambahkan ke lokasi (placeId) untuk produk dengan metode addLocalInventories.
Ada dua kolom Produk terpisah yang digunakan untuk inventaris lokal: Product.fulfillmentInfo dan Product.localInventories. Salah satu atau keduanya dapat digunakan, bergantung pada persyaratan. fulfillmentInfo dan localInventories adalah daftar lokasi dengan data terkait.
fulfillmentInfo menentukan cara produk dipenuhi di lokasi tertentu, sedangkan localInventories menentukan harga dan atribut kustom lainnya untuk setiap lokasi.
Untuk menandai produk sebagai habis stok atau tidak lagi tersedia di lokasi tertentu, metode removeLocalInventories digunakan untuk menghapus fulfillment dan inventory dari produk untuk placeId tertentu.
Metode pembaruan inventaris
Perubahan pada informasi inventaris produk dapat terjadi jauh lebih sering daripada perubahan pada informasi katalognya. Oleh karena itu, serangkaian metode khusus disediakan untuk menangani update spesifik inventaris dalam volume besar. Metode ini bersifat asinkron karena pengoptimalan hilir yang mendukung ratusan update serentak per produk, tanpa mengorbankan performa.
Update inkremental
Ikuti panduan pembaruan inventaris lokal untuk melakukan pembaruan inventaris inkremental. Metode API yang lebih baru memberikan kontrol yang lebih terperinci untuk atribut inventaris per tempat.
fulfillment_info sering digunakan untuk mengenkode ketersediaan pemenuhan tingkat tempat
untuk Product. Dalam beberapa kasus, ketersediaan pemenuhan untuk beberapa tempat tertentu dapat berubah. Anda dapat memutuskan untuk mengeluarkan pembaruan yang menjelaskan perubahan ini, alih-alih menggunakan metode UpdateProduct untuk menentukan ulang semua informasi pemenuhan produk.
Dalam kasus tersebut, metode AddFulfillmentPlaces dan
RemoveFulfillmentPlaces dapat digunakan untuk
memperbarui perubahan pemenuhan produk secara inkremental berdasarkan ID tempat
yang ditambahkan atau dihapus untuk jenis pemenuhan tertentu.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Vertex AI Search untuk commerce, lihat Library klien Vertex AI Search untuk commerce. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI Search untuk e-commerce.
Untuk melakukan autentikasi ke Vertex AI Search untuk commerce, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
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 }
Contoh AddFulfillmentPlacesRequest ini menambahkan jenis pemenuhan
"pickup-in-store" ke ID tempat "store0" dan "store1" untuk produk
yang ditentukan. Karena
AddFulfillmentPlacesRequest.allow_missing ditetapkan ke benar (true), meskipun produk belum ada, informasi inventaris yang diperbarui akan disimpan untuk
saat produk akhirnya dibuat. Pembaruan diberi stempel waktu dengan
AddFulfillmentPlacesRequest.add_time untuk mencegah pembaruan yang tidak berlaku menggantikan
status penyelesaian ID tempat ini. Fitur ini dibahas secara lebih mendetail di bagian berikut.
Perilakunya identik untuk RemoveFulfillmentPlacesRequest dan skemanya sangat mirip.
Saat fulfillment_types diperbarui oleh
AddLocalInventories dan
RemoveLocalInventories, fulfillment_types mencerminkan pemetaan dari
setiap ID tempat ke daftar jenis pemenuhan yang didukungnya. Jika
fulfillment_info diperbarui oleh
AddFulfillmentPlaces dan
RemoveFulfillmentPlaces, maka akan mencerminkan pemetaan
dari setiap jenis pemenuhan tertentu ke daftar ID tempat yang mendukung setiap
jenis. Kedua jenis API mengubah informasi pemenuhan yang sama, dan efek kedua jenis API ini tercermin dalam Product.fulfillment_info.
Update non-inkremental
Metode price_info, availability, dan available_quantity tidak dapat diperbarui secara inkremental karena mewakili inventaris tingkat produk, bukan informasi tingkat tempat. Sebaiknya juga terbitkan update non-inkremental ke fulfillment_info. Daripada hanya perubahan inkremental, sebaiknya gunakan SetInventory.
Metode setInventory adalah cara yang lebih disarankan untuk memperbarui harga, ketersediaan, dan kuantitas di tingkat produk jika banyak pembaruan yang sering diperlukan. Metode setInventory bersifat asinkron, sehingga pembaruan mungkin tidak terjadi secara langsung. Kuota default (300.000 permintaan per menit) mendukung lebih banyak permintaan daripada UpdateProduct.
Selain itu, metode setInventory digunakan untuk update pemenuhan lokal saat fulfillmentInfo disertakan dalam permintaan, tetapi tidak dapat memperbarui kolom localInventories. Untuk atribut tersebut, gunakan metode addLocalInventories dan removeLocalInventories.
Inventaris lokal disimpan di tingkat toko, terlepas dari katalog. Untuk pelanggan dengan inventaris online dan offline, katalog produk utama dapat digunakan untuk online atau placeId tertentu (misalnya, -1 atau online) dapat digunakan untuk merepresentasikan inventaris online. Namun, gunakan katalog utama untuk inventaris online karena kolom inventaris produk harus diisi dengan nilai priceInfo dan availability yang valid. Jika inventaris placeId terpisah digunakan untuk online, informasi harga dan ketersediaan katalog utama juga harus terus diperbarui. Untuk mengetahui informasi selengkapnya tentang pembaruan inventaris lokal, lihat Memperbarui inventaris lokal.
Java
Untuk mempelajari cara menginstal dan menggunakan library klien untuk Vertex AI Search untuk commerce, lihat Library klien Vertex AI Search untuk commerce. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI Search untuk e-commerce.
Untuk melakukan autentikasi ke Vertex AI Search untuk commerce, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.
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 }
Dalam permintaan khusus ini, kolom SetInventoryRequest.product.fulfillment_info
adalah deskripsi lengkap dari ID tempat yang memenuhi syarat untuk setiap jenis pemenuhan,
bukan spesifikasi inkremental. Pembaruan pada "same-day-delivery"
menunjukkan bahwa tidak ada ID tempat yang memenuhi syarat untuk jenis pemenuhan ini untuk produk ini. Semua jenis pemenuhan lainnya tidak diperbarui dalam permintaan ini. Dengan demikian, metode ini dapat digunakan untuk mengganti ID tempat hanya untuk sebagian kecil jenis pemenuhan, sementara jenis lainnya tidak diubah.
Secara default,SetInventory akan memperbarui semua kolom inventaris jika
SetInventory.set_mask tidak disetel atau kosong. Jika mask tidak kosong atau jika kolom inventaris tidak tercantum secara eksplisit di SetInventoryRequest.set_mask, maka nilai yang ditentukan untuk kolom inventaris tersebut akan diabaikan dalam permintaan pembaruan.
Seperti pembaruan inkremental, kolom SetInventoryRequest.set_time dapat
digunakan untuk menyetel waktu pembaruan yang akan dibandingkan dengan waktu pembaruan terakhir yang tercatat dari
semua kolom inventaris yang diperbarui.
Perlindungan stempel waktu untuk pembaruan inventaris
Ada beberapa jalur berbeda untuk memperbarui kolom inventaris produk, dan untuk melindungi dari pembaruan yang tidak berurutan, setiap kolom inventaris dikaitkan dengan waktu pembaruan terbaru.
Waktu update terbaru dicatat untuk price_info, availability,
available_quantity, dan setiap pasangan (fulfillment_info.place_ids,
fulfillment_info.type).
Metode AddFulfillmentPlaces,
RemoveFulfillmentPlaces, dan
SetInventory memungkinkan pemanggil menentukan waktu update saat permintaan dikeluarkan. Waktu pembaruan ini dibandingkan dengan
waktu pembaruan terakhir yang dicatat untuk kolom inventaris yang relevan, dan pembaruan
dilakukan jika dan hanya jika waktu pembaruan tepat setelah waktu pembaruan
terakhir.
Misalnya, ID tempat "store1" memiliki jenis pemenuhan "pickup-in-
store" yang diaktifkan, dengan waktu pembaruan terakhir yang tercatat ditetapkan ke waktu T. Jika
RemoveFulfillmentPlacesRequest.type = "pickup-in-store" dan
RemoveFulfillmentPlacesRequest.place_ids berisi "store1", permintaan akan
menghapus "pickup-in-store" dari "store1" jika dan hanya jika
RemoveFulfillmentPlacesRequest.remove_time lebih baru dari waktu T. Hal yang sama
berlaku untuk AddFulfillmentPlacesRequests.
SetInventory beroperasi dengan cara yang sama untuk memperbarui price_info,
availability, dan available_quantity. Saat memperbarui fulfillment_info, SetInventoryRequest secara implisit meminta untuk menambahkan semua ID tempat yang ditentukan untuk jenis pemenuhan tertentu dan menghapus semua ID tempat yang ada yang tidak ditentukan.
Saat SetInventoryRequest diproses, pembaruan fulfillment_info
secara implisit dikonversi menjadi AddFulfillmentPlacesRequest dan
RemoveFulfillmentPlacesRequest untuk setiap jenis pemenuhan pesanan yang ditentukan. Artinya, jika ada tempat "store1" yang sudah ada dengan pemenuhan "pickup-in-store" yang memiliki waktu update terakhir T yang lebih baru daripada SetInventoryRequest.set_time, maka penambahan atau penghapusan implisit pada "store1" dan "pickup-in-store" tidak akan diterapkan.
Atribut pramuat
setInventory bersifat asinkron, yang berarti tidak ada kontrol taksonomi atau referensi yang diterapkan saat menambahkan atau mengubah kolom inventaris. Metode ini tidak mengharuskan produk yang dirujuk dalam permintaan sudah ada.
Dengan begitu, pelanggan dapat menerapkan pola pemuatan awal, sehingga pengelolaan kolom inventaris dapat dipisahkan dari proses impor produk atau katalog utama. Misalnya, pengguna dapat mengimpor konteks ketersediaan atau harga sebelum produk terkait diimpor.
Setiap metode update inventaris memungkinkan pemanggil menetapkan allow_missing dalam permintaan. Jika allow_missing disetel ke benar(true), update inventaris ke Product yang tidak ada akan diproses seolah-olah Product ada sesuai dengan spesifikasi metode. Informasi inventaris akan dipertahankan selama maksimal dua hari jika Product yang sesuai tidak dibuat menggunakan CreateProduct dalam jangka waktu ini.
Java
Kapan menggunakan metode Product
Meskipun kolom inventaris dapat diperbarui dengan metode CRUD Produk, pemanggil harus mengetahui secara eksplisit efek pada informasi inventaris yang ada atau yang sudah ada sebelumnya.
Ini adalah metode sinkron, yang berarti pengoptimalan hilir yang digunakan untuk metode inventaris tidak berlaku, dan akan menjadi mahal jika mengandalkan metode ini untuk pembaruan inventaris yang sering. Jika memungkinkan, sebaiknya gunakan metode update inventaris yang disebutkan di atas.
CreateProduct
Saat CreateProduct dipanggil dengan setelan kolom inventaris apa pun,
nilai yang diberikan dalam CreateProductRequest.product akan menggantikan nilai yang dimuat sebelumnya untuk kolom masing-masing tersebut. Jika tidak ada kolom inventaris yang ditetapkan, informasi inventaris yang sudah ada akan otomatis digunakan.
Selain itu, waktu pembaruan terbaru untuk kolom inventaris yang diganti akan direset ke waktu panggilan metode.
CreateProduct dengan inventaris yang dipramuat
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 } }
Dalam contoh ini, produk yang dibuat tidak memiliki kolom inventaris yang ditetapkan,
yang berarti informasi inventaris yang telah dimuat sebelumnya akan otomatis digunakan jika
diperbarui menggunakan metode pembaruan inventaris. Hal ini dapat berguna saat pembaruan inventaris dipisahkan dari pembaruan katalog dan Anda ingin Product yang baru dibuat disinkronkan dengan informasi inventaris yang sudah ada.
CreateProduct dengan inventaris eksplisit
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" } } }
Dalam contoh ini, Product dibuat dengan kolom inventaris yang ditetapkan secara eksplisit.
Kolom ini akan menggantikan nilai yang sudah ada sebelumnya, dengan mengabaikan waktu pembaruan terbaru untuk kolom terkait. Dengan demikian, Product yang baru dibuat akan memiliki ketersediaan yang ditetapkan ke OUT_OF_STOCK, dan tidak ada ID tempat yang akan mendukung jenis pemenuhan "pickup-in-store" dan "same-day-delivery".
CreateProduct dengan informasi inventaris dapat berguna jika Anda tidak yakin apakah semua informasi inventaris yang telah dimuat sebelumnya akurat, dan lebih memilih untuk menetapkan inventaris secara eksplisit pada saat pembuatan Product untuk menyinkronkan katalog dan inventaris sepenuhnya.
UpdateProduct
Metode UpdateProduct dapat digunakan untuk memperbarui atribut tertentu pada item katalog yang ada. Hal ini dapat dilakukan untuk satu atau beberapa kolom sekaligus, dan untuk masing-masing produk atau menggunakan metode impor untuk beberapa produk. Jika Anda menggunakan metode impor tanpa mask, tindakan ini akan menimpa.
UpdateProduct sering digunakan untuk pembaruan harga & ketersediaan real-time, tetapi dapat digunakan untuk memperbarui kolom apa pun tanpa harus mengirimkan semua data untuk produk lagi. (berbeda dengan createMethod atau importProducts.
Manfaat utama penggunaan UpdateProduct adalah bahwa ini merupakan permintaan sinkron. Pembaruan pada indeks (dan penelusuran atau rekomendasi) hampir instan. Namun, UpdateProduct tidak dimaksudkan untuk digunakan untuk update yang sangat sering. Kuota defaultnya adalah 12.000 permintaan tulis produk per menit. Biasanya, Anda hanya ingin menggunakan metode ini saat harga item berubah atau jika status stok berubah (bukan untuk setiap penurunan jumlah).
UpdateProduct hanya dapat mengubah atribut tingkat produk. Tidak dapat digunakan untuk mengubah atribut inventaris lokal untuk localInventories atau fulfillmentInfo.
Saat melakukan panggilan dengan UpdateProduct atau ImportProducts, penting untuk menentukan parameter updateMask. updateMask berisi daftar kolom yang akan diperbarui. Hanya kolom yang ditentukan dalam updateMask yang akan diperbarui, meskipun lebih banyak kolom diteruskan dalam isi permintaan. Jika tidak ada updateMask untuk permintaan update atau impor, semua kolom akan diperbarui persis seperti yang dikirimkan dalam isi permintaan.
Saat UpdateProduct dipanggil dan mask kolom
UpdateProductRequest.update_mask berisi kolom inventaris, nilai yang diberikan
di UpdateProductRequest.product akan menggantikan nilai yang telah dimuat sebelumnya
untuk kolom masing-masing tersebut.
Selain itu, waktu pembaruan terbaru untuk kolom inventaris yang diganti akan direset ke waktu panggilan metode.
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" } }
Contoh ini sangat mirip dengan contoh SetInventory, kecuali pembaruan berlaku, terlepas dari waktu pembaruan terbaru setiap kolom inventaris.
UpdateProductuntuk inventaris dapat berguna saat sinkronisasi penuh pada informasi inventaris diperlukan sambil mengabaikan perlindungan stempel waktu.Dengan menyetel
UpdateProductRequest.allow_missingketrueuntuk melakukanProductupsert, Anda dapat memuat informasi inventaris terlebih dahulu menggunakanUpdateProduct. Metode ini memerlukan penetapan kolom katalog tertentu, sepertiUpdateProductRequest.product.title. Jadi, gunakan metode pembaruan inventaris untuk kasus penggunaan pemuatan awal.
DeleteProduct
Saat DeleteProduct dipanggil, semua informasi inventaris yang ada untuk produk yang ditentukan dalam DeleteProductRequest.name akan dihapus, termasuk semua catatan waktu pembaruan terakhir untuk setiap kolom inventaris.
Pertimbangan jika Anda mengganti atribut tingkat produk dengan atribut tingkat inventaris
Perhatikan pertimbangan dan batasan berikut yang terkait dengan setiap pendekatan:
| Fitur | Inventaris tingkat produk | Inventaris tingkat toko (lokal) |
|---|---|---|
| Kontrol filter penelusuran & peningkatan | Ya | Ya |
Format kunci filter dan facet yang ditentukan dalam facetSpec |
Ya | Tidak |
| Tersedia untuk aspek penelusuran | Ya | Tidak |
| Ditampilkan dalam respons penelusuran | Ya | Ya (menggunakan variantRollupKeys) |
| Filter dan kontrol peningkat Recommendations AI v2 | Ya | Tidak |
| Fitur | Inventaris Tingkat Produk | Inventaris Tingkat Toko (Lokal) |
|---|---|---|
| Kontrol filter dan promosi penelusuran | ||
Format kunci filter dan facet yang ditentukan dalam facetSpec |
||
| Tersedia untuk aspek penelusuran | ||
| Ditampilkan dalam respons penelusuran | (menggunakan variantRollupKeys) |
|
| Filter dan kontrol peningkat Recommendations AI v2 |
Ada beberapa tumpang-tindih dalam fungsi berbagai metode untuk memperbarui ketersediaan produk, pemenuhan pesanan, dan harga lokal:
| Fitur | UpdateProduct |
setInventory |
addLocalInventories |
|---|---|---|---|
| Update real-time | |||
| Memperbarui kolom produk | |||
| Perbarui harga produk | |||
| Memperbarui ketersediaan produk | |||
Pembaruan fulfillmentInfo |
|||
Perbarui localInventories (harga lokal) |
|||
| Pengurutan Stempel Waktu |
Contoh
Bagian ini menunjukkan cara memperbarui inventaris produk menggunakan metode UpdateProduct dan setInventory dalam perintah curl.
UpdateProductmenggunakan metode HTTP PATCH REST API untuk update sinkron dan real-time pada kolom tingkat produk seperti harga dan ketersediaan, dan juga dapat digunakan untuk update batch dengan menggunakan metodeimportdenganupdateMask.Metode
setInventoryasinkron ditampilkan untuk memperbarui kolom inventaris tingkat produk (harga, ketersediaan, jumlah) dan detail pemenuhan lokal menggunakanfulfillmentInfo, tetapi tidak dapat mengubah harga lokal atau atribut yang disimpan dilocalInventories.
Gunakan UpdateProduct untuk memperbarui harga dan ketersediaan produk
Saat menggunakan REST API, UpdateProduct menggunakan metode HTTP PATCH. URL endpoint yang sama seperti CreateProduct, GetProduct, DeleteProduct masing-masing menggunakan metode HTTP PUT, GET, dan DELETE. Luaskan link berikut untuk melihat contoh curl masing-masing.
Gunakan setInventory untuk memperbarui harga dan ketersediaan produk
setInventory hanya mendukung kolom berikut:
availabilityavailableQuantitypriceInfo
Luaskan link berikut untuk melihat contoh curl masing-masing.
Untuk inventaris lokal, placeIds dan jenis pemenuhan pesanan dapat diteruskan di fulfillmentInfo, seperti yang ditunjukkan oleh contoh curl ini:
Tutorial
Gunakan tutorial ini untuk memandu Anda menggunakan setInventory atau untuk menambahkan atau menghapus pemenuhan.
Tutorial setel inventaris
Tutorial ini menunjukkan cara mengirimkan pembaruan inventaris menggunakan metode
SetInventory, bukan memperbarui seluruh produk.
Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Cloud Shell Editor, klik Pandu saya:
Menambahkan tutorial pemenuhan
Sebaiknya gunakan metode AddLocalInventories, bukan AddFulfillmentPlaces. AddLocalInventories mencapai hasil yang sama, tetapi memberikan kontrol yang lebih terperinci atas penyerapan data inventaris lokal. Untuk informasi selengkapnya, lihat dokumentasi AddLocalInventories.
Tutorial ini menunjukkan cara memperbarui informasi pemenuhan produk menggunakan metode
AddFulfillmentPlaces. Dengan cara ini, penelusuran dapat menampilkan pembaruan tempat produk tersedia dan pesanan dapat dipenuhi. Misalnya, seorang pembeli mencari celana jeans biru di toko, tetapi stoknya habis. Saat celana jeans tersedia lagi di toko ini atau toko lain, pembeli akan melihat pembaruan dan dapat melanjutkan pesanan.
Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Cloud Shell Editor, klik Pandu saya:
Menghapus tutorial pemenuhan pesanan
Sebaiknya gunakan metode RemoveLocalInventories, bukan RemoveFulfillmentPlaces. RmoveLocalInventories mencapai hasil yang sama, tetapi memberikan kontrol yang lebih terperinci atas penyerapan data inventaris lokal. Untuk informasi selengkapnya, lihat dokumentasi RemoveLocalInventories.
Tutorial ini menunjukkan cara memperbarui informasi pemenuhan produk menggunakan metode RemoveFulfillmentPlaces. Dengan cara ini, Vertex AI Search untuk commerce dapat menampilkan pembaruan jika produk tidak tersedia dan pesanan tidak dapat dipenuhi. Dengan cara ini, penelusuran dapat menampilkan pembaruan jika produk tidak tersedia dan pesanan tidak dapat dipenuhi. Misalnya, seorang pembeli mencari
celana jeans biru di sebuah toko. Jika jeans kehabisan stok di toko ini, pembeli akan melihatnya dan tidak dapat melanjutkan pesanan.
Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Cloud Shell Editor, klik Pandu saya: