我有intent-A
由某些用户输入触发。当响应给用户时,我使用了ConfirmIntent
而不是Close
,这样我就可以切换/链接另一个意图(假设为intent-B
)。
理想情况下,如果用户键入"yes"
,则应触发intent,如果用户键入"no"
,则不应该。问题是无论我输入什么,intent-B
都会被触发。
我已阅读here,here和here中的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
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)
答案 0 :(得分:3)
您正在正确处理此问题。
当您将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"
这样的话语意图会得到负面回应。这是一个稍微不同的用例,可能不适合您。