本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用户启动与您的机器人的对话时,Amazon Lex V2 会创建一个会话。您的应用程序与 Amazon Lex V2 之间交换的信息组成了对话的会话状态。当您发出请求时,会话会通过您指定的标识符进行标识。有关会话标识符的更多信息,请参阅RecognizeText或RecognizeUtterance操作中的sessionId
字段。
您可以修改在应用程序和自动程序之间发送的会话状态。例如,您可以创建和修改其中包含会话自定义信息的会话属性,也可以通过设置对话上下文来更改对话流,以解释下一个表达。
您可以通过三种方式来更新会话状态。
-
将会话信息作为调用
RecognizeText
或RecognizeUtterance
操作的一部分,以内联方式传递。 -
使用 Lambda 函数和在每轮对话之后调用的
RecognizeText
或RecognizeUtterance
操作。有关更多信息,请参阅 将 AWS Lambda 功能集成到您的机器人中。另一种方式是在应用程序中使用 Amazon Lex V2 运行时 API 来更改会话状态。 -
通过操作可以帮助您管理与机器人的对话中的会话信息。这些操作包括 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
字段。