Отправка групповых (множественных) сообщений из Lambda в Lex

1

В настоящее время я пытаюсь отправить несколько сообщений от AWS Lambda на Lex в Python 3.6, но Lex считает мои ответы неправильными.

Я получил несколько ошибок, таких как:

  • Получен неверный ответ от Lambda: невозможно создать экземпляр Message, проблема: contentType не должен быть нулевым
  • "контент" не может быть пустым
  • Ошибка синтаксиса в модуле lambda_function: неожиданный символ после символа продолжения строки [после попытки избежать моего JSON]
  • Получен неверный ответ от Lambda: невозможно десериализовать экземпляр java.lang.String из токена START_OBJECT на...

Поэтому в основном я делаю это так:

    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 и т.д., Но ничего не работает.

Я прочитал всю документацию, указанную в этом выпуске...

Кто-нибудь уже нашел решение, пожалуйста?

Спасибо,

Теги:
python-3.x
amazon-web-services
aws-lambda
aws-lex

1 ответ

1

Насколько я знаю, это невозможно из Лямбды. Лекс допускает только одно сообщение возврата. Существует нечто, называемое Группой сообщений, которое может быть создано, когда вы создаете бот 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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню