2

我们正在使用 Amazon Connect、Lex 和 Lambda 来创建电话机器人。我们的一个用例是,当我们在其他系统中查找信息时,我们需要暂停用户。所以对话会是这样的:

- bot: hi, what can I do for you?
- user: i want to make a reservation
- bot: wait a minute while I fetch information about available rooms
... after 5 seconds ...
- bot: I found a free room blah blah

我看不到发送wait a minute...消息和控制对话的方法。我们怎样才能做到这一点?

4

3 回答 3

1

您可以通过将意图设置为由 lambda 函数实现,在单个 Lex 机器人中完成此操作,该函数的响应将播放一条消息“请稍候”,然后链接另一个互联网以使用原始数据执行搜索意图。

有关在意图之间共享数据的信息,请参阅此链接。

您可以通过在 lambda 响应中传回 confirmIntent 对话框操作来链接或切换到下一个意图。有关 lambda 输入和响应格式的更多信息,请参阅此链接

于 2019-03-09T04:53:05.353 回答
0

您可以在 aws connect https://docs.aws.amazon.com/connect/latest/adminguide/flow-control-actions-wait.html中使用等待块

通过使用此块,您可以将时间设置为 5 秒。时间到期后,您可以播放提示。

于 2021-10-03T18:18:00.667 回答
0

当我们想要在 IVR 中进行后端查找时,这是一个非常常见的问题。问题是 lex 没有提供任何方法来播放提示。

一种方法是:

  • 在您的意图(上面示例中的预订意图)中创建一个具有任何类型(例如 AMAZON.NUMBER)的虚拟插槽,我们并不关心此插槽中的值是什么
  • 从意图的 lex 代码挂钩中,为这个虚拟插槽返回 ElicitSlot,并提示“等一下,我正在获取可用房间...”
  • 如果您只做这么多,您将面临的问题是 Lex 将期待来自调用者的输入,并且会等待大约 4 秒,然后再将控制权传递回 Init 和 Validation Lambda,因此会有不必要的延迟。为了克服这个问题,您需要在连接的“获取客户输入”块中将超时属性设置为会话属性。

属性1:

Lex V2 属性名称: x-amz-lex:audio:start-timeout-ms:[intentName]:[slotToElicit]

Lex Classic 属性名称x-amz-lex:start-silence-threshold-ms:[intentName]:[slotToElicit]

值: 10(或任何小数字,以毫秒为单位)

Property2: 仅在 Lex Classic 中可用,要在 Lex V2 上禁用强插,您可以从 lex 控制台对所需的插槽执行此操作 属性名称:x-amz-lex:barge-in-enabled:[intentName]:[slotToElicit] : 错误的

如果未禁用强插,则用户可能会在您的“请稍候...”提示中说话,并且不会完全播放。

这些属性的官方文档: https ://docs.aws.amazon.com/connect/latest/adminguide/get-customer-input.html https://docs.aws.amazon.com/lexv2/latest/dg/session -attribs-speech.html

另一种方式:

每当需要播放这样的提示时,将 lex 上下文临时存储为序列化后的联系人属性,或者如果大小太大而无法在 dynamodb 等存储中存储为联系人属性。返回控制权以连接,使用连接中的“播放提示”模块播放提示。要将控制权交还给机器人,您将需要调用 lambda 以再次使用完整的 lex 上下文重新初始化 Lex - 使用 PostText API,然后再次使用“获取客户输入”将控制权传递给同一个机器人

我已经实现了 option1 并且效果很好。如果后端查找花费的时间比预期的长,您甚至可以创建播放提示。实际查找可以委托给另一个 lambda,以便代码挂钩 lambda 可以在 x(比如 5)秒内继续进行客户交互,以让他们知道您仍在查找信息。

于 2021-12-01T20:50:53.983 回答