sid*_*491 4 aws-lambda amazon-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也会被调用。
我错过了什么还是它是这样设计的?
注意:对于解决方法,我在 DialogCodeHook 的 DialogCodeHook 中添加以下代码intent-B
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值将正确传递。
或者,您可以intent-A在您的confirm_intent请求中使用。然后,当响应命中时,intent-A您可以使用Closeon denial 和Delegateonconfirmation将流传递到intent-B. 这是“更正确的”,但会导致额外的计算,因此这是一种权衡。
如果您有多个跟进请求,您可以考虑使用ElicitIntentto 代替询问 user "What can I help you with?"。有一个包含诸如"nothing", 之类的话语的意图"goodbye"将捕获负面响应。这是一个略有不同的用例,可能不适合您。
| 归档时间: | 
 | 
| 查看次数: | 2192 次 | 
| 最近记录: |