会话与会话属性
本课程将解释什么是用户会话,以及如何在用户会话期间收集数据。
通常,Alexa技能的目标是尽可能实现自然流畅的对话。我们可能希望技能能够与用户进行多轮互动,而不是只说一句话就停止。在此过程中,我们还可能需要从用户那里收集信息,以进一步引导对话的走向。
这正是“会话”(session)和“会话属性”(session attributes)概念发挥作用的地方。
会话
一个技能会话指的是从用户调用我们的技能开始,到用户退出技能为止的所有用户交互过程。
会话生命周期
让我们通过会话的生命周期来更清晰地理解这一概念。
- 技能会话在用户调用我们的技能时开始。正如你可能记得的,从用户触发技能到技能返回响应之间,会经历一系列步骤。
- 技能后端接收到一个请求负载(request payload),其中包含多种属性,例如意图类型。该负载还包含一个名为
new的布尔值属性,用于标识这是否为一个新的会话。 - 接下来,我们的技能后端返回一个响应负载(response payload)。该负载中包含一个由我们设置的属性
shouldEndSession,用于指示会话是否应保持打开或关闭。 - 根据这个值,会话将决定是继续开放还是结束。
shouldEndSession 可以设置为以下三种值之一:
false/null:表示会话应保持打开,技能将继续处理用户后续的语音输入。true:表示会话应结束,技能在返回响应后即退出。undefined:这是一个稍复杂的场景。技能的行为取决于用户所使用的设备类型。如果设备带有屏幕,并且技能的响应包含屏幕内容,则会话将在接下来的30秒内保持打开状态,但不会主动开启麦克风提示用户输入。如果用户说出唤醒词并紧接着发出请求,Alexa 会将请求发送给技能;否则,Alexa 将忽略用户的语音输入。
会话属性
随着用户持续与我们的技能进行对话,我们可能需要在过程中收集用户的信息。例如,我们开发了一个技能,允许用户在名为“Movie Time Theater”的电影院预订电影票。考虑以下用户与 Alexa 之间的对话片段:
用户: “Alexa,打开 Movie Time。”
Alexa: “你好!我可以帮你预订 Movie Time Theater 的电影票。你想订哪部电影的票?”
用户: “冰雪奇缘。”
Alexa: “你想什么时候看电影?”
用户: “周五晚上9点。”
在这个对话中,我们需要一种机制来保存数据,比如电影名称和观影时间。这时,会话属性就派上用场了。
会话属性 是我们希望在当前会话期间持久保存的键值对数据。
会话属性通过 sessionAttributes 这一属性定义,该属性附加在每个发送到我们技能端点的请求中。我们可以提取 sessionAttributes,并根据技能的具体用途以不同方式使用它。在上述例子中,我们可能会收集所有相关信息,并将其发送至负责订票的 API 接口。