[英]Using sessionAttributes in Alexa Skill
我正在构建Alexa技能,并且不确定我是否正确使用了sessionAtrributes
。 我知道sessionAttributes
用于将会话的数据转发给下一次调用。 所以我有这两个意图
1) ListToDoItem
sessionAttributes
。 当要求列出有关这些项目的详细信息时,我将提取先前转发的sessionAtrributes
并撰写详细的语音回复。 将使用发声“是”, sessionAttributes
可以提取sessionAttributes
以创建详细的语音响应。
2) ListDoneItems
此意图将用于列出完成的项目。 它与先前的意图类似,唯一的不同是,该意图将列出已完成的项目。
为此,将有2个示例话语
像以前一样,它具有“是”以基于sessionAttributes生成详细的语音响应。
但是我的问题是,当我对ListDoneItems
意图的“是否要我列出已完成的项目”回答“是”时,生成的下一个意图请求的类型为ListToDoItems
而不是ListDoneItems
,即使我将shouldEndSession
设置为我的技能回应中有false
。 之所以发生这种情况,是因为我的意图之间的样本话语之间存在交叉。 那么在不同的意图中拥有相似的意图是错误的吗? 如何设计交互模型以创建多匝对话框以便在sessionAttributes
使用?
我认为这对寻找答案的人很有用。
基本上,在样本话语中,您不应该包括用于重新提示的短语; 也就是说,就我而言,我不应该在话语中加上“是”。 相反,我应该使用Amazon.YesIntent
。
使用Amazon.YesIntent
,您应在SessionAttributes
维护一个状态机,该状态机指向最后调用的意图。 例如,如果您的两个或两个以上YesIntent
可能存在用户响应可以调用YesIntent
,则应将最后调用的Intent名称和关联的会话数据存储在SessionAttributes
。 因此,在处理YesIntent
的函数中,您应该检查以前的调用状态并委托控制到相应的intent处理程序。
就我而言,我将先前调用的意图名称存储为键,并将其关联数据存储为session.attributes
的值。
"session": {
"new":"false",
"sessionId": "sessionId",
"application": {
"applicationId": "applicationId"
},
"attributes": {
"PreviousIntent": {
"PreviousIntentData"
}
}
在处理YesIntent
的函数中,检查的先前状态( session.attributes.PreviousIntent
),然后将控件委托给处理该意图的函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.