当我们想要在 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)秒内继续进行客户交互,以让他们知道您仍在查找信息。