我在lambda函数中使用Node.js构建Alexa技能,并且无法找到最佳方法来确认插槽中的数据。我得到了所有插槽现在都有数据但希望Alexa回读请求并在继续之前得到用户确认的要点。什么是最好的&这样做的正确方法?
起初我曾想过使用带有:elicitSlot的emit但是我需要一个新的插槽才能做到这一点,它看起来非常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
}
答案 0 :(得分:3)
对于整个意图确认,请检查here。仅限插槽确认,请检查here。
另外,对于你的后续问题,
可以对技能和插槽的确认进行微调,例如,如果其中一个插槽类似于名称而且alexa知道100%我说的名称可以跳过确认吗?
简短回答 - 当然,如果您不维护对话框,则可以。但是,我们强烈建议不要依赖它。
为了维护对话框,您必须监控意图请求的dialogState
属性,并且只要它不在状态COMPLETED
中,就会发送带有属性{{1}的响应} directives
以保持流畅。您可以更好地控制对话框 - 请咨询this doc。此外,强烈建议您在这些回复中省略[{'type': 'Dialog.Delegate'}]
和outputSpeech
,否则Alexa会感到不安。一旦对话状态为reprompt
,就会获得COMPLETED
(对于Intent和slot) - SUCCESS(?)/ DENIED / NONE。如果确认不成功。我已经看到多个匹配作为回复发送。但是,成功时,仅返回匹配的槽值。
P.S。我有这个奇怪的问题。当Alexa要求确认一个槽值时,如果我故意连续两次下降,它会放弃并且什么都不做!虽然,Alexa几乎99%的时间都在现场。
P.P.S。事实证明,2次尝试是Alexa的一个严格限制。这应该在下一次迭代中得到改善。