dialogflow v2 在实现中提取参数

dialogflow v2 extracting parameters in fullfillment

我在 facebook messenger 上使用我的对话流并传递一个参数。我能够提取它但不确定为什么它不是字符串。

代码如下所示

function botHandler(agent) {
    console.log("inside bot handler request body is:" + 
     JSON.stringify(request.body.queryResult.parameters));
    const adParams = request.body.queryResult.parameters;
    let state = adParams.stateName;

    state = state.toString().toUperCase()

它抛出的错误是

TypeError: state.toString(...).toUperCase is not a function
    at botHandler (/srv/index.js:52:30)
    at WebhookClient.handleRequest (/srv/node_modules/dialogflow-fulfillment/src/dialogflow-fulfillment.js:303:44)
    at exports.dialogflowFirebaseFulfillment.functions.https.onRequest (/srv/index.js:114:9)
    at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /worker/worker.js:783:7
    at /worker/worker.js:766:11
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickDomainCallback (internal/process/next_tick.js:219:9)

值存在但不确定为什么 toString 失败

我建议在您的实现中提取这样的参数:

 function botHandler(agent) {
        let state = agent.parameters["stateName"];
        let uState = state.toUpperCase();
        let answer = "So you live in " + uState + "?";

        agent.add(answer);
    }

您可以通过这种方式检查参数是否存在:

if (agent.parameters["stateName"]) {
    //do stuff here
}

希望对您有所帮助!

toString() 没有失败(虽然它可能是不必要的,因为它可能已经是一个字符串)。

您的方法 toUpercase() 失败,因为您在 "uppercase" 中有错字。它应该有两个 "p",而不是一个。 toUppercase().

就是说,正如 Mathais 指出的那样,您应该确保首先拥有 stateName 参数。