Python Lex Bot控制台上出错-在同一个语句上第二次执行lambda
我在Lex中创建了一个bot,然后在同一个bot中创建了两个intent-Python Lex Bot控制台上出错-在同一个语句上第二次执行lambda,python,aws-lambda,amazon-lex,Python,Aws Lambda,Amazon Lex,我在Lex中创建了一个bot,然后在同一个bot中创建了两个intent-intent1和intent2并发出立即给我叫辆出租车和我想叫辆出租车在{TaxiTime}{TravelDate}上的{Location}(第一个在intent1中,第二个在intent2中)。这两个意图都调用不同的lambda函数,在lambda函数中,我访问RDS以添加出租车的预订信息。当我从Lex控制台测试两个语句中的任何一个时,lambda函数完全执行,因为我可以看到数据库记录已更新,但在Lex bot测试控制台
intent1
和intent2
并发出立即给我叫辆出租车
和我想叫辆出租车在{TaxiTime}{TravelDate}上的{Location}
(第一个在intent1
中,第二个在intent2
中)。这两个意图都调用不同的lambda函数,在lambda函数中,我访问RDS以添加出租车的预订信息。当我从Lex控制台测试两个语句中的任何一个时,lambda函数完全执行,因为我可以看到数据库记录已更新,但在Lex bot测试控制台上,我看到在同一个语句Lex error上第二次执行lambda。在我的代码中,我有一行:
def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}
def book_taxi(intent_request):
confirmation_status = intent_request['currentIntent']['confirmationStatus']
#bunch of other processing code
logger.debug('Confirmation = {}'.format(confirmation_status))
if confirmation_status == 'Confirmed':
try_ex(lambda: session_attributes.pop('confirmationContext'))
logger.debug('confirmation_context = {}'.format(confirmation_context))
if confirmation_context == 'AutoPopulate':
return elicit_slot(
session_attributes,
intent_request['currentIntent']['name'],
intent_request['currentIntent']['slots']
)
return delegate(session_attributes, intent_request['currentIntent']['slots'])
logger.debug('Booked Taxi at={}'.format(reservation))
我的猜测是上面代码中的delegate()
调用导致了问题,因为在我的日志文件中,我可以看到前两个调试日志已确认,没有值,但最后一个日志记录程序没有值。debug()不在日志文件中,这意味着delegate()已被调用,这导致Lex console上出现错误
此错误可能存在什么问题?您的话语可能包含引发多个意图的文本。
这就是问题产生的原因。
你在两个意图中都改变了发音,并从两个类似类型的话语中去掉了一个。检查,可能会有所帮助