本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
了解 Amazon Lex V2 机器人会话
用户启动与您的机器人的对话时,Amazon Lex V2 会创建一个会话。您的应用程序与 Amazon Lex V2 之间交换的信息组成了对话的会话状态。当您发出请求时,会话会通过您指定的标识符进行标识。有关会话标识符的更多信息,请参阅RecognizeText或RecognizeUtterance操作中的sessionId
字段。
您可以修改在应用程序和自动程序之间发送的会话状态。例如,您可以创建和修改其中包含会话自定义信息的会话属性,也可以通过设置对话上下文来更改对话流,以解释下一个表达。
您可以通过三种方式来更新会话状态。
-
将会话信息作为调用
RecognizeText
或RecognizeUtterance
操作的一部分,以内联方式传递。 -
使用 Lambda 函数和在每轮对话之后调用的
RecognizeText
或RecognizeUtterance
操作。有关更多信息,请参阅 整合一个 AWS Lambda 在你的机器人中发挥作用。另一种是在应用程序API中使用 Amazon Lex V2 运行时来更改会话状态。 -
通过操作可以帮助您管理与机器人的对话中的会话信息。这些操作是PutSession操作、GetSession操作和DeleteSession操作。使用这些操作,您可以获取自动程序与用户会话的状态信息,还可以对状态执行更精细的控制。
如果您希望获取会话的当前状态,请使用 GetSession
操作。此操作会返回会话的当前状态,包括与用户进行的对话的状态、已经设置的任意会话属性以及当前意图和 Amazon Lex V2 识别为与用户言语匹配的任何其他意图的槽位值。
PutSession
操作可让您直接操作当前会话状态。您可以设置会话,包括机器人接下来要执行的对话操作类型以及 Amazon Lex V2 向用户发送的消息。这让您可以控制与自动程序的对话流。将对话操作 type
字段设置为 Delegate
,可以让 Amazon Lex V2 确定机器人的下一个操作。
您可以使用 PutSession
操作创建与自动程序的新会话,并设置自动程序在开始时应使用的目的。您还可以使用 PutSession
操作将一个目的更改为另一个。创建会话或更改目的时,您还可以设置会话状态,例如槽值和会话属性。新目的完成后,您可以选择重启之前的目的。
来自 PutSession
操作的响应包含与 RecognizeUtterance
操作相同的信息。您可以使用此信息向用户提示信息的下一部分,就像您对待 RecognizeUtterance
操作的响应一样。
使用 DeleteSession
操作以删除现有会话并使用新会话重新开始。例如,在您测试自动程序时,可以使用 DeleteSession
操作从自动程序删除测试会话。
会话操作可用于履行 Lambda 函数。例如,如果您的 Lambda 函数返回 Failed
作为履行状态,您可以通过 PutSession
操作将对话操作类型设置为 close
,将 fulfillmentState
设置为 ReadyForFulfillment
以重试履行步骤。
您可以对会话操作采取下列措施:
-
让自动程序启动对话而不是等待用户启动。
-
在对话期间切换目的。
-
返回到以前的目的。
-
在交互过程中启动或重新启动对话。
-
验证槽值并让自动程序重新提示无效的值。
下文分别详细介绍了这些操作。
启动新会话
如果您希望自动程序开始与用户的对话,可以使用 PutSession
操作。
-
创建没有槽的欢迎目的,并创建一条总结性消息向用户提示阐明目的。例如,“您希望订购什么? 您可以说‘订一杯饮料’或‘订一个披萨’。”
-
调用
PutSession
操作。将目的名称设置为欢迎目的的名称,并将对话操作设置为Delegate
。 -
Amazon Lex 将使用您的欢迎意图中的提示做出响应,以启动与用户的对话。
切换意图
您可以使用 PutSession
操作将一个目的切换为另一个。您还可以使用它切换回以前的目的。您可以使用 PutSession
操作为新目的设置会话属性值或槽值。
-
调用
PutSession
操作。将目的名称设置为新目的的名称,并将对话操作设置为Delegate
。您还可以为新目的设置所需的任意槽值和会话属性。 -
Amazon Lex 使用新意图启动与用户的对话。
恢复以前的意图
要恢复以前的意图,可以通过 GetSession
操作获取意图状态,执行所需的交互,然后通过 PutSession
操作将意图设置回其之前的对话状态。
-
调用
GetSession
操作。存储意图状态。 -
进行另一次互动,例如履行不同的意图。
-
根据为上一个意图保存的信息调用该
PutSession
操作。这会将用户返回到对话中相同位置的上一个目的。
在某些情况下,可能需要恢复用户与自动程序的对话。例如,假设您创建了一个客户服务自动程序。您的应用程序确定用户需要与客户服务代表交谈。在与用户交谈之后,客户服务代表可以使用所收集的信息将对话引导回自动程序。
要恢复会话,请使用类似于下文的步骤:
-
您的应用程序确定用户需要与客户服务代表交谈。
-
使用
GetSession
操作获取目的的当前对话状态。 -
客户服务代表与用户交谈并解决问题。
-
使用
PutSession
操作设置目的的对话状态。这可能包括设置槽值、设置会话属性或者更改目的。 -
自动程序恢复与用户的对话。
验证槽位值
您可以使用客户端应用程序验证对自动程序的响应。如果响应无效,您可以使用 PutSession
操作获取用户的新响应。例如,假设您的鲜花订购自动程序只能卖郁金香、玫瑰和百合。如果用户订购康乃馨,您的应用程序可以执行以下操作:
-
检查
PostText
或PostContent
响应返回的槽值。 -
如果槽值无效,则调用
PutSession
操作。您的应用程序应清除槽值,设置slotToElicit
字段,并将dialogAction.type
值设置为elicitSlot
。(可选)如果您希望更改 Amazon Lex 用于引入插槽值的消息,可以设置message
和messageFormat
字段。