You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dialogflow触发actions.intent类意图失败及交易API集成问题

解决Dialogflow+Google Assistant交易机器人的Webhook问题

我来帮你一步步梳理这些问题,都是开发Google Assistant交易功能时常见的坑:

一、解决"无法解析webhook响应,找不到data字段"与模拟器206错误

这两个问题本质是返回的JSON格式不符合Google Assistant的系统意图触发要求。要触发actions.intent.TRANSACTION_REQUIREMENTS_CHECK,你的Flask webhook必须返回严格符合Actions on Google规范的响应,核心是要在payload.google.systemIntent下包含正确的data字段。

举个正确的Python/Flask返回示例:

from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/webhook', methods=['POST'])
def webhook():
    req = request.get_json()
    intent_name = req['queryResult']['intent']['displayName']
    
    if intent_name == 'Int1':
        # 构造触发交易要求检查的响应
        response = {
            "payload": {
                "google": {
                    "expectUserResponse": True,
                    "systemIntent": {
                        "intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK",
                        "data": {
                            "@type": "type.googleapis.com/google.actions.transactions.v3.TransactionRequirementsCheckSpec",
                            "paymentOptions": {
                                "actionProvidedOptions": {
                                    "displayName": "信用卡/借记卡",
                                    "paymentType": "PAYMENT_CARD"
                                }
                            }
                        }
                    }
                }
            }
        }
        return jsonify(response)
    # 其他意图的处理逻辑
    return jsonify({})

if __name__ == '__main__':
    app.run(port=5000, debug=True)

关键要点:

  • 必须包含payload.google.systemIntent.data字段,且@type要精准指向Google定义的交易规范类型(不能写错)
  • 用jsonify返回响应,它会自动设置正确的Content-Type: application/json,避免格式解析问题
  • 确保expectUserResponse设为True,让Assistant继续处理系统意图

二、为何收不到交易要求检查结果?

主要有两个可能:

  1. 模拟器不支持交易功能:正如Google文档提示的,Web模拟器无法完整模拟交易流程,可能根本不会触发actions_intent_TRANSACTION_REQUIREMENTS_CHECK系统意图。建议改用真实的Android/iOS设备,用绑定了你开发项目的Google账号测试。
  2. Int2配置有误:检查你的Int2是否正确绑定了actions_intent_TRANSACTION_REQUIREMENTS_CHECK事件,并且启用了Webhook调用。只有启用Webhook,Assistant才会把检查结果发送到你的后端。

另外,可以去Dialogflow控制台的「Diagnostics > Logs」查看Webhook的请求/响应日志,确认系统意图是否真的被触发,以及返回的结果是否正常。

三、如何从Webhook触发系统意图?

触发actions.intent.XXX这类系统意图的通用方法,就是在Webhook返回的响应中通过payload.google.systemIntent指定目标意图:

  1. 在systemIntent.intent字段填入要触发的系统意图全名(比如actions.intent.TRANSACTION_DECISION、actions.intent.PERMISSION等)
  2. 根据该系统意图的要求,在systemIntent.data中填入对应结构的参数,必须包含@type字段指向Google定义的类型(每个系统意图的data结构都不同,要严格对照官方文档)
  3. 确保expectUserResponse设为True,让Assistant接管后续交互

举个触发权限请求系统意图的例子:

response = {
    "payload": {
        "google": {
            "expectUserResponse": True,
            "systemIntent": {
                "intent": "actions.intent.PERMISSION",
                "data": {
                    "@type": "type.googleapis.com/google.actions.v2.PermissionValueSpec",
                    "optContext": "为了帮你完成订单,需要获取你的地址信息",
                    "permissions": ["NAME", "DEVICE_PRECISE_LOCATION"]
                }
            }
        }
    }
}

额外注意事项

  • 确保你的Google Cloud项目已经启用了Transactions API,并且在Google Assistant控制台配置了正确的支付设置
  • 检查ngrok的隧道是否正常运行,Dialogflow中配置的Webhook URL必须是ngrok提供的HTTPS地址(HTTP会被拒绝)
  • 测试交易功能时,要用符合要求的测试账号(比如已绑定支付方式的Google账号,且处于项目的测试白名单中)

内容的提问来源于stack exchange,提问作者Outcast

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:05:27