我正在使用lambda函数中的Node.js构建Alexa技能,并且找不到任何关于确认插槽中数据的最佳方法的教程 . 我得到了所有插槽现在都有数据但希望Alexa回读请求并在继续之前得到用户确认的要点 . 什么是最好和正确的方法来做到这一点?
起初我以为使用了一个:elicitSlot,然后我需要一个新的插槽来做这个,它看起来非常hackish .
例如:
if(all slots have a valid value){
this.emit(':elicitSlot','confirm',"You're request is .... with data .... is this correct?");
}
if(user confirmed data is valid){
// do something
}else{
// the data was not correct get the right data
}
1 回答
对于整个意图确认,请检查here . 仅限插槽确认,请检查here .
另外,对于你的后续问题,
简短的回答 - 当然,如果你不维护对话框,你可以 . 但是,强烈建议不要依赖它 .
为了维护对话框,您必须监视意图请求的
dialogState
属性,并且只要它不处于状态COMPLETED
发送具有属性directives
的响应为[{'type': 'Dialog.Delegate'}]
以保持其流动 . 您可以更好地控制对话框 - 请参阅this doc . 此外,强烈建议您在这些回复中省略outputSpeech
和reprompt
,否则Alexa会感到不安 . 一旦对话框状态为COMPLETED
,您将获得confirmationStatus
(对于Intent和插槽) - SUCCESS(?)/ DENIED / NONE . 如果确认不成功 . 我已经看到多个匹配作为回复发送 . 但是,成功时,仅返回匹配的槽值 .附:我有这个奇怪的问题 . 当Alexa要求确认一个槽值时,如果我故意连续两次下降,它会放弃并且什么都不做!虽然,Alexa几乎99%的时间都是现货 .
P.P.S.事实证明,2次尝试是Alexa的一个严格限制 . 这应该在下一次迭代中得到改进 .