我是Dialogflow的新手,对Javascript的了解不是过多,如果问题听起来很简单,请对不起!我一直在尝试构建一个计算器,以使用用户指定的半径来查找圆的面积,但是,我一直在努力使用将半径保留在实现中的参数用于计算。每当我查看履行响应时,都会看到以下错误:
{
"error": "conv.parameters is not a function"
}
我真的很感谢我建议对代码进行的任何更改,这些更改可以帮助我完成此工作。谢谢!
我的履行代码:
const functions = require('firebase-functions');
const {dialogflow} = require('actions-on-google');
const WELCOME_INTENT = 'Default Welcome Intent';
const FALLBACK_INTENT = 'Default Fallback Intent';
const CIRCLE_AREA_RADIUS_INTENT = 'CircleAreaRadius';
const UNIT_LENGTH_RADIUS = 'unit-length';
const app = dialogflow();
app.intent(WELCOME_INTENT, (conv) => {
conv.ask("Welcome to Circle Calculator! What can I help you with?");
});
app.intent(FALLBACK_INTENT, (conv) => {
conv.ask("Sorry, I didn't understand. What would you like me to do?");
});
app.intent(CIRCLE_AREA_RADIUS_INTENT, (conv) => {
const radius = conv.parameters(UNIT_LENGTH_RADIUS);
var area = Math.pow(radius, 2) * Math.PI;
conv.ask(`The area of the circle is ${area}.`);
});
exports.dialogflowFirebaseFulfillment = functions.https.onRequest(app);
答案 0 :(得分:1)
intent参数是可以在您的函数中使用的第二个参数:
app.intent(CIRCLE_AREA_RADIUS_INTENT, (conv, {unit-length} ) => {
const radius = params[UNIT_LENGTH_RADIUS]
const area = Math.pow(radius, 2) * Math.PI
conv.ask(`The area of the circle is ${area}.`)
})
您还可以通过对象销毁来简化此过程。如果您在Dialogflow中将参数重命名为 radius :
app.intent(CIRCLE_AREA_RADIUS_INTENT, (conv, {radius}) => {
const area = Math.pow(radius, 2) * Math.PI
conv.ask(`The area of the circle is ${area}.`)
})
答案 1 :(得分:1)
尼克的回答很明确,但是我想再加一点。
如果您在Dialogflow中的参数名称为UNIT_LENGTH_RADIUS,则可以使用以下代码在代码中对其进行访问:
const radius = conv.parameters['UNIT_LENGTH_RADIUS'];
使用方括号代替括号。
答案 2 :(得分:0)
使用API v2,Dialogflow中的实现内联编辑器对我上面的代码有问题。
我必须将意图用单引号引起来
app.intent('CIRCLE_AREA_RADIUS_INTENT', (conv, {radius}) => {
const area = Math.pow(radius, 2) * Math.PI
conv.ask(`The area of the circle is ${area}.`)
})