【问题标题】:Using sessionAttributes in Alexa Skill在 Alexa Skill 中使用 sessionAttributes
【发布时间】:2018-06-04 02:44:39
【问题描述】:

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

1) ListToDoItem

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

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

2)ListDoneItems

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

为此意图将有 2 个示例话语

  • 列出我完成的项目
  • 是的

就像之前一样,它有一个“是”来根据 sessionAttributes 生成详细的语音响应。

但我遇到的问题是,当我对 ListDoneItems 意图的“您要我列出已完成的项目吗?”回复“是”时,生成的下一个意图请求的类型为 ListToDoItems 而不是 @987654330 @,即使我在技能回复中将shouldEndSession 设置为false。发生这种情况是因为我的意图之间的示例话语之间存在交叉。那么在不同的意图中有相似的意图是错误的吗?如何设计交互模型来创建多轮对话以便在sessionAttributes中使用?

【问题讨论】:

    标签: alexa alexa-skill


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多