问题实际上在于,对于这两个意图,您有没有上下文的插槽。我还假设您将这些插槽用作包罗万象的插槽,这意味着您想要捕获该人所说的所有内容。
从经验来看:这很难/令人讨厌,并且不会带来良好的用户体验。
对于HaveMoreNotesIntent
您想要做的是有一个单独的YesIntent
,NoIntent
然后根据意图历史记录(又名context)将用户路由到正确的功能/意图。您只需在配置文件中启用此功能。
YesIntent() {
console.log(this.$user.$context.prev[0].request.intent);
// Check if last intent was either of the following
if (
['TutorialState.TutorialStartIntent', 'TutorialLearnIntent'].includes(
this.$user.$context.prev[0].request.intent
)
) {
return this.toStateIntent('TutorialState', 'TutorialTrainIntent');
} else {
return this.toStateIntent('TutorialState', 'TutorialLearnIntent');
}
}
或者,如果您在某个州内,您可以在该州内有“是”和“否”意图,这些意图只能在该州工作。
ISPBuyState: {
async _buySpecificPack() {
console.log('_buySpecificPack');
this.$speech.addText(
'Right now I have a "sports expansion pack". Would you like to hear more about it?'
);
return this.ask(this.$speech);
},
async YesIntent() {
console.log('ISPBuyState.YesIntent');
this.$session.$data.productReferenceName = 'sports';
return this.toStatelessIntent('buy_intent');
},
async NoIntent() {
console.log('ISPBuyState.NoIntent');
return this.toStatelessIntent('LAUNCH');
},
async CancelIntent() {
console.log('ISPBuyState.CancelIntent()');
return this.toStatelessIntent('LAUNCH');
}
}
我希望这有帮助!