В настоящее время я пытаюсь отправить несколько сообщений от AWS Lambda на Lex в Python 3.6, но Lex считает мои ответы неправильными.
Я получил несколько ошибок, таких как:
Поэтому в основном я делаю это так:
messages = [
{
'contentType': 'PlainText',
'group': 0,
'value': 'Applying this criteria, you have %d result(s) left.' % len(json.loads(session_attributes['results']))
},
{
'contentType': 'PlainText',
'group': 1,
'value': 'What do you want to do next ?'
}
]
format_message('PlainText', messages)
с format_message, который TEMPORARILY выглядит так (потому что я пробовал много МНОГО, чтобы заставить его работать... без каких-либо успехов), но этот тоже не работает:
def format_message(message_type, content):
return {'messages': content}
В конце он дает этот формат ответа (с другими предварительными реквизитами lex, такими как слоты и т.д., Но я не буду отображать их здесь, потому что я не думаю, что это имеет значение):
{'message': {'messages': [{'group': 0, 'contentType': 'PlainText', 'value': 'Applying this criteria, you have 1 result(s) left.'}, {'group': 1, 'contentType': 'PlainText', 'value': 'What do you want to do next?'}]
Я попытался преобразовать массив сообщений в строку, отправить его как JSON и т.д., Но ничего не работает.
Я прочитал всю документацию, указанную в этом выпуске...
Кто-нибудь уже нашел решение, пожалуйста?
Спасибо,
Насколько я знаю, это невозможно из Лямбды. Лекс допускает только одно сообщение возврата. Существует нечто, называемое Группой сообщений, которое может быть создано, когда вы создаете бот Lex с помощью JSON из командной строки aws
утилиты управления, например:
{
"metadata": {
"importFormat": "JSON",
"importType": "LEX",
"schemaVersion": "1.0"
},
"resource": {
"abortStatement": {
"messages": [
{
"content": "Sorry, I could not understand. Goodbye.",
"contentType": "PlainText"
}
]
},
"childDirected": false,
"clarificationPrompt": {
"maxAttempts": 5,
"messages": [
{
"content": "Sorry, can you please repeat that?",
"contentType": "PlainText"
}
]
},
"idleSessionTTLInSeconds": 300,
"intents": [
{
"conclusionStatement": {
"messages": [
{
"content": "Hello",
"contentType": "PlainText"
},
{
"content": "World",
"contentType": "PlainText"
}
]
},
"fulfillmentActivity": {
"type": "ReturnIntent"
},
"name": "test",
"sampleUtterances": [
"hello"
],
"slots": [],
"version": "1"
}
],
"locale": "en-US",
"name": "Test",
"version": "1",
"voiceId": "Matthew"
}
}
Я думаю, что ваш лучший выбор из Lambda-функции - объединить строки в Python следующим образом:
'message': {
'contentType': 'PlainText',
'value': ('Applying this criteria, you have %d result(s) left.' % len(json.loads(session_attributes['results']))) + 'What do you want to do next ?'
}
Прошу прощения за форматирование. Обычно я не работаю на Python.