如何在Dialogflow的实现中使用意图参数?

时间:2018-08-04 17:31:00

标签: javascript actions-on-google dialogflow

我是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);

3 个答案:

答案 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}.`)
})