Amazon Lex接受任何回复的ConfirmIntent

问题描述 投票:3回答:1

我有一个由一些用户输入触发的intent-A。当响应给用户时,我使用了ConfirmIntent而不是Close,这样我就可以切换/链接另一个意图(比方说intent-B)。

理想情况下,如果用户键入"yes",则应触发intent,如果用户键入"no",则不应该。问题是无论我输入什么,intent-B都会被触发。

我读过ConfirmIntenthereherehere

电话代码:

session_attributes = {"confirmationContext": "AutoPopulate"}
return confirm_intent(session_attributes , 'intent-B', slots, 'Do you want to invoke intent-B')

确认内容代码:

def confirm_intent(session_attributes, intent_name, slots, message):
    return {
        'sessionAttributes': session_attributes,
        'dialogAction': {
            'type': 'ConfirmIntent',
            'intentName': intent_name,
            'slots': slots,
            'message': {
                'contentType': 'PlainText',
                'content': message
            }
        }
    }

在日志中我可以看到当我输入confirmationStatus': 'Denied'"no“但即便如此,intent-B也被称为。

我错过了什么或是这样设计的吗?

注意:对于解决方法,我在intent-B的DialogCodeHook中添加以下代码

if 'confirmationStatus' in intent_request['currentIntent'] and intent_request['currentIntent']['confirmationStatus'] == 'Denied':
    return close("Ok, let me know if you need anything else.", session_attributes)
aws-lambda amazon-lex
1个回答
3
投票

您正确处理此问题。

当你将intent-B传递给你的confirm_intent请求时。您告诉Lex将用户响应传递给intent-B。当用户使用"no"响应时,正确传递Denied值。

或者,您可以在intent-A请求中使用confirm_intent。然后,当响应击中intent-A时,你可以使用CloseDelegate上的否定和confirmation将流量传递给intent-B。这是“更正确”但会导致额外的计算,所以这是一个权衡。

如果您有多个跟进请求,您可以考虑使用ElicitIntent来询问用户"What can I help you with?"。对"nothing"这样的话语有意图,"goodbye"会收到负面回应。这是一个稍微不同的用例,可能不适合您。

© www.soinside.com 2019 - 2024. All rights reserved.