#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