我有一个由一些用户输入触发的intent-A
。当响应给用户时,我使用了ConfirmIntent
而不是Close
,这样我就可以切换/链接另一个意图(比方说intent-B
)。
理想情况下,如果用户键入"yes"
,则应触发intent,如果用户键入"no"
,则不应该。问题是无论我输入什么,intent-B
都会被触发。
我读过ConfirmIntent
,here和here的here。
电话代码:
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
值。
或者,您可以在intent-A
请求中使用confirm_intent
。然后,当响应击中intent-A
时,你可以使用Close
对Delegate
上的否定和confirmation
将流量传递给intent-B
。这是“更正确”但会导致额外的计算,所以这是一个权衡。
如果您有多个跟进请求,您可以考虑使用ElicitIntent
来询问用户"What can I help you with?"
。对"nothing"
这样的话语有意图,"goodbye"
会收到负面回应。这是一个稍微不同的用例,可能不适合您。