Ошибка на консоли Lex Bot - достигнуто повторное выполнение лямбды на том же высказывании
Я создал бота в Lex, а затем создал два намерения в одном боте - intent1
а также intent2
с высказыванием get me a taxi now
а также I wan a taxi to {Location} on {TravelDate} at {TaxiTime}
соответственно (первый в intent1
и второй в intent2
). Оба намерения вызывают разные лямбда-функции, и внутри лямбда-функций я получаю доступ к RDS, чтобы добавить информацию о бронировании для такси. Когда я тестирую с консоли Lex, говоря одно из двух высказываний, лямбда-функция выполняется полностью, так как я вижу обновленную запись базы данных, но на тестовой консоли Lex bot я вижу Reached second execution of fulfillment lambda on same utterance Lex error
, В моем коде у меня есть эта строка:
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()
вызов в коде выше вызывает проблему, потому что в моих файлах журнала я вижу первые два журнала отладки как значения Подтверждено и Нет, но последний logger.debug() не находится в файле журнала, что означает, что делегат () был вызван, и это вызывая ошибку на консоли Lex.
В чем может быть проблема для этой ошибки?
1 ответ
Ваше высказывание может содержать текст, который вызывает более чем одно намерение. вот почему проблема возникла. Вы проверяете высказывания в обоих намерениях и удаляете одно из двух высказываний подобного типа.