0

我在亚马逊技能上创建了一个意图 SampleIntent,提示用户输入城市名称。输入后,我必须保存该城市名称,然后它会再次提示/询问用户“你想继续吗?” 如果用户输入yes,它将再次提示输入城市名称,如果用户输入no,则退出。

为此,我在 Sample Intent 中创建了两个插槽。我的话语是 {slotA} 和 {slotB}。当我访问 SampleIntent 时,它会提示输入 ener City 名称,但在控制台上我变得未定义。它也永远不会提示是否继续。

下面是我的示例模型:

{
            "name": "SampleIntent",
            "slots": [
                {
                    "name": "cityName",
                    "type": "cityName"
                },
                {
                    "name": "confirmForMore",
                    "type": "confirmForMore"
                }
            ],
            "samples": [
                "{fName} ",
                "{confirmForMore}",
                "CityName"
            ]
        }

node.js 中的代码如下

this.emit(':ask', 'Please provide City Name');
cityName = intent.slots.cityName.value;
console.log('cityName :' + cityName );

this.emit(':ask', 'Do u like details for other City?');
confirmForMore = intent.slots.confirmForMore.value;
console.log("confirmForMore : "+confirmForMore);

第 4 到 6 行从不执行,并且每次都要求输入城市名称。如果我输入城市名称,我将无法在控制台中看到 cityName。

提前致谢。

4

1 回答 1

0

看看这就是您的Alexa 和 Lambda 函数的工作方式

  1. 首先,您为您的 lambda 函数提供一些话语:“您住在哪个城市?”
  2. 然后 Alexa根据您在上一步中提供的输入和调用的意图为您的 lambda 函数创建一个JSON 输入,并将其发送到 lambda 函数。
  3. Lambda 函数返回一些适用于 Alexa 的JSON 输出speechOutput,其中包含等变量,并将其发送回 Alexa。
  4. 现在 Alexa 说出 lambda 函数返回的输出。

您的技能发生的事情是,当您询问插槽信息cityName时,它可以正常工作并询问插槽信息,并且可能也会为您提供正确的信息。但是现在发生的情况是用户在您的情况下提供了一些诸如“是”“否”之类的话语,并且您的 lambda 函数从顶部执行。这导致再次执行此块。

this.emit(':ask', 'Please provide City Name');
cityName = intent.slots.cityName.value;
console.log('cityName :' + cityName );

为了避免这样的事情,你可以做的是这样的:

if (cityName in intent.slots && intent.slots.cityName.value <= 0){
    this.emit(':ask', 'Please provide City Name');
    cityName = intent.slots.cityName.value;
    console.log('cityName :' + cityName );
}
else {
    this.emit(':ask', 'Do u like details for other City?');
    confirmForMore = intent.slots.confirmForMore.value;
    console.log("confirmForMore : "+confirmForMore);
}
于 2018-07-11T03:38:25.067 回答