我创建了一个关于Amazon技能的Intent SampleIntent,它提示用户输入城市名称。输入后,我必须保存该城市名称,然后它将再次提示/询问用户“您是否要继续?”如果用户输入是,它将再次提示输入城市名称,如果用户输入否,则退出。
为此,我在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。
谢谢。
答案 0 :(得分:0)
这是您的 Alexa和Lambda函数的工作方式。
speechOutput
等,并将其发送回Alexa。您的技能正在发生的事情是,当您要求提供插槽信息cityName
时,它可以很好地工作并要求提供插槽信息,并且可能也能为您提供正确的信息。但是现在发生的是,在您的情况下,用户提供了诸如“ YES” 或“ NO” 之类的语音,并且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);
}