Alexa会话保持打开状态,无需任何用户输入
我有一个Alexa技能,用户提出问题并发出适当的响应。例:
用户:首都哈里斯堡有哪些州? Alexa:宾夕法尼亚州
我正在使用一个问题意图来实现这一点(会话保持活跃状态),但在提交我的技能时收到了一个回复,即会话保持打开而没有任何用户输入。
我不希望会议结束。我希望用户能够不断提问。处理这个问题的最佳方法是什么?
我想通过在每个答案的末尾添加一个问题来实现这一点。例:
用户:首都哈里斯堡有哪些州? Alexa:宾夕法尼亚州。还有什么别的可以帮你?
上面的问题是我不知道如何处理是/否回复。
任何帮助,将不胜感激。
回答如下:您建议的修复是合理的,并且Alexa技能中的常见模式--Alexa支持内置意图AMAZON.YesIntent
和AMAZON.NoIntent
已经配置为侦听一组相关的话语,如“是”,“否”等。对于是意图,你可能想再次问:ask
这样的问题,比如“你想问什么问题?”,并且没有意图你可能想要:tell
用户再见,而这种用法告诉将结束会话。
国家管理
也就是说,你不希望Alexa总是以这种方式回答'是' - 如果你的技能有其他互动,你对这个问题的'是'的回答没有意义怎么办?
要解决此问题,请查看alexa-sdk中的skill state management。从文档:
Alexa-sdk使用状态管理器将传入的意图路由到正确的函数处理程序。状态在会话属性中存储为字符串,指示技能的当前状态。您可以通过在定义意图处理程序时将状态字符串附加到意图名称来模拟内置意图路由,但alexa-sdk可以帮助您完成此操作。
因此,当您的alexa技能回答问题时,您的部分响应逻辑可能会设置如下状态:
this.handler.state = 'AskAnotherQuestion';
对于像AskAnotherQuestion
这样的状态字符串,您可以使用:
1. Literal Intents
在名为AMAZON.YesIntentAskAnotherQuestion
的意图处理程序中添加一个条目,以处理YesIntent的yes响应,并附加状态。
例:
'AMAZON.YesIntentAskAnotherQuestion': function() {
this.emit(':ask', 'What would you like to ask?', 'Could you repeat that?');
},
2. Alexa-SDK State Handler
使用alexa-sdk CreateStateHandler(state, obj)
创建一个将传递状态附加到所有条目的intent处理程序。
例:
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文档。
Cavaets
如果不在YesIntent中设置其他状态,此技能将停留在“AskAnotherQuestion”状态。对于您的问题中定义的范围,这可能没问题,但请记住,您可能希望切换到其他状态,因为您的技能变得更加复杂。
将状态重置为空或空是当前的麻烦,需要设置多个字段。关于这个和提出的解决方法的讨论可以在这个github issue中找到。
进一步阅读
- Alexa Skills Kit Documentation - Standard Built-in Intents
Alexa会话保持打开状态,无需任何用户输入
我有一个Alexa技能,用户提出问题并发出适当的响应。例:
用户:首都哈里斯堡有哪些州? Alexa:宾夕法尼亚州
我正在使用一个问题意图来实现这一点(会话保持活跃状态),但在提交我的技能时收到了一个回复,即会话保持打开而没有任何用户输入。
我不希望会议结束。我希望用户能够不断提问。处理这个问题的最佳方法是什么?
我想通过在每个答案的末尾添加一个问题来实现这一点。例:
用户:首都哈里斯堡有哪些州? Alexa:宾夕法尼亚州。还有什么别的可以帮你?
上面的问题是我不知道如何处理是/否回复。
任何帮助,将不胜感激。
回答如下:您建议的修复是合理的,并且Alexa技能中的常见模式--Alexa支持内置意图AMAZON.YesIntent
和AMAZON.NoIntent
已经配置为侦听一组相关的话语,如“是”,“否”等。对于是意图,你可能想再次问:ask
这样的问题,比如“你想问什么问题?”,并且没有意图你可能想要:tell
用户再见,而这种用法告诉将结束会话。
国家管理
也就是说,你不希望Alexa总是以这种方式回答'是' - 如果你的技能有其他互动,你对这个问题的'是'的回答没有意义怎么办?
要解决此问题,请查看alexa-sdk中的skill state management。从文档:
Alexa-sdk使用状态管理器将传入的意图路由到正确的函数处理程序。状态在会话属性中存储为字符串,指示技能的当前状态。您可以通过在定义意图处理程序时将状态字符串附加到意图名称来模拟内置意图路由,但alexa-sdk可以帮助您完成此操作。
因此,当您的alexa技能回答问题时,您的部分响应逻辑可能会设置如下状态:
this.handler.state = 'AskAnotherQuestion';
对于像AskAnotherQuestion
这样的状态字符串,您可以使用:
1. Literal Intents
在名为AMAZON.YesIntentAskAnotherQuestion
的意图处理程序中添加一个条目,以处理YesIntent的yes响应,并附加状态。
例:
'AMAZON.YesIntentAskAnotherQuestion': function() {
this.emit(':ask', 'What would you like to ask?', 'Could you repeat that?');
},
2. Alexa-SDK State Handler
使用alexa-sdk CreateStateHandler(state, obj)
创建一个将传递状态附加到所有条目的intent处理程序。
例:
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文档。
Cavaets
如果不在YesIntent中设置其他状态,此技能将停留在“AskAnotherQuestion”状态。对于您的问题中定义的范围,这可能没问题,但请记住,您可能希望切换到其他状态,因为您的技能变得更加复杂。
将状态重置为空或空是当前的麻烦,需要设置多个字段。关于这个和提出的解决方法的讨论可以在这个github issue中找到。
进一步阅读
- Alexa Skills Kit Documentation - Standard Built-in Intents