GCP DialogFlow CX通过webhook返回门店选择列表/按钮的方案咨询
可行实现方案
方案1:直接在Webhook响应中返回完整富媒体选项列表(最推荐)
你对a方案的理解有误,DialogFlow CX的webhook响应fulfillment_response.messages支持返回payload类型的消息,不需要先存参数再二次渲染,直接在Python侧拼接好门店选项返回即可,修改后的响应结构示例如下:
bot_response = { "fulfillment_response": { "messages": [ { "text": { "text": [ f'Thanks {first_name}! I\'ve located your account. Please select the nearest store below:' ] } }, { "payload": { "richContent": [ [ { "event": { "name": "StoreSelected", "parameters": { "selected_store_id": locations[0].store_id, "selected_store_name": locations[0].store_name }, "languageCode": "" }, "subtitle": locations[0].store_id, "title": f"{locations[0].store_name}: {locations[0].address}", "type": "list" }, { "event": { "name": "StoreSelected", "parameters": { "selected_store_id": locations[1].store_id, "selected_store_name": locations[1].store_name }, "languageCode": "" }, "subtitle": locations[1].store_id, "title": f"{locations[1].store_name}: {locations[1].address}", "type": "list" }, { "event": { "name": "StoreSelected", "parameters": { "selected_store_id": locations[2].store_id, "selected_store_name": locations[2].store_name }, "languageCode": "" }, "subtitle": locations[2].store_id, "title": f"{locations[2].store_name}: {locations[2].address}", "type": "list" } ] ] } } ] }, "session_info": { "session": session_name, "parameters": { "first_name": first_name, "email_address": email_address, "business_partner_id": business_partner_id, "address_line_1": c['response']['address_line_1'], "address_line_2": c['response']['address_line_2'], "suburb": c['response']['suburb'], "postcode": c['response']['postcode'], "region": c['response']['state'] } } }
这个方案不需要额外在控制台配置响应逻辑,所有选项动态生成,适配门店数量变化的场景。
方案2:使用会话参数在控制台配置自定义payload
如果你需要先存参数再渲染,b方案的参数插值是支持的,只是语法不是${参数名},而是使用$session.params.参数名的标准会话参数引用格式,你在DialogFlow CX对应页面的fulfillment自定义payload中填入如下结构即可:
{ "richContent": [ [ { "event": { "name": "StoreSelected", "parameters": { "selected_store_id": "$session.params.store_1_id" }, "languageCode": "" }, "subtitle": "$session.params.store_1_id", "title": "$session.params.store_1_address", "type": "list" }, { "event": { "name": "StoreSelected", "parameters": { "selected_store_id": "$session.params.store_2_id" }, "languageCode": "" }, "subtitle": "$session.params.store_2_id", "title": "$session.params.store_2_address", "type": "list" }, { "event": { "name": "StoreSelected", "parameters": { "selected_store_id": "$session.params.store_3_id" }, "languageCode": "" }, "subtitle": "$session.params.store_3_id", "title": "$session.params.store_3_address", "type": "list" } ] ] }
配置后触发对应页面时,DialogFlow CX会自动把参数占位符替换为实际存储的会话参数值。
后续选择处理
两种方案都可以给选项绑定StoreSelected事件,你只需要在控制台配置对应事件的路由,即可捕获用户选中的门店ID,进入后续业务流程。
内容的提问来源于stack exchange,提问作者JamesMatson
相关产品推荐
相关产品推荐

