在Alexa Skill中使用sessionAttributes

时间:2018-06-04 02:44:40

标签: alexa alexa-skill

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

1)ListToDoItem

  • 在这个意图中,我的技能将调查数据库并列出 存储在数据库中的待办事项。列出项目后,Alexa 将继续说“你想让我列出这些的详细信息 待办事项?“,为了处理这个问题,我将传递检索到的项目 上一个会话为sessionAttributes。当被要求列出详细信息时 关于项目的信息,我将提取以前转发的 sessionAtrributes并撰写详细的语音回复。
  • 所以为了这个意图,我必须对话语进行抽样
    • 列出我的待办事项

将使用话语“是”,以便可以提取sessionAttributes以创建详细的语音响应。

2)ListDoneItems

此意图将用于列出已完成的项目。它类似于之前的意图,唯一的区别是,此意图将列出已完成的项目。

对于这个意图将有2个样本话语

  • 列出我已完成的项目

就像之前它有一个'是'来生成基于sessionAttributes的详细语音响应。

但我遇到的问题是,当我回复'{1}}意图'是'你要我列出已完成的项吗?'时,生成的下一个意图请求是ListDoneItems类型而不是ListToDoItems,即使我已在我的技能响应中将ListDoneItems设置为shouldEndSession。发生这种情况是因为我的意图之间的样本话语之间存在交叉。那么有不同意图的类似意图错了吗?如何设计交互模型以创建多转对话以便在false中使用?

1 个答案:

答案 0 :(得分:1)

我认为这对寻找答案的人有用。

基本上在样本话语中,您不应该包含重新提示的短语;即在我的情况下,我不应该添加'是'作为一种话语。相反,我应该使用Amazon.YesIntent

使用Amazon.YesIntent时,应在SessionAttributes中维护一个指向上次调用意图的状态机。例如,如果您的两个或多个意图具有用户响应可以调用YesIntent的可能情况,则应将最后调用的意图名称和关联的会话数据存储在SessionAttributes中。因此,在处理YesIntent的函数中,您应该检查先前调用的状态,并委托控制到相应的intent处理程序。

在我的情况下,我将先前调用的意图名称作为关键字及其关联数据存储为session.attributes中的值;

   "session": {
        "new":"false",
        "sessionId": "sessionId",
        "application": {
          "applicationId": "applicationId"
        },
        "attributes": {
          "PreviousIntent": {
             "PreviousIntentData"
        }
    }

在处理YesIntent的函数中,检查前一个状态(session.attributes.PreviousIntent)并将控件委托给处理该意图的函数。