Vercel — AI · · 1 min read

Build custom Slack runtimes

Mirrored from Vercel — AI for archival readability. Support the source by reading on the original site.

1 min read

Jun 2, 2026

Chat SDK now ships the Slack adapter's primitives as standalone imports for apps that already handle their own routing, state, or workflow execution.

Use only what you need:

  • Request verification and payload parsing (@chat-adapter/slack/webhook)

  • Markdown formatting (@chat-adapter/slack/format)

  • Fetch-based Web API calls (@chat-adapter/slack/api)

  • Block Kit conversion (@chat-adapter/slack/blocks)

Each subpath skips the full Chat runtime, so your imports stay clean.

lib/bot.ts
import { readSlackWebhook } from "@chat-adapter/slack/webhook";
import { postSlackMessage } from "@chat-adapter/slack/api";
export async function POST(request: Request) {
const payload = await readSlackWebhook(request, {
signingSecret: process.env.SLACK_SIGNING_SECRET!,
});
if (payload.kind === "app_mention") {
await postSlackMessage({
channel: payload.continuation.channelId,
markdownText: `received: ${payload.text}`,
token: process.env.SLACK_BOT_TOKEN!,
});
}
return new Response(null, { status: 200 });
}

Verifying a webhook and posting a reply with the low-level subpaths.

To get started, read the Slack primitives documentation.

The Complete Guide to Chat SDK

Learn how Chat SDK works end-to-end: from core concepts to building your first bot to deploying it across Slack, Teams, and more.

Read the guide

Discussion (0)

Sign in to join the discussion. Free account, 30 seconds — email code or GitHub.

Sign in →

No comments yet. Sign in and be the first to say something.

More from Vercel — AI