为什么actions.intent.TRANSACTION_DECISION未触发?JSON是否存在问题?
排查
actions.intent.TRANSACTION_DECISION触发失败问题 我来帮你排查这个交易决策意图触发失败的问题,结合你描述的场景,咱们从几个关键方向入手:
1. 检查TRANSACTION_DECISION触发的JSON结构完整性
Google对这个意图的触发JSON有严格的字段要求,很多失败案例都是因为核心字段缺失或格式错误。你需要确保Int3返回的Webhook响应包含以下核心节点:
payload.google.systemIntent:intent必须精确为actions.intent.TRANSACTION_DECISION,parameterName要和后续处理的参数对应payload.google.systemIntent.data:@type必须是type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec,同时要包含完整的order对象(必填merchantOrderId、items、summary)和paymentOptions
举个适配你巧克力盒场景的正确结构示例:
{ "fulfillmentText": "Great! Let's finalize your order.", "payload": { "google": { "richResponse": { "items": [ { "simpleResponse": { "textToSpeech": "Great! Let's finalize your order for the premium chocolate box." } } ] }, "systemIntent": { "intent": "actions.intent.TRANSACTION_DECISION", "parameterName": "transactionDecision", "data": { "@type": "type.googleapis.com/google.actions.transactions.v3.TransactionDecisionValueSpec", "order": { "merchantOrderId": "choco_order_12345", "items": [ { "id": "choco_box_001", "name": "Premium Assorted Chocolate Box", "description": "12 pieces of dark and milk chocolate", "price": { "amount": { "currencyCode": "USD", "nanos": 0, "units": 29 }, "type": "REGULAR" }, "quantity": 1 } ], "summary": { "totalPrice": { "amount": { "currencyCode": "USD", "nanos": 0, "units": 29 }, "type": "REGULAR" }, "subtotal": { "amount": { "currencyCode": "USD", "nanos": 0, "units": 29 } }, "merchantName": "Your Chocolate Store" } }, "paymentOptions": { "googleProvidedOptions": { "paymentType": "PAYMENT_CARD" } } } } } } }
你可以对比自己的JSON,重点检查是否遗漏了order.summary.merchantName、items中的必填字段,或者currencyCode是否符合ISO 4217标准(比如USD、EUR)。
2. 确认Int4的配置细节
虽然你绑定了事件,但还是要检查几个容易忽略的点:
- 确保Int4的Webhook fulfillment确实处于启用状态(有时候会误操作取消)
- 事件名称必须精确为
actions_intent_TRANSACTION_DECISION(注意是下划线连接,不是点) - 不要给Int4添加任何训练短语——这个意图是系统自动触发的,手动添加训练短语反而会干扰触发逻辑
3. 检查Transactions API的项目配置
即使其他内置意图正常,TRANSACTION_DECISION有更严格的权限要求:
- 确认你的Google Cloud项目已经启用了Transactions API(在Cloud Console的API库中搜索启用)
- 检查项目的OAuth consent screen配置是否完整,尤其是涉及用户支付信息的权限
- 在Dialogflow代理的Integrations -> Google Assistant中,确认已经开启Transactions功能,并配置了正确的商家信息(比如商家ID、支持的支付方式)
4. 查看Google Assistant的错误日志
最直接的定位方式是去Actions Console -> 你的项目 -> 测试 -> 日志,里面会有详细的错误信息,比如JSON解析错误、字段缺失、权限不足等。比如日志如果显示“missing required field 'merchantName' in order summary”,就能精准知道要补哪个字段。
5. 排除Webhook的其他问题
- 用JSON校验工具检查返回的JSON是否有语法错误(比如逗号遗漏、引号不匹配)
- 确认Webhook响应时间不超过5秒——超时会导致Google Assistant直接返回错误
- 检查你的Webhook服务器是否能被Google的IP访问,没有防火墙或网络限制
你可以先从检查日志和JSON结构开始,这两个是最常见的问题点。如果还是无法解决,可以把Int3返回的JSON(敏感信息打码)贴出来,方便进一步排查。
内容的提问来源于stack exchange,提问作者Outcast
相关产品推荐
相关产品推荐

