Slack slash-команда через шлюз API AWS на AWS Lambda (Python против Java)

0

Вопрос

Я пытаюсь подключить команду Slack slash к AWS Lambda (через шлюз API AWS).

Я смог адаптировать схему "Привет, мир" (написанную на Python) в разделе "Учебник по Лямбда". Я настроил шлюз API в качестве триггера, затем попросил Slack ОТПРАВИТЬ команду косой черты в конечную точку API. Мне пришлось вручную декодировать тело base64, а затем использовать parse_qs для преобразования текста сообщения, похожего на строку запроса, в словарь, где я мог бы получить к нему доступ просто отлично.

Мой настоящий лямбда-код в настоящее время находится на Java, но я начал с примера приложения java-basic из Руководства для разработчиков. Я создал приложение, загрузил банку и подтвердил, что вызывается правильный обработчик. Я настроил другой шлюз API и указал другую команду Slack slash в новой конечной точке. Это не удается.

Журнал выглядит так:

java.lang.RuntimeException: An error occurred during JSON parsing
Caused by: java.io.UncheckedIOException: com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.String` out of START_OBJECT token
 at [Source: (ByteArrayInputStream); line: 1, column: 1]

Я предполагаю, что это означает, что Slack отправляет один и тот же аргумент, подобный строке запроса, в теле СООБЩЕНИЯ, и по какой-то причине что-то ожидает ввода JSON, а не только текста. Я не понимаю, почему обработчик Python был в порядке с созданием словаря событий и созданием лямбда-кода для декодирования тела СООБЩЕНИЯ, в то время как обработчик Java никогда не вызывается, но умирает раньше, когда пытается десериализовать тело СООБЩЕНИЯ, думая, что это JSON.

Как лямбды, так и шлюзы API были настроены с обычными значениями по умолчанию AFAICT.

amazon-web-services
2021-11-24 01:37:03
1

Лучший ответ

0

Я решил проблему, переключившись на использование примера HandlerStream. Затем я могу получить "тело" события, Base64.decodeBase64, затем распаковать параметры формы с помощью UriParameterMap.parse.

Затем я обрабатываю входящий текст, полученный с помощью команды Slack slash, а затем возвращаю строку JSON, которую ожидает Slack.

2021-12-05 17:48:35

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................