AWS lambda — как заставить бота сказать конкретный ответ пользователю с помощью функции AWS lambda?

#amazon-web-services #aws-lambda

#amazon-web-services #aws-lambda

Вопрос:

Я действительно новичок в AWS Lex и AWS Lambda. Я пытаюсь отправить ответное сообщение пользователю, когда он вставил недопустимое значение слота. Я хочу, чтобы бот написал пользователю «У нас нет велосипедов такого типа, популярные типы — мужские / женские / Унисекс / Детские».

Но вместо этого он выдает эту ошибку:

Произошла ошибка: Неверный лямбда-ответ: получен неверный ответ от Lambda: Не удается создать экземпляр IntentResponse, проблема: проверенный объект имеет значение null в [Источник: {«isValid»: false, «violatedSlot»: «BikeType», «message»: {«ContentType»: «Открытый текст», «содержимое»: «У нас нет велосипедов такого типа, популярные типы — мужские / женские / Унисекс / Детские».}}; строка: 1, столбец: 181]

Лямбда-функция, которая создает ответ:

 def build_validation_result(is_valid, violated_slot, message_content):
    if message_content is None:
        return {
            "isValid": is_valid,
            "violatedSlot": violated_slot,
        }

    return {
        'isValid': is_valid,
        'violatedSlot': violated_slot,
        'message': {'contentType': 'PlainText', 'content': message_content}
    }
 

Как мне исправить формат, чтобы он соответствовал ответу AWS lambda?
Спасибо.

Ответ №1:

У Lex есть определенный формат ответов см. < » rel=»nofollow noreferrer»>https://docs.aws.amazon.com/lex/latest/dg/lambda-input-response-format.html >

Но ваш может выглядеть примерно так

     message={"dialogAction": {  
    "type": "Close",  
    "fulfillmentState":   "Failed",  
    "message": {  
      "contentType": "PlainText",  
      "content": "We do not have such type of bikes, the popular types are Men/Women/Unisex/Kids."  
    }}
return message