繁体   English   中英

在Alexa Skill中使用sessionAttributes

[英]Using sessionAttributes in Alexa Skill

我正在构建Alexa技能,并且不确定我是否正确使用了sessionAtrributes 我知道sessionAttributes用于将会话的数据转发给下一次调用。 所以我有这两个意图

1) ListToDoItem

  • 为此,我的技能将调查数据库,并列出存储在数据库中的待办事项。 列出项目后,Alexa会继续说“您要我列出这些待办事项的详细信息吗?”,为此,我将在上一会话中检索到的项目作为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM