我有一个由某些用户输入触发的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
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"
之类的话语的意图,会引起负面响应。这是一个略有不同的用例,可能不适合您。