我在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失败
答案 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
}
希望这会有所帮助!