This is an automated email from the ASF dual-hosted git repository.
zbendhiba pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
The following commit(s) were added to refs/heads/main by this push:
new 5fa53bf Slack : fix native support for Webhook URL + add test
coverage Fixes #3541
5fa53bf is described below
commit 5fa53bf7a64d03ce2525dbc88700a301cb73eb4c
Author: Zineb Bendhiba <[email protected]>
AuthorDate: Tue Mar 1 14:51:27 2022 +0100
Slack : fix native support for Webhook URL + add test coverage
Fixes #3541
---
.../component/slack/deployment/SlackProcessor.java | 6 ++
integration-tests/slack/pom.xml | 2 +-
.../quarkus/component/slack/it/SlackResource.java | 69 ++++++++++++++++++++--
.../slack/it/model/SlackMessageResponse.java | 49 +++++++++++++++
.../quarkus/component/slack/it/SlackTest.java | 53 +++++++++++++++--
.../component/slack/it/SlackTestResource.java | 2 +-
...ge.json => slackChatPostMessageWithBlocks.json} | 2 +-
...age.json => slackChatPostMessageWithToken.json} | 2 +-
...e.json => slackChatPostMessageWithWebhook.json} | 4 +-
... => slackGetConversationHistoryWithBlocks.json} | 4 +-
...n => slackGetConversationHistoryWithToken.json} | 2 +-
...=> slackGetConversationHistoryWithWebhook.json} | 4 +-
12 files changed, 177 insertions(+), 22 deletions(-)
diff --git
a/extensions/slack/deployment/src/main/java/org/apache/camel/quarkus/component/slack/deployment/SlackProcessor.java
b/extensions/slack/deployment/src/main/java/org/apache/camel/quarkus/component/slack/deployment/SlackProcessor.java
index b8af065..e4c54a2 100644
---
a/extensions/slack/deployment/src/main/java/org/apache/camel/quarkus/component/slack/deployment/SlackProcessor.java
+++
b/extensions/slack/deployment/src/main/java/org/apache/camel/quarkus/component/slack/deployment/SlackProcessor.java
@@ -23,6 +23,7 @@ import
io.quarkus.deployment.builditem.ExtensionSslNativeSupportBuildItem;
import io.quarkus.deployment.builditem.FeatureBuildItem;
import io.quarkus.deployment.builditem.IndexDependencyBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
+import org.apache.camel.component.slack.helper.SlackMessage;
import org.jboss.jandex.IndexView;
class SlackProcessor {
@@ -56,4 +57,9 @@ class SlackProcessor {
.toArray(String[]::new);
return new ReflectiveClassBuildItem(false, true, slackApiClasses);
}
+
+ @BuildStep
+ ReflectiveClassBuildItem registerForReflection() {
+ return new ReflectiveClassBuildItem(false, true, SlackMessage.class);
+ }
}
diff --git a/integration-tests/slack/pom.xml b/integration-tests/slack/pom.xml
index a61a275..53e8ca0 100644
--- a/integration-tests/slack/pom.xml
+++ b/integration-tests/slack/pom.xml
@@ -42,7 +42,7 @@
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
- <artifactId>quarkus-resteasy</artifactId>
+ <artifactId>quarkus-resteasy-jackson</artifactId>
</dependency>
<!-- test dependencies -->
diff --git
a/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/SlackResource.java
b/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/SlackResource.java
index aa01596..abf5fa2 100644
---
a/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/SlackResource.java
+++
b/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/SlackResource.java
@@ -17,6 +17,9 @@
package org.apache.camel.quarkus.component.slack.it;
import java.net.URI;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
@@ -29,8 +32,13 @@ import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.slack.api.model.Message;
+import com.slack.api.model.block.DividerBlock;
+import com.slack.api.model.block.LayoutBlock;
+import com.slack.api.model.block.SectionBlock;
+import com.slack.api.model.block.composition.MarkdownTextObject;
import org.apache.camel.ConsumerTemplate;
import org.apache.camel.ProducerTemplate;
+import org.apache.camel.quarkus.component.slack.it.model.SlackMessageResponse;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@Path("/slack")
@@ -48,19 +56,70 @@ public class SlackResource {
@ConfigProperty(name = "slack.token")
String slackToken;
+ @ConfigProperty(name = "slack.webhook.url")
+ String slackWebHookUrl;
+
@Path("/messages")
@GET
- @Produces(MediaType.TEXT_PLAIN)
- public String getSlackMessages() throws Exception {
+ @Produces(MediaType.APPLICATION_JSON)
+ public SlackMessageResponse getSlackMessages() throws Exception {
Message message =
consumerTemplate.receiveBody("slack://test-channel?maxResults=1&" +
getSlackAuthParams(),
5000L, Message.class);
- return message.getText();
+ return new SlackMessageResponse(message.getText(), message.getBlocks()
!= null ? message.getBlocks().size() : 0);
+ }
+
+ @Path("/message/token")
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
+ public Response createSlackMessageWithToken(String message) throws
Exception {
+ producerTemplate.requestBody("slack://test-channel?" +
getSlackAuthParams(), message);
+ return Response
+ .created(new URI("https://camel.apache.org/"))
+ .build();
}
- @Path("/message")
+ @Path("/message/webhook")
@POST
@Consumes(MediaType.TEXT_PLAIN)
- public Response createSlackMessage(String message) throws Exception {
+ public Response createSlackMessageWithWebhook(String message) throws
Exception {
+
producerTemplate.requestBody(String.format("slack://test-channel?webhookUrl=%s",
slackWebHookUrl), message);
+ return Response
+ .created(new URI("https://camel.apache.org/"))
+ .build();
+ }
+
+ @Path("/message/block")
+ @POST
+ @Consumes(MediaType.TEXT_PLAIN)
+ public Response createBlockMessage(String text) throws Exception {
+ List<LayoutBlock> blocks = new ArrayList();
+ blocks.add(SectionBlock
+ .builder()
+ .text(MarkdownTextObject
+ .builder()
+ .text(text)
+ .build())
+ .build());
+ blocks.add(SectionBlock
+ .builder()
+ .fields(Arrays.asList(
+ MarkdownTextObject
+ .builder()
+ .text("*Testing Camel Quarkus blocks*")
+ .build(),
+ MarkdownTextObject
+ .builder()
+ .text("*You should be able to see these
blocks")
+ .build()))
+ .build());
+ blocks.add(DividerBlock
+ .builder()
+ .build());
+
+ Message message = new Message();
+ message.setText(text);
+ message.setBlocks(blocks);
+
producerTemplate.requestBody("slack://test-channel?" +
getSlackAuthParams(), message);
return Response
.created(new URI("https://camel.apache.org/"))
diff --git
a/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/model/SlackMessageResponse.java
b/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/model/SlackMessageResponse.java
new file mode 100644
index 0000000..f0b2272
--- /dev/null
+++
b/integration-tests/slack/src/main/java/org/apache/camel/quarkus/component/slack/it/model/SlackMessageResponse.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.quarkus.component.slack.it.model;
+
+import io.quarkus.runtime.annotations.RegisterForReflection;
+
+@RegisterForReflection
+public class SlackMessageResponse {
+ String text;
+ int nbBlocks;
+
+ public SlackMessageResponse() {
+ }
+
+ public SlackMessageResponse(String text, int nbBlocks) {
+ this.text = text;
+ this.nbBlocks = nbBlocks;
+ }
+
+ public String getText() {
+ return text;
+ }
+
+ public void setText(String text) {
+ this.text = text;
+ }
+
+ public int getNbBlocks() {
+ return nbBlocks;
+ }
+
+ public void setNbBlocks(int nbBlocks) {
+ this.nbBlocks = nbBlocks;
+ }
+}
diff --git
a/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTest.java
b/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTest.java
index c3e8bab..3d7ef69 100644
---
a/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTest.java
+++
b/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTest.java
@@ -21,12 +21,12 @@ import java.util.UUID;
import com.github.tomakehurst.wiremock.WireMockServer;
import io.quarkus.test.common.QuarkusTestResource;
import io.quarkus.test.junit.QuarkusTest;
-import io.restassured.RestAssured;
import io.restassured.http.ContentType;
import org.apache.camel.quarkus.test.wiremock.MockServer;
import org.eclipse.microprofile.config.ConfigProvider;
import org.junit.jupiter.api.Test;
+import static io.restassured.RestAssured.given;
import static org.hamcrest.CoreMatchers.equalTo;
/**
@@ -47,21 +47,62 @@ class SlackTest {
@Test
public void testSlackProduceConsumeMessages() {
- final String message = "Hello Camel Quarkus Slack" +
(externalSlackEnabled() ? " " + UUID.randomUUID() : "");
- RestAssured.given()
+ // sending a message using Token
+ String message = "Hello Camel Quarkus Slack using Token" +
(externalSlackEnabled() ? " " + UUID.randomUUID() : "");
+ given()
.contentType(ContentType.TEXT)
.body(message)
- .post("/slack/message")
+ .post("/slack/message/token")
.then()
.statusCode(201);
- RestAssured.get("/slack/messages")
+ given()
+ .contentType(ContentType.JSON)
+ .get("/slack/messages")
.then()
.statusCode(200)
- .body(equalTo(message));
+ .body(equalTo(getExpectedResponse(message, 0)));
+
+ // sending a message using Webhook URL
+ message = "Hello Camel Quarkus Slack using Webhook URL" +
(externalSlackEnabled() ? " " + UUID.randomUUID() : "");
+
+ given()
+ .contentType(ContentType.TEXT)
+ .body(message)
+ .post("/slack/message/webhook")
+ .then()
+ .statusCode(201);
+
+ given()
+ .contentType(ContentType.JSON)
+ .get("/slack/messages")
+ .then()
+ .statusCode(200)
+ .body(equalTo(getExpectedResponse(message, 0)));
+
+ message = "Hello Camel Quarkus Slack using Blocks" +
(externalSlackEnabled() ? " " + UUID.randomUUID() : "");
+
+ // sending message with blocks
+ given()
+ .contentType(ContentType.TEXT)
+ .body(message)
+ .post("/slack/message/block")
+ .then()
+ .statusCode(201);
+
+ given()
+ .contentType(ContentType.JSON)
+ .get("/slack/messages")
+ .then()
+ .statusCode(200)
+ .body(equalTo(getExpectedResponse(message, 3)));
}
boolean externalSlackEnabled() {
return !ConfigProvider.getConfig().getOptionalValue("wiremock.url",
String.class).isPresent();
}
+
+ String getExpectedResponse(String message, int nbBlocks) {
+ return String.format("{\"text\":\"%s\",\"nbBlocks\":%s}", message,
nbBlocks);
+ }
}
diff --git
a/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTestResource.java
b/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTestResource.java
index ee51939..d00fbc3 100644
---
a/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTestResource.java
+++
b/integration-tests/slack/src/test/java/org/apache/camel/quarkus/component/slack/it/SlackTestResource.java
@@ -38,7 +38,7 @@ public class SlackTestResource extends
WireMockTestResourceLifecycleManager {
String webhookUrl = wiremockUrl != null ? wiremockUrl +
"/services/webhook"
: ConfigProvider.getConfig().getValue(SLACK_ENV_WEBHOOK_URL,
String.class);
return CollectionHelper.mergeMaps(properties, CollectionHelper.mapOf(
- "camel.component.slack.webhook-url", webhookUrl,
+ "slack.webhook.url", webhookUrl,
"slack.server-url", serverUrl,
"slack.token", envOrDefault(SLACK_ENV_TOKEN, "test-token")));
}
diff --git
a/integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
b/integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithBlocks.json
similarity index 80%
copy from
integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
copy to
integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithBlocks.json
index d811dac..c67c3d1 100644
---
a/integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
+++
b/integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithBlocks.json
@@ -5,7 +5,7 @@
"url" : "/api/chat.postMessage",
"method" : "POST",
"bodyPatterns" : [ {
- "equalTo" :
"channel=test-channel&text=Hello%20Camel%20Quarkus%20Slack&link_names=0&mrkdwn=1&unfurl_links=0&unfurl_media=0&reply_broadcast=0",
+ "equalTo" :
"channel=test-channel&text=Hello%20Camel%20Quarkus%20Slack%20using%20Blocks&link_names=0&mrkdwn=1&blocks=%5B%7B%22type%22%3A%22section%22%2C%22text%22%3A%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22Hello%20Camel%20Quarkus%20Slack%20using%20Blocks%22%7D%7D%2C%7B%22type%22%3A%22section%22%2C%22fields%22%3A%5B%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*Testing%20Camel%20Quarkus%20blocks*%22%7D%2C%7B%22type%22%3A%22mrkdwn%22%2C%22text%22%3A%22*You%20should%20be%20able
[...]
"caseInsensitive" : false
} ]
},
diff --git
a/integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
b/integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithToken.json
similarity index 95%
copy from
integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
copy to
integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithToken.json
index d811dac..2043c66 100644
---
a/integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
+++
b/integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithToken.json
@@ -5,7 +5,7 @@
"url" : "/api/chat.postMessage",
"method" : "POST",
"bodyPatterns" : [ {
- "equalTo" :
"channel=test-channel&text=Hello%20Camel%20Quarkus%20Slack&link_names=0&mrkdwn=1&unfurl_links=0&unfurl_media=0&reply_broadcast=0",
+ "equalTo" :
"channel=test-channel&text=Hello%20Camel%20Quarkus%20Slack%20using%20Token&link_names=0&mrkdwn=1&unfurl_links=0&unfurl_media=0&reply_broadcast=0",
"caseInsensitive" : false
} ]
},
diff --git
a/integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
b/integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithWebhook.json
similarity index 92%
rename from
integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
rename to
integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithWebhook.json
index d811dac..d969ea0 100644
---
a/integration-tests/slack/src/test/resources/mappings/slackChatPostMessage.json
+++
b/integration-tests/slack/src/test/resources/mappings/slackChatPostMessageWithWebhook.json
@@ -2,10 +2,10 @@
"id" : "c86380a0-2c6e-41ec-8183-467013109f96",
"name" : "chatpostmessage",
"request" : {
- "url" : "/api/chat.postMessage",
+ "url" : "/services/webhook",
"method" : "POST",
"bodyPatterns" : [ {
- "equalTo" :
"channel=test-channel&text=Hello%20Camel%20Quarkus%20Slack&link_names=0&mrkdwn=1&unfurl_links=0&unfurl_media=0&reply_broadcast=0",
+ "equalTo" : "{\"text\":\"Hello Camel Quarkus Slack using Webhook
URL\",\"channel\":\"test-channel\"}",
"caseInsensitive" : false
} ]
},
diff --git
a/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
b/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithBlocks.json
similarity index 56%
copy from
integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
copy to
integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithBlocks.json
index affefc2..e0ebd2b 100644
---
a/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
+++
b/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithBlocks.json
@@ -5,13 +5,13 @@
"url" : "/api/conversations.history",
"method" : "POST",
"bodyPatterns" : [ {
- "equalTo" : "channel=test-channel&limit=1&inclusive=0",
+ "equalTo" :
"channel=test-channel&limit=1&oldest=1615377778.002901&inclusive=0",
"caseInsensitive" : false
} ]
},
"response" : {
"status" : 200,
- "body" :
"{\"ok\":true,\"messages\":[{\"bot_id\":\"test\",\"type\":\"message\",\"text\":\"Hello
Camel Quarkus
Slack\",\"user\":\"test\",\"ts\":\"1615377778.002900\",\"team\":\"test\",\"bot_profile\":{\"id\":\"test\",\"deleted\":false,\"name\":\"API
Test\",\"updated\":1615375056,\"app_id\":\"test\",\"icons\":{\"image_36\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_36.png\",\"image_48\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_48.png\",
[...]
+ "body" :
"{\"ok\":true,\"messages\":[{\"bot_id\":\"test\",\"type\":\"message\",\"text\":\"Hello
Camel Quarkus Slack using
Blocks\",\"user\":\"test\",\"ts\":\"1615377778.002900\",\"team\":\"test\",\"bot_profile\":{\"id\":\"test\",\"deleted\":false,\"name\":\"API
Test\",\"updated\":1615375056,\"app_id\":\"test\",\"icons\":{\"image_36\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_36.png\",\"image_48\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/
[...]
"headers" : {
"date" : "Wed, 10 Mar 2021 12:03:00 GMT",
"server" : "Apache",
diff --git
a/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
b/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithToken.json
similarity index 70%
copy from
integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
copy to
integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithToken.json
index affefc2..5fc587d 100644
---
a/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
+++
b/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithToken.json
@@ -11,7 +11,7 @@
},
"response" : {
"status" : 200,
- "body" :
"{\"ok\":true,\"messages\":[{\"bot_id\":\"test\",\"type\":\"message\",\"text\":\"Hello
Camel Quarkus
Slack\",\"user\":\"test\",\"ts\":\"1615377778.002900\",\"team\":\"test\",\"bot_profile\":{\"id\":\"test\",\"deleted\":false,\"name\":\"API
Test\",\"updated\":1615375056,\"app_id\":\"test\",\"icons\":{\"image_36\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_36.png\",\"image_48\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_48.png\",
[...]
+ "body" :
"{\"ok\":true,\"messages\":[{\"bot_id\":\"test\",\"type\":\"message\",\"text\":\"Hello
Camel Quarkus Slack using
Token\",\"user\":\"test\",\"ts\":\"1615377778.002900\",\"team\":\"test\",\"bot_profile\":{\"id\":\"test\",\"deleted\":false,\"name\":\"API
Test\",\"updated\":1615375056,\"app_id\":\"test\",\"icons\":{\"image_36\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_36.png\",\"image_48\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/b
[...]
"headers" : {
"date" : "Wed, 10 Mar 2021 12:03:00 GMT",
"server" : "Apache",
diff --git
a/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
b/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithWebhook.json
similarity index 66%
rename from
integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
rename to
integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithWebhook.json
index affefc2..464f6fc 100644
---
a/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistory.json
+++
b/integration-tests/slack/src/test/resources/mappings/slackGetConversationHistoryWithWebhook.json
@@ -5,13 +5,13 @@
"url" : "/api/conversations.history",
"method" : "POST",
"bodyPatterns" : [ {
- "equalTo" : "channel=test-channel&limit=1&inclusive=0",
+ "equalTo" :
"channel=test-channel&limit=1&oldest=1615377778.002900&inclusive=0",
"caseInsensitive" : false
} ]
},
"response" : {
"status" : 200,
- "body" :
"{\"ok\":true,\"messages\":[{\"bot_id\":\"test\",\"type\":\"message\",\"text\":\"Hello
Camel Quarkus
Slack\",\"user\":\"test\",\"ts\":\"1615377778.002900\",\"team\":\"test\",\"bot_profile\":{\"id\":\"test\",\"deleted\":false,\"name\":\"API
Test\",\"updated\":1615375056,\"app_id\":\"test\",\"icons\":{\"image_36\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_36.png\",\"image_48\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_48.png\",
[...]
+ "body" :
"{\"ok\":true,\"messages\":[{\"bot_id\":\"test\",\"type\":\"message\",\"text\":\"Hello
Camel Quarkus Slack using Webhook
URL\",\"user\":\"test\",\"ts\":\"1615377778.002901\",\"team\":\"test\",\"bot_profile\":{\"id\":\"test\",\"deleted\":false,\"name\":\"API
Test\",\"updated\":1615375056,\"app_id\":\"test\",\"icons\":{\"image_36\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/app\\/bot_36.png\",\"image_48\":\"https:\\/\\/a.slack-edge.com\\/80588\\/img\\/plugins\\/a
[...]
"headers" : {
"date" : "Wed, 10 Mar 2021 12:03:00 GMT",
"server" : "Apache",