Ошибка на консоли 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 ответ

Ваше высказывание может содержать текст, который вызывает более чем одно намерение. вот почему проблема возникла. Вы проверяете высказывания в обоих намерениях и удаляете одно из двух высказываний подобного типа.

Другие вопросы по тегам