2017-08-28 60 views
0

我在lambda函数中使用Node.js构建Alexa技能,并且找不到任何有关确认插槽中数据的最佳方式的教程。我知道所有插槽现在都有数据,但希望Alexa能够读回请求并在继续之前从用户那里得到确认。什么是最好的&正确的方法来做到这一点?Alexa技能有用户确认插槽值

起初我以为使用elicitSlot发射,但然后我需要一个新的插槽来做到这一点,它看起来非常黑客。

例如:

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

对于whoie意向确认,请选中[此处](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/ask-define-the-vui-with-gui#意向确认)。只有确认插槽时,请选中[此处](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/ask-define-the-vui-with-gui#enable-slot-确认) – Sidmeister

+0

谢谢Sidmeister,你可以把你的评论变成答案,我可以批准它。例如,如果其中一个插槽类似于名称,alexa知道100%我称之为可以跳过确认的名称,那么技能和插槽的确认也可以进行微调。还是100%的时间确认一次?我想要确认一个灰色区域。 –

回答

2

对于整个意向确认,检查here。如需确认时间段,请查询here

此外,为您的后续问题,

可以确认的技能和插槽进行微调,例如,如果一个插槽是像一个名字和ALEXA知道100%,我说的是什么名字可以它跳过确认?

简短的回答 - 当然你可以,如果你不保持对话。但是,依靠这一点强烈不鼓励。

为了保持一个对话框,你必须监控的意图请求dialogState属性,只要它不与属性directives[{'type': 'Dialog.Delegate'}]状态COMPLETED发送响应,以保持它的流动。您可以更好地控制对话框 - 请参阅this doc。此外,强烈建议您在这些回复中省略outputSpeechreprompt,否则Alexa会感到不安。一旦对话状态为COMPLETED,您将获得confirmationStatus(对于意图和插槽) - 成功(?)/拒绝/无。如果确认不成功。我看到多个匹配作为回复发送。但是,如果成功,则只返回匹配的插槽值。

P.S.我有这个奇怪的问题。当Alexa要求确认一个插槽值时,如果我故意连续两次拒绝,它会放弃并且什么也不做!虽然几乎99%的时间都是Alexa发布的。

P.P.S. 2次尝试是来自Alexa的严格限制。这应该在下一次迭代中得到改进。