亚马逊Lex接受确认的任何回应



我有一个由某些用户输入触发的intent-A。当给用户给出响应时,我已经使用了ConfirmIntent,而不是Close,以便我可以切换/链条另一种意图(假设intent-B)。

理想情况下,如果用户类型"yes",则应触发意图,如果用户类型"no",则不应。问题是intent-B无论我输入什么。

我已经从这里和这里读过有关ConfirmIntent的信息。

调用代码:

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)

您正在正确处理此操作。

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

另外,您可以在confirm_intent请求中使用intent-A。然后,当响应命中intent-A时,您可以在拒绝上使用Close,而confirmation上的Delegate将流量传递给intent-B。这是"更正确的",但会导致其他计算,因此这是一种权衡。

如果您有多个后续请求,则可以考虑使用ElicitIntent询问用户"What can I help you with?""goodbye"具有诸如"nothing"之类的话语的意图,会引起负面响应。这是一个略有不同的用例,可能不适合您。

最新更新