Panduan ini menjelaskan cara berintegrasi dengan Conversational API untuk memberikan pengalaman chat dinamis yang didukung AI bagi pelanggan Anda. Dengan memahami berbagai jenis kueri dan memanfaatkan respons API, Anda dapat memberikan penelusuran produk yang relevan, menjawab pertanyaan pelanggan, dan memandu pengguna akhir melalui perjalanan belanja mereka.
conversationalFilteringMode di Conversational API memperjelas perbedaan antara agen Conversational Commerce dan pemfilteran produk percakapan.
Penyiapan API dan alur panggilan
Conversational API mendukung agen Conversational Commerce:
- gRPC:
conversationalSearchService - REST:
conversationalSearch
Conversational API memungkinkan pengalaman chat di mana pengguna Anda mengirimkan kueri dan sistem menampilkan respons teks, jenis kueri yang diklasifikasikan, dan opsi penelusuran yang lebih baik.
API ini beroperasi sebagai layanan streaming, sehingga memungkinkan deteksi awal maksud kueri. Interaksi berikutnya dalam percakapan memerlukan lampiran conversation_id.
Untuk menampilkan hasil penelusuran, Retail API lama harus dipanggil secara paralel dengan Conversational API.
Mengirim kueri dari pengguna akhir
Bagian ini menjelaskan cara memulai pengalaman agen Conversational Commerce. Misalnya, pengguna Anda dapat memasukkan Bantu rencanakan pesta di kolom penelusuran.
Mengirim permintaan ke Vertex AI Search untuk commerce
Ada dua endpoint API yang berbeda:
- Conversational API harus digunakan untuk mengambil pengalaman percakapan.
- Search API inti harus digunakan untuk mengambil hasil penelusuran.
Endpoint 1: Permintaan Conversational API
- Anda harus membuat permintaan agen Conversational Commerce dengan menetapkan input pengguna sebagai kueri.
- Permintaan harus dikirim sebagai permintaan HTTP POST ke endpoint
projects/*/locations/*/catalogs/*/placements/*:conversationalSearch.
Metode dan endpoint HTTP
POST https://retail.googleapis.com/v2/{placement=projects/*/locations/*/catalogs/*/placements/*}:conversationalSearch
Permintaan API percakapan:
Kueri awal
{ "query": "Help me plan a party", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "visitorId": "your_visitor_id", "conversationId": "", // Leave empty for the first query "searchParams": { // IMPORTANT: These search parameters should mirror the configuration // of your core Search API calls to ensure consistency between LLM answers and search results. "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")" }, "userInfo": { // Optional: User information for enhanced personalization // Example: "userId": "user123", "userAgent": "Chrome/120.0" }, "conversationalFilteringSpec": { // Optional: Controls conversational filtering behavior. Defaults to DISABLED if unset. // "conversational_filtering_mode": "DISABLED" - Otherwise you can also explicitly set to disabled. }
placement: Nama resource penempatan (sepertiprojects/your-project-id/locations/global/catalogs/default_catalog/placements/default_branch). Ini adalah parameter jalur dan wajib.-
query: Kueri penelusuran mentah dari pengguna Anda. Kolom ini wajib diisi. -
branch: Nama resource cabang, sepertiprojects/P/locations/L/catalogs/C/branches/B. Jika tidak disetel,default_branchakan digunakan. Kolom ini wajib diisi. -
visitorId: ID unik untuk melacak pengunjung. Kolom ini wajib diisi. -
conversationId: ID unik untuk melacak sesi percakapan. Untuk permintaan initial dalam percakapan baru, kolom ini harus kosong. Untuk permintaan berikutnya dalam percakapan yang sama, parameter ini harus ditetapkan keconversation_idyang diterima dalamConversationalSearchResponsesebelumnya. -
searchParams: (Opsional) Parameter Penelusuran inti standar, sepertifilter,canonicalFilter,sortBy, danboostSpec. Sangat penting agar parameter ini mencerminkan konfigurasi yang digunakan dalam panggilan Search API inti Anda untuk memastikan konsistensi antara jawaban LLM dan hasil penelusuran produk yang ditampilkan. -
userInfo: (Opsional) Informasi pengguna untuk personalisasi yang lebih baik. Dapat menyertakanuserId,user_agent,direct_user_request(boolean). -
conversationalFilteringSpec: (Opsional) Menentukan mode pemfilteran percakapan. Jika tidak disetel, nilai defaultnya adalah DISABLED.mode: Integrasikan Conversational API menggunakan salah satu dari tiga mode berikut untuk mengontrol pemfilteran produk percakapan: DISABLED: Dalam mode ini, klien hanya menerapkan penelusuran agen Conversational Commerce. Ini adalah mode yang lebih disukai untuk panduan penerapan ini pada penelusuran agen Conversational Commerce.ENABLED: Dalam mode ini, klien mengimplementasikan semua kemampuan percakapan, yang mencakup penelusuran agen Conversational Commerce dan pemfilteran produk percakapan.CONVERSATIONAL_FILTER_ONLY: Jika dipilih, klien hanya menerapkan Pemfilteran produk percakapan. Dengan memilih mode ini, pengguna hanya akan mengalami pemfilteran produk percakapan tanpa menghasilkan jawaban LLM, klasifikasi kueri, atau kueri penelusuran yang disarankan.
Contoh permintaan API
placement: "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search" branch: "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch" query: "show me some monster energy drinks" visitor_id: "test" conversational_filtering_spec { conversational_filtering_mode: DISABLED }
Contoh respons API
user_query_types: "SIMPLE_PRODUCT_SEARCH" conversation_id: "479fd093-c701-4899-bcc3-9e711233bdf9" refined_search { query: "monster energy drinks" }
Lihat panduan tambahan tentang cara mengintegrasikan kedua produk percakapan.
Contoh permintaan API
placement: "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search" branch: "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch" query: "show me some monster energy drinks" visitor_id: "test" conversational_filtering_spec { conversational_filtering_mode: ENABLED }
Contoh respons API
user_query_types: "SIMPLE_PRODUCT_SEARCH" conversation_id: "479fd093-c701-4899-bcc3-9e711233bdf9" refined_search { query: "monster energy drinks" } conversational_filtering_result: { followup_question{ followup_question: "What is the size?" suggested_answers { product_attribute_value { name: "size", value: "12oz" } } } }
Lihat Panduan developer filter produk percakapan untuk mengetahui informasi selengkapnya.
Endpoint 2: Permintaan Core Search API
Ada dua pendekatan utama untuk menampilkan hasil penelusuran di antarmuka web Anda.
Opsi 1: Selalu tampilkan hasil penelusuran
Jika desain pengalaman pengguna Anda menentukan bahwa hasil penelusuran harus selalu ditampilkan terlepas dari output percakapan, seperti di area hasil penelusuran khusus di samping chat, kirim kueri asli pengguna Anda ke Product Search API inti dengan panggilan Anda ke Conversational API. Hal ini membantu memastikan listingan produk langsung tersedia.
Opsi 2: Menampilkan hasil penelusuran berdasarkan output percakapan
Jika desain pengalaman pengguna Anda lebih dinamis dan Anda hanya ingin menampilkan hasil penelusuran bergantung pada respons Conversational API, seperti hanya untuk kueri SIMPLE_PRODUCT_SEARCH atau setiap kali saran refined_search diberikan, tunggu respons Conversational API sebelum mengirimkan kueri apa pun ke Product Search API inti. Jika ada respons, gunakan kueri refined_search yang diberikan untuk mengambil hasil produk.
Terlepas dari opsi antarmuka pengguna yang Anda pilih, saat Anda perlu mengambil hasil produk sebenarnya, Anda dapat melakukan panggilan ke Retail API. Untuk mengetahui informasi selengkapnya, lihat Memahami klasifikasi niat pengguna dan tindakan retailer.
Metode dan endpoint HTTP
POST https://retail.googleapis.com/v2/{placement=projects/*/locations/*/catalogs/*/servingConfigs/*}:search
Permintaan Core product Search API:
Kueri awal
{ "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/servingConfigs/default_search", // Or if using legacy placements: // "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search", "query": "Help me plan a party", // This is the original user query "visitorId": "your_visitor_id", "branch": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/branches/default_branch", "pageSize": 20, // Optional: Number of results to return per page "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")", // Mirroring the filter from the Conversational Commerce API "orderBy": "relevance DESC", // Optional "userInfo": { // Optional: User information for enhanced personalization, should mirror Conversational Commerce API // "userId": "user123", "userAgent": "Chrome/120.0" }, "searchMode": "PRODUCT_SEARCH" // Typically for product searches }
placement(Wajib): Nama resource konfigurasi penayangan Retail Search atau penempatan lama. Contoh:projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/servingConfigs/default_search.query: Wajib diisi. Kueri penelusuran. Ini dapat berupa input mentah pengguna Anda seperti Bantu saya merencanakan pesta ataurefinedSearch.queryyang lebih dioptimalkan (seperti perlengkapan perencanaan pesta, dekorasi) yang diperoleh dari respons Conversational Commerce API.visitorId: Wajib diisi. ID unik untuk melacak pengunjung. Nilai ini harus konsisten denganvisitorIdyang dikirim ke Conversational Commerce API untuk pengguna akhir yang sama.branch(Wajib): Nama resource cabang, sepertiprojects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/branches/default_branch.pageSize(Opsional): Jumlah maksimum produk yang akan ditampilkan.filter(Opsional): Digunakan untuk memfilter hasil penelusuran. Di sinilah Anda akan menerapkan filter apa pun yang mencerminkan apa yang Anda kirim di `searchParams` ke Conversational Commerce API agar konsisten.orderBy(Opsional): Menentukan urutan produk ditampilkan (seperti berdasarkan relevansi atau harga).userInfo(Opsional): Informasi pengguna untuk personalisasi, harus konsisten dengan panggilan Conversational Commerce API.searchMode(Opsional): Menentukan perilaku penelusuran.PRODUCT_SEARCHumum untuk kueri produk umum.
Memahami respons
Contoh kode ini menunjukkan respons dari Conversational Commerce API.
Respons API (ConversationalSearchResponse) mencakup query_types, conversational_text_response (jika berlaku), opsi refined_search, dan berpotensi followup_question atau conversational_filtering_result. conversation_id sangat penting untuk melanjutkan sesi.
Respons dari Vertex AI Search untuk commerce
Contoh kode ini menunjukkan respons Conversational API:
Respons awal
{ "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" }
Yang harus dilakukan retailer dengan respons (umum)
Tampilkan kolom ini dari respons:
user_query_types: Kolom ini memberikan klasifikasi maksud pengguna Anda. Untuk mengetahui tindakan mendetail berdasarkan jenis ini, lihat Memahami klasifikasi niat pengguna dan tindakan retailer.conversation_id: Anda dapat menyimpan ID unik ini di penyimpanan sesi browser atau penyimpanan sisi klien serupa untuk mempertahankan sesi percakapan dengan server. Hal ini sangat penting untuk membedakan beberapa percakapan yang sedang berlangsung untuk satu pembeli. Model Anda mempertahankan konteks untukconversation_idtertentu. Mengirimconversation_idbaru akan memulai sesi baru. Sebaiknya tentukan durasi sesi Anda, seperti tidak ada aktivitas selama 30 menit.refined_search: Ini adalah daftar kueri penelusuran yang disempurnakan yang diusulkan dan digunakan untuk mengambil hasil penelusuran yang relevan. UntukSIMPLE_PRODUCT_SEARCH, selalu berupa kueri tunggal. Untuk kueri lain yang mencari jawaban LLM, jawabannya adalah satu atau lebih. Kuerirefined_searchdapat digunakan untuk panggilan ke Search API inti (SearchService.Search) atau juga dapat ditampilkan kepada pengguna Anda sebagai saran.conversational_text_response: Menampilkan teks ini kepada pengguna Anda sebagai respons utama buatan AI terhadap kueri mereka.followup_question: Opsional.followup_questionakan ditampilkan.state: Kolom ini menunjukkan status pembuatan respons ("STREAMING"atau"SUCCEEDED"). Anda dapat menggunakan kolom ini untuk memberikan masukan tentang pengalaman pengguna, seperti menampilkan indikator pemuatan hingga"SUCCEEDED". Detail selengkapnya tentang hal ini ada di bagian berikutnya.
Memahami streaming API
Conversational Commerce API beroperasi sebagai layanan streaming. Artinya, pengguna Anda menerima bagian respons dalam beberapa bagian, bukan satu payload lengkap.
- Mengapa streaming? Pembuatan teks LLM dapat memerlukan waktu. Streaming memungkinkan Anda bertindak lebih cepat.
- Chunk respons pertama (instan):
- Berisi kueri
userQueryTypesdanrefinedSearch. state:"STREAMING"- Chunk berikutnya:
- Berisi bagian
conversationalTextResponsesaat sedang dibuat. - Chunk terakhir:
- Berisi
conversationalTextResponselengkap. state:"SUCCEEDED"- Insight yang dapat ditindaklanjuti: Anda dapat menentukan maksud pengguna segera dari bagian pertama dan mulai mengambil hasil produk secara paralel saat respons teks AI masih dimuat.
Chunk pertama respons mencakup kueri query_types dan refined_search, dan state-nya ditunjukkan sebagai STREAMING. Deteksi niat yang lebih awal dan ketersediaan penyempurnaan penelusuran yang langsung memungkinkan model Anda membuat keputusan cepat tentang cara menangani kueri pengguna dan cara mengelola pengalaman pengguna terkait latensi dari respons LLM:
- Untuk jenis kueri yang tidak mengharapkan respons teks percakapan, seperti
SIMPLE_PRODUCT_SEARCH,RETAIL_IRRELEVANT,BLOCKLISTED,QUERY_TYPE_UNSPECIFIED,ORDER_SUPPORT,DEALS_AND_COUPONS,STORE_RELEVANT: - Karena
query_typesberada di potongan pertama, sistem Anda akan langsung mengetahui bahwa tidak ada jawaban LLM yang akan muncul. Anda dapat melanjutkan penanganan yang telah ditentukan sebelumnya untuk jenis ini, seperti menampilkan pesan statis, mengalihkan ke dukungan, tanpa menunggu output percakapan lebih lanjut. - Khusus untuk
SIMPLE_PRODUCT_SEARCH, sistem Anda dapat langsung melakukan panggilan langsung ke Search API inti menggunakan kuerirefined_searchyang diterima di bagian pertama. Hal ini membantu memastikan hasil penelusuran ditampilkan dengan penundaan minimal, yang memenuhi SLA pengalaman penelusuran umum. - Untuk jenis kueri yang mengharapkan respons teks percakapan, seperti
INTENT_REFINEMENT,PRODUCT_DETAILS,PRODUCT_COMPARISON,BEST_PRODUCT: - Anda menerima kueri
query_typesdanrefined_searchdi bagian awal. Anda dapat segera memulai panggilan paralel ke Search API inti menggunakan kuerirefined_searchini untuk mulai memuat hasil produk. - Chunk berikutnya akan di-streaming, yang berisi berbagai bagian respons teks percakapan. Selama waktu ini,
statetetap"STREAMING". - Terakhir, bagian terakhir mencakup respons teks percakapan yang lengkap dan utuh, serta perubahan
statemenjadi"COMPLETED". - Pendekatan streaming ini memungkinkan pengalaman pengguna akhir yang lancar di mana hasil penelusuran dapat mulai dimuat saat ringkasan AI sedang dibuat. Anda dapat memilih untuk menampilkan indikator pemuatan untuk jawaban percakapan atau menampilkan jawaban percakapan setelah sepenuhnya dimuat.
Memahami klasifikasi niat pengguna dan tindakan retailer
Pengklasifikasi maksud memutuskan cara menangani kueri pengguna dan mode percakapan mana yang akan dimulai.
Kolom query_types dalam respons adalah daftar yang menunjukkan klasifikasi maksud pengguna Anda. Sistem Anda harus menanganinya sebagai berikut. Perhatikan bahwa conversational_text_response mengacu pada respons bahasa alami buatan AI dari API.
Kolom userQueryTypes (di bagian pertama respons) adalah kolom terpenting untuk menentukan tindakan selanjutnya aplikasi Anda:
SIMPLE_PRODUCT_SEARCH: gaun merah- Respons API: Tidak ada
conversational_text_response. Menampilkan satu kuerirefinedSearch. - Tindakan Anda: Segera panggil Search API dengan
refinedSearch.query. Beralih ke halaman hasil penelusuran standar atau menampilkan hasil.
- Respons API: Tidak ada
INTENT_REFINEMENT/PRODUCT_COMPARISON/BEST_PRODUCT: rencanakan pesta- Respons API: Menyediakan kueri
conversationalTextResponse,refinedSearch, dan mungkinfollowupQuestion. - Tindakan Anda: Menampilkan respons teks AI. Gunakan kueri
refinedSearchuntuk mengisi carousel atau saran produk. TampilkanfollowupQuestion.
- Respons API: Menyediakan kueri
- Kueri dukungan: Sertakan
ORDER_SUPPORTdanSTORE_RELEVANT.- Respons API: Tidak ada
conversational_text_response. - Tindakan Anda: Alihkan pengguna ke halaman yang sesuai, seperti Pelacakan Pesanan, Pencari Lokasi Toko, atau tampilkan respons standar.
- Respons API: Tidak ada
Agen Conversational Commerce menggunakan kategori kueri penelusuran untuk menentukan apakah jawaban berbasis LLM dibuat dan cara kueri pengguna akhir ditangani oleh API Percakapan dan Penelusuran untuk skenario ini:
| Kategori | Klasifikasi kueri |
|---|---|
| #1. Kueri tidak relevan yang tidak memerlukan jawaban LLM |
|
| #2. Pertanyaan dukungan dan informasi |
|
| #3. Penelusuran kata kunci yang tidak memerlukan LLM Permintaan API percakapan: Kueri awal { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "show me some monster energy drinks", "visitorId": "test" } Respons API percakapan: Respons awal { "userQueryTypes": ["SIMPLE_PRODUCT_SEARCH"], "conversationId": "479fd093-c701-4899-bcc3-9e711233bdf9", "refinedSearch": [ { "query": "monster energy drinks" } ] } Permintaan Search API: Kueri lanjutan { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "monster energy drinks", "visitorId": "test" } |
|
| #4. Kueri pencarian jawaban LLM Permintaan API percakapan: Kueri awal { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "Compare 1% milk with 2% milk", "visitorId": "test" } Respons API percakapan: Respons awal { "userQueryTypes": ["PRODUCT_COMPARISON"], "conversationalTextResponse": "1% milk contains 110 calories, 1.5 g of saturated fat, and 140 mg of sodium per cup. 2% milk is reduced fat with 37% less fat than regular milk and contains vitamins A & D.", "conversationId": "0e1cfdac-802f-422d-906e-9fc9f9d733ba", "refinedSearch": [ { "query": "1% milk" }, { "query": "2% milk" } ] } Permintaan Search API: Kueri lanjutan { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "1% milk", "visitorId": "test" } |
|
| #5. Penyempurnaan maksud (Intent refinement) Permintaan API percakapan: Kueri awal { "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/118220807021/locations/global/catalogs/default_catalog/branches/default_branch", "query": "Help me plan a party", "visitorId": "test" } Respons API percakapan: Respons awal { "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" } |
|
Kategori 1. Kueri tidak relevan yang tidak memerlukan jawaban LLM
-
QUERY_TYPE_UNSPECIFIED: - Tidak ada
conversational_text_responseyang diberikan. - Tindakan: Tangani sebagai kasus default atau error. Anda dapat meminta klarifikasi kepada pengguna atau mengarahkan mereka ke tempat mereka bisa mendapatkan bantuan umum.
RETAIL_IRRELEVANT:- Tidak ada
conversational_text_responseyang diberikan. - Tindakan: Tangani hal ini dengan menampilkan pesan yang sesuai, seperti Saya tidak dapat menjawab pertanyaan itu,atau Saya adalah asisten belanja, bagaimana saya dapat membantu Anda?, sebagaimana ditentukan oleh desain aplikasi Anda.
BLOCKLISTED:- Tidak ada
conversational_text_responseyang diberikan. - Tindakan: Tangani sesuai dengan kebijakan daftar blokir Anda, biasanya dengan menampilkan pesan tidak dapat memenuhi permintaan ini yang generik.
Kategori 2. Pertanyaan dukungan dan informasi
Untuk jenis ini, API tidak menyediakan conversational_text_response langsung secara default, tetapi Anda memiliki opsi untuk mengarahkan ke link atau resource yang tepat.
ORDER_SUPPORT:- Tindakan default: Tidak ada
conversational_text_responseyang diberikan. Antarmuka web Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke API dukungan khusus atau saluran layanan pelanggan Anda sendiri. DEALS_AND_COUPONS:- Tindakan default: Tidak ada
conversational_text_responseyang diberikan. Antarmuka web Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke sistem promosi atau penawaran Anda. STORE_RELEVANT:- Tindakan default: Tidak ada
conversational_text_responseyang diberikan. Antarmuka web Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke sistem informasi atau pencari lokasi toko Anda sendiri. RETAIL_SUPPORT:- Tindakan default: Tidak ada
conversational_text_responseyang diberikan. Antarmuka web Anda harus menampilkan beberapa pesan standar, link yang relevan, atau mengalihkan kueri ke sistem informasi dan pertanyaan umum Anda sendiri.
Kategori 3. Penelusuran kata kunci yang tidak memerlukan jawaban LLM
SIMPLE_PRODUCT_SEARCH:- Tidak ada respons teks percakapan yang dihasilkan.
- Tindakan: Respons API selalu menampilkan satu kueri
refined_search. Kueri yang dipersempit ini berfungsi sebagai istilah penelusuran yang disarankan. Lakukan panggilan langsung ke Search API inti (SearchService.Search) dan ambil hasil produk yang relevan menggunakan salah satu kueri asli atau kuerirefined_search.refined_search.querymungkin tidak langsung berasal dari input pengguna akhir saat ini, tetapi juga dapat berasal dari konteks histori chat, seperti jika pengguna akhir sebelumnya menyempurnakan gaun pesta menjadi gaun merah, kueri yang disempurnakan dapat menjadi gaun pesta merah. - Untuk antarmuka percakapan (seperti chatbot): Sangat direkomendasikan untuk menggunakan
refined_search.queryyang disediakan oleh API. Dalam alur percakapan, kueri bahasa alami seperti "dapatkah Anda membantu saya menemukan pisang" dioptimalkan secara otomatis oleh API menjadi istilah penelusuran produk yang tepat ("pisang"), sehingga menghasilkan hasil produk yang lebih relevan. - Untuk pengalaman penelusuran inti (seperti halaman hasil penelusuran): Anda memiliki fleksibilitas untuk menggunakan
refined_search.querydari API atau kueri asli yang diberikan oleh pengguna akhir, karena kueri asli kemungkinan besar sudah merupakan istilah penelusuran produk yang tepat. Pilih opsi yang paling sesuai dengan strategi tampilan hasil penelusuran dan antarmuka web Anda. - Opsi pengalaman pengguna: Percakapan tidak perlu diakhiri untuk kueri
SIMPLE_PRODUCT_SEARCH. Pengguna Anda dapat melanjutkan percakapan dengan meneruskanconversation_iddalam permintaan berikutnya. - Opsi A: Mengakhiri antarmuka web percakapan: Banyak retailer memilih untuk mengalihkan pengguna Anda ke halaman hasil penelusuran standar setelah
SIMPLE_PRODUCT_SEARCHterdeteksi, sehingga menutup jendela chat. Dalam skenario ini, jika pengguna akhir kemudian memasukkan kueri baru ke dalam kotak penelusuran standar tanpaconversation_idsebelumnya, kueri tersebut akan dianggap sebagai percakapan baru yang terpisah, danconversation_idbaru akan dikeluarkan. - Opsi B: Melanjutkan antarmuka web percakapan: Retailer dapat memilih untuk tetap membuka jendela chat. Tindakan ini memungkinkan pengguna Anda kembali ke mode percakapan. Keputusan untuk menerapkan Opsi A atau B sepenuhnya bergantung pada pengalaman pengguna pilihan retailer.
- Mengambil
conversation_id. Saat Anda melakukan panggilan APIconversationalSearch,ConversationalSearchResponse.conversation_idakan ditampilkan. - Beri tag pada peristiwa pengguna. Jika respons percakapan menghasilkan kueri penelusuran, seperti jika sistem Anda otomatis menjalankan penelusuran berdasarkan kueri yang telah disempurnakan untuk
SIMPLE_PRODUCT_SEARCH, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent) denganconversation_idyang sama yang diterima diConversationalSearchResponse.
Untuk mengatribusikan kueri penelusuran secara akurat ke interaksi percakapan dan menggunakan kemampuan analisis lengkap dalam Vertex AI Search untuk commerce, pemberian tag pada peristiwa yang tepat sangat penting:
Dengan memberi tag UserEvent.conversation_id secara benar, analisis Anda dapat secara akurat mengatribusikan kueri penelusuran ke interaksi percakapan sebelumnya, sehingga memberikan insight berharga tentang perilaku dan jalur konversi pengguna Anda.
Kategori 4. Kueri pencarian jawaban LLM
Untuk jenis kueri ini, API menghasilkan conversational_text_response (jawaban LLM) dan mungkin juga memberikan satu atau beberapa kueri refined_search. Percakapan tidak berakhir, dan pengguna akhir dapat melanjutkannya.
PRODUCT_DETAILS:- Tindakan:
conversational_text_responsememberikan detail produk yang diminta. Sistem Anda harus menampilkan informasi ini dengan jelas kepada pengguna. - Respons juga mencakup
refined_search(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti. PRODUCT_COMPARISON:- Tindakan:
conversational_text_responsememberikan perbandingan produk yang ditentukan. Sistem Anda harus menampilkan informasi ini dengan jelas kepada pengguna. - Respons mencakup
refined_search(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti. BEST_PRODUCT:- Tindakan:
conversational_text_responsememberikan rekomendasi atau informasi tentang produk yang paling cocok dengan kueri. Sistem Anda akan menampilkan informasi ini. - Respons mencakup
refined_search(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti.
Kategori 5. Penyempurnaan intent
INTENT_REFINEMENT:- Tindakan: Respons mencakup
conversational_text_response,followup_question, danrefined_search(satu atau beberapa kueri penelusuran yang disarankan). Urutan tampilan yang direkomendasikan adalah sebagai berikut: conversational_text_response- Saran
refined_search: Saran ini diurutkan dan diberi peringkat, jadi penting untuk menampilkannya dalam urutan yang sama dengan respons. Followup_question- Respons mencakup
refined_search(satu atau beberapa kueri penelusuran yang disarankan, diurutkan dan diberi peringkat) yang harus digunakan untuk mengambil hasil penelusuran menggunakan Search API inti. - Untuk interaksi berikutnya, kirim jawaban pengguna Anda bersama dengan
conversation_id.
Menampilkan kueri yang disarankan untuk produk
Berikut cara mengonfigurasi Google Penelusuran untuk menampilkan pertanyaan dan saran produk di agen Conversational Commerce.
Saat Conversational API menampilkan kueri refinedSearch, kueri ini memberikan peluang yang sangat baik untuk memandu pengguna akhir menuju produk yang relevan. Hal ini sangat berharga untuk Kategori 4 (kueri pencarian jawaban LLM) dan Kategori 5 (INTENT_REFINEMENT).
Rekomendasi
- Tampilkan: Menampilkan
N(1-3, menunggu pengujian tentang jumlah ideal untuk antarmuka web Anda)refinedSearchkueri teratas kepada pengguna Anda. - Mekanisme: Kueri yang disarankan ini harus dijalankan melalui Search API inti (
SearchService.Search) di latar belakang atau saat interaksi pengguna. - Presentasi: Tampilkan hasil sebagai carousel interaktif atau kartu yang dapat diklik, sehingga pengguna dapat menjelajahi kategori produk terkait atau item tertentu. Hal ini memberikan nilai langsung dan membantu menjembatani kesenjangan antara interaksi percakapan dan penemuan produk.
Permintaan Search API:
Kueri lanjutan
{ "placement": "projects/118220807021/locations/global/catalogs/default_catalog/placements/default_search", "query": "Decorations", "visitorId": "test" }
Peristiwa yang akan dikirim ke Vertex AI Search untuk commerce
Penting untuk mengatribusikan kueri penelusuran secara akurat ke interaksi percakapan dan menggunakan kemampuan analisis lengkap dalam Vertex AI Search untuk commerce menggunakan pemberian tag peristiwa yang tepat:
- Mengambil
conversation_id. Saat Anda melakukan panggilan APIconversationalSearch,ConversationalSearchResponse.conversation_idakan ditampilkan. - Beri tag pada peristiwa pengguna. Jika respons percakapan mengarah ke kueri penelusuran, seperti dengan menampilkan saran
refined_searchyang kemudian diklik oleh pengguna akhir, atau jika sistem Anda otomatis menjalankan penelusuran berdasarkan kueri yang disempurnakan, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent) denganconversation_idyang sama yang diterima diConversationalSearchResponse.
Dengan memberi tag UserEvent.conversation_id dengan benar, analisis Anda dapat secara akurat mengatribusikan kueri penelusuran ke interaksi percakapan sebelumnya, sehingga memberikan insight berharga tentang perilaku pengguna dan jalur konversi.
Lanjutkan percakapan
Bagian ini menjelaskan cara sesi agen Conversational Commerce dipertahankan oleh Conversational API dan berlanjut di langkah terakhir ini.
Conversational API menggunakan conversation_id untuk mengelola percakapan yang sedang berlangsung. Untuk memastikan konsistensi antara jawaban LLM dan hasil penelusuran, permintaan Conversational API berikutnya harus menyertakan SearchParams yang mencerminkan konfigurasi panggilan Search API inti.
Penanganan sesi
- Mulai percakapan baru:
- Deskripsi: Untuk memulai percakapan baru, klien menghilangkan
conversationIddari permintaan API. - Kapan memulai percakapan baru: Klien ingin memulai percakapan baru—sehingga mendapatkan
conversationIdbaru dari respons API—dalam beberapa skenario pengalaman pengguna umum:- Tab atau sesi baru: Saat pelanggan membuka situs Anda di tab browser baru atau memulai sesi yang benar-benar baru.
- Kueri asli baru: Dalam beberapa desain UX, jika pelanggan memasukkan kueri baru yang tidak terkait, Anda dapat memilih untuk memulai ulang alur percakapan untuk memastikan konteks yang paling relevan.
- Tombol mulai ulang percakapan: Jika antarmuka web Anda menyediakan tombol Mulai percakapan baru atau Reset percakapan, mengklik tombol ini akan memicu sesi percakapan baru.
- Integrasi API percakapan: Respons API mencakup
conversationIdbaru yang digunakan untuk permintaan berikutnya.
- Deskripsi: Untuk memulai percakapan baru, klien menghilangkan
- Lanjutkan Percakapan:
- Deskripsi:
Conversational APImenampilkanconversation_idsebagai bagian dari respons API. ID ini harus dikirim dalam permintaan lanjutan untuk melanjutkan percakapan yang sama. Hal ini membantu memastikan bahwa agen Conversational Commerce merespons kueri pengguna Anda berdasarkan histori percakapan dalam sesi tersebut, yang mencakupquerypengguna akhir,conversational_text_response, danfollowup_question. - Integrasi API percakapan: Klien meneruskan
conversation_iddari respons sebelumnya diConversationalSearchRequest.
- Deskripsi:
- Pastikan konsistensi hasil penelusuran:
- Deskripsi: Untuk membantu memastikan jawaban LLM konsisten dengan hasil penelusuran yang ditampilkan kepada pengguna Anda, klien harus menggunakan
searchParamsdalam permintaanConversational API. Parameter penelusuran ini harus memiliki konfigurasi yang sama, seperti filter, urutan pengurutan) dengan panggilanSearch APIyang dilakukan untuk mengambil hasil produk. - Integrasi API percakapan: Objek
searchParamsdalamConversationalSearchRequestharus diisi secara identik denganSearchRequestyang digunakan untuk penelusuran produk inti.
- Deskripsi: Untuk membantu memastikan jawaban LLM konsisten dengan hasil penelusuran yang ditampilkan kepada pengguna Anda, klien harus menggunakan
Mengirim permintaan ke Vertex AI Search untuk commerce
Anda dapat mengambil conversation_id dari penyimpanan sesi. Permintaan harus menyertakan query pelanggan baru, yang mungkin berupa balasan atas pertanyaan dari respons sebelumnya. Permintaan juga harus menyertakan refined_search.query terbaru dari respons sebelumnya jika pengguna akhir bertindak berdasarkan kueri yang dipertajam. Jika tidak, kueri tersebut harus menyertakan kueri yang sama sekali baru dan tidak terkait, serta conversationId. Jangan lupa untuk selalu menyertakan searchParams.
- Skenario 1: Kotak penelusuran tunggal dan percakapan persisten: Jika antarmuka penelusuran Anda hanya memiliki satu kotak penelusuran utama atau jendela percakapan persisten, Anda tidak akan mereset
conversationId, meskipun pengguna akhir mengetik kueri baru yang tampaknya tidak terkait. Sistem menggunakan histori percakapan yang ada (terkait denganconversationId) untuk memberikan respons yang relevan secara kontekstual. - Skenario 2: Jendela percakapan dan jendela kueri terpisah: Jika antarmuka penelusuran Anda menyediakan jendela chat percakapan yang berbeda dan kolom kueri penelusuran standar yang terpisah (seperti kotak penelusuran di seluruh situs), memasukkan kueri baru ke kolom penelusuran standar dapat secara implisit menandakan niat untuk memulai penelusuran baru yang tidak terkait, sehingga berpotensi menyebabkan
conversationIddireset untuk tindakan penelusuran tertentu tersebut. Namun, dalam jendela percakapan khusus,conversationIdharus selalu dipertahankan untuk kesinambungan.
Pada akhirnya, keputusan tentang kapan harus menggunakan kembali versus mereset conversationId adalah pilihan desain untuk mengoptimalkan pengalaman percakapan bagi pelanggan Anda.
Metode dan endpoint HTTP (sama dengan kueri awal)
POST https://retail.googleapis.com/v2/{placement=projects/*/locations/*/catalogs/*/placements/*}:conversationalSearch
Permintaan API percakapan:
Kueri lanjutan
{ "query": "A birthday party", // New query continuing the conversation from the previous turn "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "visitorId": "test", // Or your actual visitor_id "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", // conversation_id from previous response "searchParams": { "filter": "categories:(\"Birthday Party Supplies\")" } }
Respons API percakapan:
Respons lanjutan
{ "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "Great! For a birthday party, you might be interested in specific themes or age-group appropriate items.", "followupQuestion": { "followupQuestion": "What's the age group or theme?" }, "refinedSearch": [ { "query": "Birthday party decorations" }, { "query": "Birthday party supplies" } ], "state": "SUCCEEDED" }
Contoh pengguna akhir yang terus menerima pertanyaan:
- Pertanyaan pengguna: Bantu saya merencanakan pesta.
- Jawaban sistem: Pesta seperti apa yang Anda rencanakan?
- Balasan pengguna: Pesta ulang tahun.
Yang harus dilakukan retailer dengan respons
Cara merender kolom mirip dengan respons awal, tetapi perhatikan perubahan yang mencerminkan percakapan yang berlanjut:
refined_search: Kolom ini berisi kueri yang diperbarui yang menggabungkan input terbaru pengguna akhir. Anda harus memperbarui konsol klien untuk kueri saat ini dengan tepat (seperti menampilkan kueri yang ditampilkan kepada pengguna yang telah berubah dari "dekorasi" menjadi "dekorasi pesta ulang tahun" atau "perlengkapan pesta ulang tahun"). Kueri refined_search dapat digunakan untuk panggilan ke Search API inti (SearchService.Search) atau juga dapat ditampilkan kepada pengguna akhir sebagai saran.conversational_text_response: Menampilkan respons teks buatan AI baru yang relevan dengan giliran terakhir.followup_question: Jika percakapan perlu dilanjutkan untuk penyempurnaan lebih lanjut,followup_questionbaru akan diberikan.
Peristiwa yang akan dikirim ke Vertex AI Search untuk commerce
Pemberian tag pada peristiwa penting untuk mengatribusikan kueri penelusuran secara akurat ke interaksi percakapan dan menggunakan kemampuan analisis di Vertex AI Search untuk commerce.
Ada dua langkah dalam proses pemberian tag pada peristiwa:
Mengambil
conversation_id. Saat Anda melakukan panggilan APIconversationalSearch,ConversationalSearchResponse.conversation_idakan ditampilkan.Beri tag pada peristiwa pengguna. Jika respons percakapan mengarah ke kueri penelusuran, seperti dengan menampilkan saran
refined_search, atau jika sistem Anda otomatis menjalankan penelusuran berdasarkan kueri yang disempurnakan, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent) denganonversation_idyang sama yang diterima diConversationalSearchResponse.
Dengan memberi tag UserEvent.conversation_id dengan benar, analisis Anda dapat secara akurat mengatribusikan kueri penelusuran ke interaksi percakapan sebelumnya, sehingga memberikan insight berharga tentang perilaku pengguna akhir dan jalur konversi.
Mengintegrasikan agen dengan pemfilteran produk percakapan
Panduan ini menguraikan cara berintegrasi dengan Conversational API dan pemfilteran produk percakapan untuk memberikan pengalaman belanja yang didukung AI. Jika conversationalFilteringSpec.mode disetel ke ENABLED, sistem Anda dapat langsung bertransisi antara interaksi percakapan terbuka dan pemfilteran produk terpandu, sehingga menawarkan perjalanan pengguna yang sangat canggih.
Memahami interaksi
Jika agen commerce percakapan dan pemfilteran produk percakapan diaktifkan, sistem akan memanfaatkan keunggulan masing-masing. Agen perdagangan percakapan menangani pertanyaan umum, memberikan respons buatan AI, dan menyempurnakan maksud awal, sementara pemfilteran produk percakapan memandu pengguna memilih atribut produk tertentu menggunakan model interaksi berbasis chip atau kartu yang disederhanakan.
Titik interaksi dan potensi transisi antara kedua mode ini terjadi saat klasifikasi Conversational Commerce API mengarah ke penelusuran berorientasi produk, khususnya SIMPLE_PRODUCT_SEARCH. Pada tahap ini, API dapat memberikan kueri penelusuran langsung atau, jika maksud pengguna dapat lebih disempurnakan, API akan memicu alur pemfilteran terpandu melalui pemfilteran produk percakapan.
Prinsip utama integrasi ini adalah bahwa semua input teks bebas ditangani oleh Conversational Commerce API, sedangkan klik pada jawaban yang disarankan yang muncul sebagai chip ditangani oleh pemfilteran produk percakapan.
Mengirim kueri pengguna
Contoh input pengguna: Bantu saya merencanakan pesta
Untuk mengaktifkan agen commerce percakapan dan pemfilteran produk percakapan, pastikan ConversationalSearchRequest Anda menyertakan konfigurasi ini:
Permintaan Conversational Commerce API—Kueri awal
{ "query": "Help me plan a party", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search", "visitorId": "your_visitor_id", "conversationId": "", // Leave empty for the first query, or populate for ongoing conversation "searchParams": { // IMPORTANT: These search parameters should mirror the configuration // of your Commerce Search API calls to ensure consistency. "filter": "categories:(\"Party Supplies\" OR \"Decorations\" OR \"Food & Drink\")" }, "userInfo": { // Optional: User information for enhanced personalization }, "conversationalFilteringSpec": { "conversational_filtering_mode": "ENABLED" // Crucial for enabling product filtering } }
Konfigurasi utamanya adalah:
Conversational_filtering_mode: ENABLED: Menetapkan kolom ini keENABLEDdiconversationalFilteringSpecmemberi tahu API bahwa sistem Anda dapat menangani pemfilteran produk percakapan, sehingga API dapat memberikan respons khusus pemfilteran yang relevan.
Respons awal: Penyempurnaan maksud
Kolom userQueryTypes tetap menjadi pusat untuk memahami maksud pengguna. Untuk kueri awal yang luas seperti Bantu saya merencanakan pesta, API kemungkinan akan mengklasifikasikannya sebagai INTENT_REFINEMENT jika penelusuran produk yang lebih spesifik tidak langsung jelas.
Respons dari Google
Respons Conversational Commerce API—Kueri awal
{ "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "To plan a party, you'll need decorations, snacks, party supplies, drinks, and a cake. You can find a wide variety of decorations, snacks, and drinks. For party supplies, you can find everything from plates and cups to balloons and streamers. And for cake, you can choose from a variety of flavors and sizes.", "followupQuestion": { "followupQuestion": "What kind of party are you planning?" }, "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "Decorations" }, { "query": "Snacks" }, { "query": "Party Supplies" }, { "query": "Drinks" }, { "query": "Cake" } ], "state": "SUCCEEDED" }
Tindakan
- Tampilkan
conversationalTextResponse. - Menampilkan
refinedSearchsaran seperti chip yang dapat diklik untuk Dekorasi, Camilan. Atau, panggil Commerce Search API secara paralel menggunakan kuerirefined_searchuntuk menampilkan hasil produk yang relevan, seperti untuk Dekorasi, Camilan sebagai carousel, bersama dengan pertukaran percakapan. - Tampilkan
followupQuestion: Pesta seperti apa yang Anda rencanakan? - Mengizinkan input pengguna bentuk bebas untuk melanjutkan percakapan.
Pemberian tag dan analisis peristiwa
Untuk memastikan analisis dan atribusi yang akurat untuk interaksi percakapan awal:
- Mengambil
conversation_id. Ambilconversation_iddariConversationalSearchResponse. ID ini sangat penting untuk menautkan semua tindakan berikutnya ke sesi percakapan tertentu ini. - Beri tag pada peristiwa pengguna. Jika respons percakapan mengarah ke kueri penelusuran, seperti sistem Anda yang otomatis menjalankan penelusuran berdasarkan kueri
refined_search, atau jika pengguna mengklik saranrefined_search, Anda harus memberi tag pada peristiwa pengguna penelusuran berikutnya (UserEvent) denganconversation_idyang sama.
Kueri lanjutan
Saat pengguna merespons followupQuestion, percakapan akan lebih baik.
Contoh input pengguna: Pesta ulang tahun
Penyempurnaan maksud | Cuplikan kode
Permintaan Conversational Commerce API—Kueri lanjutan
{ "query": "A birthday party", // New query continuing the conversation from the previous turn "placement": "projects/799252947591/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "visitorId": "test", // Or your actual visitor_id "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", // conversation_id from previous response "searchParams": {}, "conversationalFilteringSpec": { "conversational_filtering_mode": "ENABLED" } }
Respons Conversational Commerce API—Kueri lanjutan
{ "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "userQueryTypes": ["INTENT_REFINEMENT"], "conversationalTextResponse": "Great! For a birthday party, you might be interested in specific themes or age-group appropriate items.", "followupQuestion": { "followupQuestion": "What's the age group or theme?" }, "refinedSearch": [ { "query": "Birthday party decorations" }, { "query": "Birthday party supplies" } ], "state": "SUCCEEDED" }
Tindakan
- Mirip dengan respons awal, perbarui antarmuka web dengan saran
conversationalTextResponse,refinedSearch, danfollowupQuestionbaru. - Lanjutkan alur percakapan, minta detail lebih lanjut.
Pemberian tag dan analisis peristiwa
Saat pengguna melanjutkan percakapan:
- Mengambil
conversation_id. Pastikanconversation_iddariConversationalSearchResponsesebelumnya diteruskan diConversationalSearchRequestsaat ini. - Beri tag pada peristiwa pengguna. Jika respons percakapan menghasilkan kueri penelusuran baru, seperti karena pengguna mengklik saran
refined_searchatau sistem Anda melakukan panggilan penelusuran paralel, beri tag pada peristiwa pengguna penelusuran berikutnya (UserEvent) denganconversation_idyang sama. Hal ini membantu melacak perjalanan percakapan multi-giliran.
Transisi ke pemfilteran produk percakapan
Saat percakapan menjadi lebih spesifik, sistem dapat mengklasifikasikan maksud sebagai SIMPLE_PRODUCT_SEARCH, dan jika sesuai, memicu pemfilteran produk percakapan.
Contoh input pengguna: Tema putri
Permintaan Conversational Commerce API—Kueri lanjutan
{ "query": "Princess theme", "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "visitorId": "your_visitor_id", "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "searchParams": {}, "userInfo": {}, "conversationalFilteringSpec": { "conversational_filtering_mode": "ENABLED" } }
Kemungkinan hasil untuk penelusuran produk inti
Jika kueri diklasifikasikan sebagai SIMPLE_PRODUCT_SEARCH, ada dua kemungkinan respons API, bergantung pada apakah Pemfilteran Produk Percakapan dipicu atau tidak. Perbedaan utamanya terletak pada keberadaan dan konten kolom conversationalFilteringResult.
Hasil 1: Pemfilteran dipicu
Hal ini terjadi saat kueri cukup inti untuk disempurnakan lebih lanjut berdasarkan atribut produk. Respons mencakup conversationalFilteringResult, yang harus diprioritaskan oleh antarmuka web Anda.
Respons Conversational Commerce API—Transisi ke pemfilteran produk:
{ "userQueryTypes": ["SIMPLE_PRODUCT_SEARCH"], "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "princess birthday decorations" } ], "conversationalFilteringResult": { "followupQuestion": "What specific type of princess decoration are you looking for?", "suggestedAnswers": [ { "answer": "Balloons", "query": "princess birthday balloons" }, { "answer": "Streamers", "query": "princess birthday streamers" }, { "answer": "Tablecloths", "query": "princess birthday tablecloths" } ] }, "state": "SUCCEEDED" }
Tindakan
Kueri kini telah diklasifikasikan sebagai SIMPLE_PRODUCT_SEARCH. Dalam hal ini, pemfilteran produk percakapan akan dipicu. Namun, hal ini mungkin tidak memicu pemfilteran produk percakapan.
- Prioritaskan antarmuka web pemfilteran produk percakapan:Jika
conversationalFilteringResultdiisi, hal ini menandakan bahwa Anda telah memasuki mode pemfilteran produk. Antarmuka web Anda harus menekankanfollowupQuestion, yang muncul di antarmuka pengguna seperti Jenis dekorasi putri seperti apa yang Anda cari?, dansuggestedAnswers, seperti tombol yang dapat diklik untuk Balon, Pita, Taplak Meja. - Menampilkan hasil produk: Segera panggil Retail Search API menggunakan
refined_search.query(dekorasi ulang tahun putri) untuk menampilkan hasil produk awal bersama opsi pemfilteran. - Praktik pengalaman pengguna yang direkomendasikan: Harus ada satu kolom input teks bebas yang persisten untuk seluruh pengalaman. Panel ini akan tetap aktif setiap saat, termasuk selama alur pemfilteran produk percakapan. Saat
conversationalFilteringResultaktif dan Anda menampilkan saran jawaban sebagai chip yang dapat diklik, pengguna memiliki dua opsi yang jelas: - Lanjutkan alur pemfilteran dengan mengklik jawaban yang disarankan.
- Mulai giliran percakapan baru dengan mengetik kueri baru ke dalam kolom teks yang aktif. Input baru ini selalu memicu panggilan baru ke Conversational Commerce API, sehingga mengakhiri alur pemfilteran saat ini.
Hasil 2: Tidak ada pemfilteran yang dipicu
Jika kueri sudah cukup spesifik atau tidak dapat difilter lebih lanjut, respons tidak menyertakan kolom conversationalFilteringResult. Dalam hal ini, Anda harus melanjutkan dengan penelusuran standar.
Tindakan
- Perlakukan interaksi sebagai akhir alur percakapan dan gunakan kueri
refined_searchuntuk memanggil Retail Search API dan menampilkan halaman hasil produk standar.
Pemberian tag dan analisis peristiwa
Saat percakapan beralih ke pemfilteran produk:
- Mengambil
conversation_id. Terus menggunakanconversation_idyang sama. - Beri tag pada peristiwa pengguna. Jika transisi mengarah ke penelusuran langsung, beri tag
UserEventtersebut denganconversation_id. Yang penting, saat pengguna berinteraksi dengansuggestedAnswers, seperti saat pengguna akhir mengklik Balon, tindakan ini juga harus memicuUserEvent, seperti peristiwafilteratau peristiwasearchbaru, yang diberi tag denganconversation_idyang sama. Hal ini memungkinkan atribusi tindakan pemfilteran dalam alur percakapan.
Melanjutkan pemfilteran produk percakapan
Saat pengguna memilih suggestedAnswer, kirim ConversationalSearchRequest baru.
Contoh input pengguna (Mengklik jawaban yang disarankan): Balon
Penelusuran produk sederhana | Cuplikan kode
Permintaan Conversational Commerce API—Lanjutkan pemfilteran
{ "query": "Balloons", // The selected answer "placement": "projects/YOUR_PROJECT_ID/locations/global/catalogs/default_catalog/placements/default_search", "branch": "projects/{project_id}/locations/{location_id}/catalogs/{catalog_id}/branches/default_branch", "visitorId": "your_visitor_id", "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", // Maintain conversation ID "searchParams": {}, "userInfo": {}, "conversationalFilteringSpec": { "conversational_filtering_mode": "ENABLED" } }
Respons Conversational Commerce API—Lanjutkan pemfilteran
{ "userQueryTypes": ["SIMPLE_PRODUCT_SEARCH"], "conversationId": "1577511e-36ed-4054-8e07-48d1ca016bcb", "refinedSearch": [ { "query": "princess birthday balloons" } ], "state": "SUCCEEDED" }
Tindakan
API merespons dengan kueri SIMPLE_PRODUCT_SEARCH, tetapi tanpa kolom conversationalFilteringResult, yang menunjukkan bahwa alur pemfilteran terpandu telah selesai.
- Gunakan kueri
refinedSearchakhir (balon ulang tahun putri) untuk melakukan panggilan langsung ke Retail Search API. - Tampilkan hasil produk akhir kepada pengguna. Pada tahap ini, percakapan dapat berakhir, atau pengguna dapat memasukkan kueri baru untuk memulai giliran baru.
Pemberian tag dan analisis peristiwa
Untuk setiap langkah dalam proses pemfilteran produk:
- Mengambil
conversation_id. Selalu gunakanconversation_idyang sama untuk semua permintaan dalam sesi pemfilteran. - Beri tag pada peristiwa pengguna. Setiap interaksi pengguna dengan
suggestedAnswerseperti klik, harus memicuUserEventyang relevan seperti peristiwafilteratau peristiwasearchbaru jika kueri baru dibuat.UserEventini harus diberi tag denganconversation_iduntuk melacak perjalanan pemfilteran dan dampaknya terhadap konversi secara akurat.
Arsitektur referensi
Berikut adalah desain arsitektur referensi Vertex AI Search untuk commerce di Google Cloud. Arsitektur referensi ini menggambarkan alur data dan layanan untuk agen perdagangan percakapan. Diagram ini menunjukkan cara peristiwa pengguna, data katalog produk, dan log operasional diproses, diubah, dan diintegrasikan ke dalam indeks AI generatif dan layanan Retail Adapter untuk menangani operasi penelusuran dan memenuhi niat pengguna untuk menampilkan hasil penelusuran. Arsitektur ini menghubungkan berbagai project untuk mengaktifkan fungsi penelusuran e-commerce yang komprehensif dan didukung AI.

Langkah berikutnya
Untuk sumber daya dukungan tambahan, lihat jawaban atas pertanyaan tentang Fitur percakapan.