Alexa技能具有用户确认槽值

时间:2017-08-28 16:02:35

标签: node.js aws-lambda alexa alexa-skills-kit alexa-skill

我在lambda函数中使用Node.js构建Alexa技能,并且无法找到最佳方法来确认插槽中的数据。我得到了所有插槽现在都有数据但希望Alexa回读请求并在继续之前得到用户确认的要点。什么是最好的&这样做的正确方法?

起初我曾想过使用带有:elicitSlot的emit但是我需要一个新的插槽才能做到这一点,它看起来非常h​​ackish。

例如:

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 个答案:

答案 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的一个严格限制。这应该在下一次迭代中得到改善。