dialogflow v2完全填充中提取参数

时间:2019-06-19 06:36:23

标签: dialogflow

我在Facebook Messenger上使用我的dialogflow并传递了一个参数。我能够提取它,但不确定为什么它不是字符串。

代码如下所示

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失败

2 个答案:

答案 0 :(得分:3)

toString()不会失败(因此可能是不必要的,因为它可能已经是字符串)。

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

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

答案 1 :(得分:2)

我建议您在实现时提取类似这样的参数:

 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
}

希望这会有所帮助!