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

How do you use intent parameters in your fulfillment in 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);

意图参数是可以在您的函数中的第二个参数:

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

尼克的回答很到位,但我想补充一点。

如果您在 Dialogflow 中的参数名称是 UNIT_LENGTH_RADIUS,那么您可以在代码中访问它:

const radius = conv.parameters['UNIT_LENGTH_RADIUS'];

使用方括号代替圆括号。

Dialogflow 中的实现内联编辑器在使用 API v2.

时对我上面的代码有问题

我不得不将意图放在单引号中:

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