如何使用初始化/验证或履行 AWS Lambda 函数来更改 Amazon Lex 机器人的流程?

上次更新日期:2022 年 5 月 27 日

我想使用初始化/验证或履行 AWS Lambda 函数来更改 Amazon Lex 机器人的流程。如何使用 Amazon Lex 控制台执行此操作?

简短描述

您可以使用初始化/验证或履行 AWS Lambda 代码挂钩来更改 Amazon Lex 机器人的对话流程。Amazon Lex 控制台提供了 dialogAction 字段,该字段指导 Amazon Lex 在与用户互动时采取的下一步行动。此字段向 Amazon Lex 描述在用户对客户端做出回应后预计会有什么后续行动。

type 字段指示机器人的下一步行动。它还确定 Lambda 函数必须在 dialogAction 值中提供的其他字段。共有五种类型:

  1. ElicitIntent:告诉 Amazon Lex 预计用户会使用包含意图的话语进行回应。
  2. ElicitSlot:告诉 Amazon Lex 预计用户会在回应中提供槽位值。
  3. Close:告诉 Amazon Lex 不要期待用户回应。例如,“您的披萨订单已下达”不需要回复。
  4. ConfirmIntent:告诉 Amazon Lex 预计用户会给出“是”或“否”答案来确认或拒绝当前意图。
  5. Delegate:指示 Amazon Lex 根据机器人配置选择下一步行动的方案

解决方法

注意:本文中的步骤使用了 V2 版的 Amazon Lex 控制台。如果您当前使用的是 V1,请在导航窗格中选择 Switch to the new Lex v2 console(切换到新的 Lex v2 控制台)。

Lambda 响应语法指定 Amazon Lex 期待来自您的 Lambda 函数的响应是什么格式。

查看有关响应字段的以下信息:

  • sessionState — 此字段为必填字段。它描述了与用户对话的当前状态。结构的实际内容取决于对话行动的类型。
  • dialogAction — 此字段确定 Amazon Lex 在响应 Lambda 函数时应采取的行动的类型。类型字段始终为必填字段。只有当 dialogAction.type 为 ElicitSlot 时,才需要 slotToElicit 字段。
  • intent — Amazon Lex 使用的意图的名称。当 dialogAction.type 为 Delegate 或 ElicitIntent 时,不需要此字段。
  • state — 此字段为必填字段。只有当 dialogAction.type 为 Delegate 时,状态才能为 ReadyForFulfillment。
  • messages — 如果 dialogAction.type 是 ElicitIntent,则此字段为必填字段。它描述了 Amazon Lex 向客户显示的一条或多条用于展开下一轮对话的消息。如果您不提供消息,则 Amazon Lex 会使用您在创建机器人时定义的相应消息。有关更多信息,请参阅消息数据类型。
  • contentType — 它描述了要使用的消息类型。
  • content — 如果消息类型为 PlainText、CustomPayload 或 SSML,则此字段包含要发送给用户的消息。
  • imageResponseCard — 如果消息类型为 ImageResponseCard,则此字段包含要向用户显示的响应卡的定义。有关更多信息,请参阅 ImageResponseCard 数据类型。

使用 ElicitSlot 类型更改对话流程

要使用 ElicitSlot 类型更改对话流程,请用以下格式传递 Lambda 代码挂钩的响应:

{
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "<slot-name-to-elicit>",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "<intent-name-to-elicit>",
            "state": "<state>"
        }
    }
}

返回响应后,Amazon Lex 会引出一个名为 slot-name-to-elicit 的插槽,该插槽属于 intent-name-to-elicit 意图。

使用 ElicitIntent 类型更改对话流程

要使用 ElicitIntent 类型更改对话流程,请用以下格式传递 Lambda 代码挂钩的响应:

   {
     "sessionState": {
         "dialogAction": {
             "type": "ElicitIntent"
         }
     },
     "messages": [{
         "contentType": "<content-type>",
         "content": "<message>"
     }]
 }

返回此响应后,将向用户显示消息占位符中指定的消息。下一个用户输入将被视为意图话语,并调用具有最高 nluConfidence 分数的意图。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?