我有一个Alexa技能,用户会询问问题并发出相应的响应。例如:
用户:首都哈里斯堡有哪些州? Alexa:宾夕法尼亚州
我正在使用一个问题意图实现此目标(会话保持活动状态),但在提交我的技能时收到了回复,即会话保持打开而没有任何用户输入。
我不希望会话结束。我希望用户能够不断提问。处理这个问题的最佳方法是什么?
我想通过在每个答案的末尾添加一个问题来实现这一点。例如:
用户:首都哈里斯堡有哪些州? Alexa:宾夕法尼亚州。我能帮你什么吗?
上述问题是我不知道如何处理是/否回复。
任何帮助都将不胜感激。
答案 0 :(得分:2)
您建议的修复是合理的,并且Alexa技能中的常见模式--Alexa支持已配置为侦听一组相关话语的内置意图AMAZON.YesIntent
和AMAZON.NoIntent
,例如&# 34;是","否"等。对于是的意图,你可能想再次:ask
提出类似&#34的问题;你想问什么问题? ",并且对于没有意图,您可能希望:tell
用户再见,并且这种使用tell将结束会话。
那就是说,你不希望Alexa总是回应“是”'通过这种方式 - 如果您的技能有其他互动,您对“是”的反应会怎样?对于这个问题没有意义吗?
要解决此问题,请查看alexa-sdk中的skill state management。来自文档:
Alexa-sdk使用状态管理器将传入的意图路由到正确的函数处理程序。状态在会话属性中存储为字符串,指示技能的当前状态。您可以通过在定义意图处理程序时将状态字符串附加到意图名称来模拟内置意图路由,但alexa-sdk可以帮助您完成此操作。
因此,当你的alexa技能回答问题时,你的部分回应逻辑可以设置如下状态:
this.handler.state = 'AskAnotherQuestion';
对于像AskAnotherQuestion
这样的状态字符串,您可以使用:
在名为AMAZON.YesIntentAskAnotherQuestion
的意图处理程序中添加一个条目,以处理YesIntent的yes响应,其中包含字面附加的状态。
示例:
'AMAZON.YesIntentAskAnotherQuestion': function() {
this.emit(':ask', 'What would you like to ask?', 'Could you repeat that?');
},
使用alexa-sdk CreateStateHandler(state, obj)
创建一个意图处理程序,将传递的状态追加到所有条目。
示例:
const askQuestionHandlers = Alexa.CreateStateHandler('AskAnotherQuestion', {
'AMAZON.YesIntent': function() {
this.emit(':ask', 'What would you like to ask?', 'Could you repeat that?');
},
'AMAZON.NoIntent': function() {
this.emit(':tell', 'See you later!');
}
// NOTE: Add another intent here that routes to your question answering logic,
// so that the user can just immediately ask their question again without
// saying yes or no.
}
有关CreateStateHandler的代码完整示例实现,请参阅skill state management文档。
如果没有在YesIntent中设置其他状态,此技能将停留在“AskAnotherQuestion”中。州。对于您的问题中定义的范围,这可能没问题,但请记住,当您的技能变得更加复杂时,您可能希望切换到其他状态。
将状态重置为null或为空当前很麻烦,需要设置多个字段。有关此问题和建议的解决方法的讨论可以在github issue中找到。
答案 1 :(得分:0)
这个帖子How to keep an alexa skill open?似乎是在同一主题上,它也符合我的经验。在Alexa关闭你的技能之前你可以保持会话开放的最长持续时间是10到20秒。