Я пытаюсь подключить команду 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.