From 07af47e9ac44a2c89688f596bcf5251f8d0d7e5d Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 14 Aug 2026 18:49:18 -0700 Subject: [PATCH 1/5] feat(methods): add blocks.validate example Add a "blocks" method-family example mirroring the existing "chat" example: BlocksValidate.java validates a well-formed and a malformed Block Kit payload and prints each response, plus its own manifest and a "What's on call" README entry. blocks.validate is unauthenticated, so the example calls it without a token. Co-Authored-By: Claude --- methods/README.md | 4 +++ .../src/main/java/blocks/BlocksValidate.java | 32 +++++++++++++++++++ methods/src/main/java/blocks/manifest.json | 22 +++++++++++++ 3 files changed, 58 insertions(+) create mode 100644 methods/src/main/java/blocks/BlocksValidate.java create mode 100644 methods/src/main/java/blocks/manifest.json diff --git a/methods/README.md b/methods/README.md index 1bd5d8e..1f47e78 100644 --- a/methods/README.md +++ b/methods/README.md @@ -16,6 +16,10 @@ $ mvn compile exec:java -Dexec.mainClass=chat.ChatPostMessage # Make the reques ## What's on call +### blocks + +- **[blocks.validate](https://docs.slack.dev/reference/methods/blocks.validate)**: Validates blocks, messages, and views Block Kit JSON payloads. [Implementation](./src/main/java/blocks/BlocksValidate.java). + ### chat - **[chat.postMessage](https://docs.slack.dev/reference/methods/chat.postmessage)**: Sends a message to a channel. [Implementation](./src/main/java/chat/ChatPostMessage.java). diff --git a/methods/src/main/java/blocks/BlocksValidate.java b/methods/src/main/java/blocks/BlocksValidate.java new file mode 100644 index 0000000..81bbe7f --- /dev/null +++ b/methods/src/main/java/blocks/BlocksValidate.java @@ -0,0 +1,32 @@ +package blocks; + +import com.slack.api.Slack; +import com.slack.api.methods.MethodsClient; +import com.slack.api.methods.SlackApiException; +import com.slack.api.methods.request.blocks.BlocksValidateRequest; +import com.slack.api.methods.response.blocks.BlocksValidateResponse; +import java.io.IOException; + +public class BlocksValidate { + + public static void main(String[] args) throws IOException, SlackApiException { + // Initialize + MethodsClient methods = Slack.getInstance().methods(); + + // Call blocks.validate with a well-formed payload + String validBlocks = "[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"Hello\"}}]"; + BlocksValidateResponse valid = methods.blocksValidate( + BlocksValidateRequest.builder().blocks(validBlocks).build()); + + // Inspect the response + System.out.println(valid); + + // Call blocks.validate with a malformed payload + String invalidBlocks = "[{\"type\":\"section\"}]"; + BlocksValidateResponse invalid = methods.blocksValidate( + BlocksValidateRequest.builder().blocks(invalidBlocks).build()); + + // Inspect the response + System.out.println(invalid); + } +} diff --git a/methods/src/main/java/blocks/manifest.json b/methods/src/main/java/blocks/manifest.json new file mode 100644 index 0000000..0c294dd --- /dev/null +++ b/methods/src/main/java/blocks/manifest.json @@ -0,0 +1,22 @@ +{ + "display_information": { + "name": "Slack API Methods", + "description": "Example implementations to call \"blocks\" methods" + }, + "features": { + "bot_user": { + "display_name": "Slack API Methods", + "always_online": true + } + }, + "oauth_config": { + "scopes": { + "bot": [] + } + }, + "settings": { + "org_deploy_enabled": true, + "socket_mode_enabled": false, + "token_rotation_enabled": false + } +} From 42dd5a4e8841a28446653b65763847e19ab37507 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Fri, 14 Aug 2026 19:01:56 -0700 Subject: [PATCH 2/5] refactor(methods): use a single blocks.validate call in the example Match the chat example's one-call shape: build one request with a single well-formed blocks payload and print the response, rather than demonstrating multiple calls. Co-Authored-By: Claude --- .../src/main/java/blocks/BlocksValidate.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/methods/src/main/java/blocks/BlocksValidate.java b/methods/src/main/java/blocks/BlocksValidate.java index 81bbe7f..e7d4f03 100644 --- a/methods/src/main/java/blocks/BlocksValidate.java +++ b/methods/src/main/java/blocks/BlocksValidate.java @@ -13,20 +13,13 @@ public static void main(String[] args) throws IOException, SlackApiException { // Initialize MethodsClient methods = Slack.getInstance().methods(); - // Call blocks.validate with a well-formed payload - String validBlocks = "[{\"type\":\"section\",\"text\":{\"type\":\"mrkdwn\",\"text\":\"Hello\"}}]"; - BlocksValidateResponse valid = methods.blocksValidate( - BlocksValidateRequest.builder().blocks(validBlocks).build()); + // Call the blocks.validate method + String blocks = "[{\"type\": \"section\", \"text\": {\"type\": \"plain_text\", \"text\": \"Hello world\"}}]"; + BlocksValidateRequest request = + BlocksValidateRequest.builder().blocks(blocks).build(); + BlocksValidateResponse response = methods.blocksValidate(request); // Inspect the response - System.out.println(valid); - - // Call blocks.validate with a malformed payload - String invalidBlocks = "[{\"type\":\"section\"}]"; - BlocksValidateResponse invalid = methods.blocksValidate( - BlocksValidateRequest.builder().blocks(invalidBlocks).build()); - - // Inspect the response - System.out.println(invalid); + System.out.println(response); } } From d68d8c77562313d88984cb16542be19274683588 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 25 Aug 2026 16:05:55 -0700 Subject: [PATCH 3/5] refactor(methods): build typed blocks in the blocks.validate example Use the SDK's Block Kit builders (Blocks.section / plainText) with the typed BlocksValidateRequest.blocks field instead of a raw JSON string, showing the idiomatic way to validate blocks you built with the SDK. Co-Authored-By: Claude --- methods/src/main/java/blocks/BlocksValidate.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/methods/src/main/java/blocks/BlocksValidate.java b/methods/src/main/java/blocks/BlocksValidate.java index e7d4f03..98e2bd2 100644 --- a/methods/src/main/java/blocks/BlocksValidate.java +++ b/methods/src/main/java/blocks/BlocksValidate.java @@ -1,22 +1,26 @@ package blocks; +import static com.slack.api.model.block.Blocks.section; +import static com.slack.api.model.block.composition.BlockCompositions.plainText; + import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; import com.slack.api.methods.request.blocks.BlocksValidateRequest; import com.slack.api.methods.response.blocks.BlocksValidateResponse; import java.io.IOException; +import java.util.Arrays; public class BlocksValidate { public static void main(String[] args) throws IOException, SlackApiException { - // Initialize + // Initialize (blocks.validate is unauthenticated, so no token is needed) MethodsClient methods = Slack.getInstance().methods(); - // Call the blocks.validate method - String blocks = "[{\"type\": \"section\", \"text\": {\"type\": \"plain_text\", \"text\": \"Hello world\"}}]"; - BlocksValidateRequest request = - BlocksValidateRequest.builder().blocks(blocks).build(); + // Build blocks with the SDK's Block Kit builders and validate them + BlocksValidateRequest request = BlocksValidateRequest.builder() + .blocks(Arrays.asList(section(s -> s.text(plainText("Hello world"))))) + .build(); BlocksValidateResponse response = methods.blocksValidate(request); // Inspect the response From 7243acde7876c12414c758cddeb7c5c362525117 Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 25 Aug 2026 16:06:48 -0700 Subject: [PATCH 4/5] style(methods): match chat.postMessage comment style in blocks.validate example Co-Authored-By: Claude --- methods/src/main/java/blocks/BlocksValidate.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/methods/src/main/java/blocks/BlocksValidate.java b/methods/src/main/java/blocks/BlocksValidate.java index 98e2bd2..b81c61a 100644 --- a/methods/src/main/java/blocks/BlocksValidate.java +++ b/methods/src/main/java/blocks/BlocksValidate.java @@ -14,10 +14,10 @@ public class BlocksValidate { public static void main(String[] args) throws IOException, SlackApiException { - // Initialize (blocks.validate is unauthenticated, so no token is needed) + // Initialize MethodsClient methods = Slack.getInstance().methods(); - // Build blocks with the SDK's Block Kit builders and validate them + // Call the blocks.validate method BlocksValidateRequest request = BlocksValidateRequest.builder() .blocks(Arrays.asList(section(s -> s.text(plainText("Hello world"))))) .build(); From 3333350e57923324c84ec3b18da4e41ec954d95c Mon Sep 17 00:00:00 2001 From: Eden Zimbelman Date: Tue, 25 Aug 2026 16:15:30 -0700 Subject: [PATCH 5/5] chore(methods): add chat:write scope to the blocks example app blocks.validate itself is unauthenticated and the example calls it without a token, but a bot scope lets the shared example app install via the README recipe, matching the chat example's manifest. Co-Authored-By: Claude --- methods/src/main/java/blocks/manifest.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/methods/src/main/java/blocks/manifest.json b/methods/src/main/java/blocks/manifest.json index 0c294dd..1f9aa3c 100644 --- a/methods/src/main/java/blocks/manifest.json +++ b/methods/src/main/java/blocks/manifest.json @@ -11,7 +11,7 @@ }, "oauth_config": { "scopes": { - "bot": [] + "bot": ["chat:write"] } }, "settings": {