首页 文章

在Alexa Skill中使用sessionAttributes

提问于
浏览
0

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

1) ListToDoItem

  • 在此意图中,我的技能将查看数据库并列出存储在数据库中的待办事项 . 列出项目后,Alexa将继续说"do you want me to list detailed info on these to-do items?",为了处理这个问题,我将把上一个会话中检索到的项目作为 sessionAttributes 传递 . 当被要求列出有关这些项目的详细信息时,我将提取先前转发的 sessionAtrributes 并撰写详细的语音回复 .

  • 所以对于这个意图,我必须对话语进行抽样

  • 列出我的待办事项

  • 是的

将使用话语'yes',以便可以提取 sessionAttributes 以创建详细的语音响应 .

2) ListDoneItems

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

为此,意图将有2个样本话语

  • 列出我已完成的项目

  • 是的

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

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

1 回答

  • 1

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

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

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

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

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

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

相关问题