使用Dialogflow+Transactions API添加订单预览配送地址遇错排查
解决Google Transactions API中ProposedOrder Extension导致的报错问题
你在用Dialogflow、Google Assistant和Transactions API构建下单聊天机器人时遇到的问题,我帮你梳理下核心原因和解决方案:
首先,你的订单预览不显示配送地址,其实不需要通过extension手动注入地址——当你在orderOptions里设置requestDeliveryAddress: true时,Google Assistant会自动拉取用户已在Assistant中保存的地址,并在订单预览里展示,根本不需要手动在proposedOrder里添加地址相关的extension。
而你添加的GenericExtension结构大概率不符合API规范,再加上日志里显示响应被截断,说明JSON解析时出现了错误,这就是模拟器抛出“Sorry, something went wrong”的原因。
修正后的Webhook响应JSON
直接移除错误的extension字段,保留正确的Transaction Decision触发逻辑即可:
{ "fulfillmentText": "This is your order preview:", "payload": { "google": { "expectUserResponse": true, "isSsml": false, "noInputPrompts": [], "systemIntent": { "data": { "@type": "type.googleapis.com/google.actions.v2.TransactionDecisionValueSpec", "orderOptions": { "requestDeliveryAddress": true }, "paymentOptions": { "actionProvidedOptions": { "displayName": "VISA **** **** **** 3235", "paymentType": "PAYMENT_CARD" } }, "proposedOrder": { "cart": { "lineItems": [ { "description": "Book", "id": "1", "name": "Book", "price": { "amount": { "currencyCode": "USD", "nanos": 0, "units": 31 }, "type": "ACTUAL" }, "quantity": 2, "subLines": [], "type": "REGULAR" } ], "merchant": { "id": "Amazon", "name": "Amazon" }, "otherItems": [] }, "id": "<UNIQUE_ORDER_ID>", "otherItems": [], "totalPrice": { "amount": { "currencyCode": "USD", "nanos": 0, "units": 31 }, "type": "ACTUAL" } } }, "intent": "actions.intent.TRANSACTION_DECISION" } } } }
关键说明
- 地址获取逻辑:
requestDeliveryAddress: true会让Google Assistant自动处理地址拉取,用户确认后,你可以通过actions.intent.DELIVERY_ADDRESS意图获取地址详情,不需要提前在订单预览中硬编码。 - Extension的正确用法:
GenericExtension是用来添加自定义商家字段(比如配送时段选项)的,不是用来注入用户地址的。如果确实需要用它,要严格遵循google.actions.v2.orders.GenericExtension的结构规范,但你的场景完全不需要这一步。 - JSON结构完整性:日志里的响应截断说明原JSON存在语法或结构错误,移除错误的extension后,确保所有字段(比如
totalPrice的nanos)都正确设置,避免解析失败。
内容的提问来源于stack exchange,提问作者Outcast
相关产品推荐
相关产品推荐

