首页 文章

如何从我的webhook触发`action.intent.INTENT_NAME`意图?

提问于
浏览
3

我想用Dialogflow和Google智能助理以及Google Transactions API创建一个聊天机器人,以便用户订购巧克力盒 . 现在我的代理包含以下四个意图:

  • Default Welcome Intent (文字回复:你好,你想买一个巧克力盒吗?)

  • Default Fallback Intent

  • Int1 (训练短语:是的,我想要,履行:启用webhook通话)

  • Int2 (事件:actions_intent_TRANSACTION_REQUIREMENTS_CHECK)

我使用Dialogflow Json而不是Node.js将我的代理与Transactions API连接起来 . 我想通过使用Google操作的 actions.intent.TRANSACTION_REQUIREMENTS_CHECK 操作来测试用户是否满足交易要求(在订购巧克力盒时) . 出于这个原因,在Google文档之后,当触发 Int1 时,我正在使用将Google智能助理连接到以下python脚本(后端)的webhook:

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
import  requests

app = Flask(__name__)
CORS(app)

@app.route("/",  methods=['POST'])

def index():

    data = request.get_json()    
    intent = data["queryResult"]["intent"]["displayName"]

    if (intent == 'Int1'):

        return jsonify({ "data": {
                "google": {
                "expectUserResponse": True,
                "isSsml": False,
                "noInputPrompts": [],
                "systemIntent": {
                  "data": {
                    "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckSpec",
                    "paymentOptions": {
                      "actionProvidedOptions": {
                        "displayName": "VISA-1234",
                        "paymentType": "PAYMENT_CARD"
                      }
                    }
                  },
                  "intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK"
                                }
                        }
                                        }
                })
    else:
        return jsonify({'message': 'HERE'})

if __name__== "__main__":
    app.run(debug=True)

intent = 'Int1' 在Google文档中为"Checking requirements with your own payment method"指定时,我在上面返回的json . 根据Google文档,这必须在下一步完成:

接收需求检查的结果在Assistant完成意图后,它会向您的履行发送一个请求,其中包含actions.intent.TRANSACTION_REQUIREMENTS_CHECK意图以及检查结果 . 要正确处理此请求,请声明由actions_intent_TRANSACTION_REQUIREMENTS_CHECK事件触发的Dialogflow意图 .

出于这个原因,我定义 Int2 并将其作为 actions_intent_TRANSACTION_REQUIREMENTS_CHECK 事件 .

However, I do not receive anything at my back-end like a result of the check and therefore I do not know if the action actions.intent.TRANSACTION_REQUIREMENTS_CHECK is really triggered. Why is this happening?

In general, how can I trigger one actions.intent.INTENT_NAME intent from my webhook/back-end?

当我使用Dialogflow的v2版本时,我在触发 Int1 时收到有关Dialogflow上的webhook的以下信息/消息:

"webhookStatus": {
    "code": 3,
    "message": "Webhook call failed. Error: Failed to parse webhook JSON response: Cannot find field: data in message google.cloud.dialogflow.v2.WebhookResponse."
  }

在相同的情况下,当触发 Int1 时,我收到有关Google Assistant模拟器上的webhook的以下信息/消息:

"responseMetadata": {
    "status": {
      "code": 14,
      "message": "Webhook error (206)"
    }

最后,让我提一下,我正在本地计算机上用 Pythonngrok 测试所有这些,所以这可能会产生问题,因为在Google文档的开头提到了以下内容:

警告:不应使用Actions Web Simulator来测试具有事务的应用程序 . 请使用启用助理的Android或iOS设备在开发过程中准确测试您的应用 .

2 回答

  • 2

    我终于解决了这个问题 .

    当我用 Int1 键触发 Int1 时,我不得不替换json中的密钥 "data" . 换句话说,我必须调整对 Dialogflowv2 version 的履行回复 .

    因此,现在我在后端发出第二个帖子请求,因为 actions.intent.TRANSACTION_REQUIREMENTS_CHECKInt2 的触发器而发送 .

    具体来说,我得到以下内容:

    {
        "responseId": "*****************************",
        "queryResult": {
            "queryText": "actions_intent_TRANSACTION_REQUIREMENTS_CHECK",
            "parameters": {},
            "allRequiredParamsPresent": true,
            "fulfillmentText": "HERE",
            "fulfillmentMessages": [
                {
                    "text": {
                        "text": [
                            "HERE"
                        ]
                    }
                }
            ],
            "outputContexts": [
                {
                    "name": "*****************************"
                },
                {
                    "name": "*****************************"
                },
                {
                    "name": "*****************************"
                },
                {
                    "name": "*****************************"
                },
                {
                    "name": "*****************************"
                },
                {
                    "name": "*****************************",
                    "parameters": {
                        "TRANSACTION_REQUIREMENTS_CHECK_RESULT": {
                            "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckResult",
                            "resultType": "OK"
                        }
                    }
                }
            ],
            "intent": {
                "name": "*****************************",
                "displayName": "Int2"
            },
            "intentDetectionConfidence": 1,
            "diagnosticInfo": {},
            "languageCode": "en-us"
        },
        "originalDetectIntentRequest": {
            "source": "google",
            "version": "2",
            "payload": {
                "isInSandbox": true,
                "surface": {
                    "capabilities": [
                        {
                            "name": "actions.capability.WEB_BROWSER"
                        },
                        {
                            "name": "actions.capability.MEDIA_RESPONSE_AUDIO"
                        },
                        {
                            "name": "actions.capability.SCREEN_OUTPUT"
                        },
                        {
                            "name": "actions.capability.AUDIO_OUTPUT"
                        }
                    ]
                },
                "inputs": [
                    {
                        "rawInputs": [
                            {
                                "inputType": "KEYBOARD"
                            }
                        ],
                        "arguments": [
                            {
                                "extension": {
                                    "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckResult",
                                    "resultType": "OK"
                                },
                                "name": "TRANSACTION_REQUIREMENTS_CHECK_RESULT"
                            }
                        ],
                        "intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK"
                    }
                ],
                "user": {
                    "lastSeen": "2018-05-16T11:15:14Z",
                    "locale": "en-US",
                    "userId": "*****************************"
                },
                "conversation": {
                    "conversationId": "1526470000479",
                    "type": "ACTIVE",
                    "conversationToken": "[]"
                },
                "availableSurfaces": [
                    {
                        "capabilities": [
                            {
                                "name": "actions.capability.SCREEN_OUTPUT"
                            },
                            {
                                "name": "actions.capability.AUDIO_OUTPUT"
                            }
                        ]
                    }
                ]
            }
        },
        "session": "*****************************"
    }
    
  • -1

    我认为您的回复对象不正确 . intent 属性应该在 systemIntent 对象中

    "data": {
      "google": {
        "expectUserResponse": true,
        "isSsml": false,
        "noInputPrompts": [],
        "systemIntent": {
          "intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK",
          "data": {
            "@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckSpec",
            "paymentOptions": {
              "actionProvidedOptions": {
                "displayName": "VISA-1234",
                "paymentType": "PAYMENT_CARD"
              }
            }
          }
        }
      }
    }
    

相关问题