我想使用初始化/验证或履行 AWS Lambda 函数来更改我的 Amazon Lex 机器人的对话流程。
解决方案
**注意:**本文中的示例使用的是第 2 版 Amazon Lex 控制台。如果您使用的是第 1 版,请在导航窗格中选择 Switch to the new Lex v2 console。
Lambda 响应语法指定了 Amazon Lex 预期 Lambda 函数响应要采用的格式。确保在响应中包含必填字段。
使用“ElicitSlot”类型更改对话流程
要使用 ElicitSlot 类型更改对话流程,请按照以下格式传递来自 Lambda 代码挂钩的响应:
{
"sessionState": {
"dialogAction": {
"slotToElicit": "<slot-name-to-elicit>",
"type": "ElicitSlot"
},
"intent": {
"name": "<intent-name-to-elicit>",
"state": "InProgress"
}
}
}
在返回响应后,Amazon Lex 会引发一个名为 ** slot-name-to-elicit** 的插槽,该插槽属于 intent-name-to-elicit 意图。
例如,您有一个 CreateUser 意图,其插槽会提示输入用户名。使用 Lambda 函数检查是否已经存在此用户名。如果存在此用户名,则会出于相同的意图再次引发用户名插槽。
使用“ElicitIntent”类型更改对话流程
要使用 ElicitIntent 类型更改对话流程,请按照以下格式传递来自 Lambda 代码挂钩的响应:
{
"sessionState": {
"dialogAction": {
"type": "ElicitIntent"
}
},
"messages": [{
"contentType": "<content-type>",
"content": "<message>"
}]
}
在 Amazon Lex 返回响应后,用户会看到消息占位符中指定的消息。下一个用户输入会被视为意图言语,并以 nluConfidence 最高分调用该意图。
例如,如果您的机器人履行了用户的意图,则要将该机器人置于收听状态。然后,用户可以提供另外一种言语来调用另外一个意图。
使用“Delegate”类型更改对话流程
在指定新意图时,您可以使用 Delegate 类型更改开始意图。要使用 Delegate 类型,请按照以下格式传递来自 Lambda 代码挂钩的响应:
{
'sessionState': {
'dialogAction': {
'type': 'Delegate'
},
'intent': {
'name': '<intent-name-to-elicit>',
'state': 'InProgress'
}
}
}
例如,您的机器人有意图 A、B 和 C。如果用户对意图 A 中的插槽提供了响应,则 Lambda 函数会检查用户输入。然后,此函数会调用意图 B 或 C。
相关信息
GitHub 网站上的 amazon-lex-v2-dialogation