Files
josh 67c1794a54 docs(chat): clarify direct message routing precedence (#491)
## summary

clarifies that registered `onDirectMessage` handlers take precedence for
incoming DM messages before subscribed-message, mention, and pattern
routing

updates the direct messages, event handling, thread subscription, and
API docs so they match the current runtime behavior

adds `onDirectMessage` to the Chat API docs

fixes #432
2026-05-12 15:14:57 +10:00
..
2026-03-05 16:13:33 -08:00

chat

npm version npm downloads

Core SDK for building multi-platform chat bots. Provides the Chat class, event handlers, JSX card runtime, emoji helpers, and type-safe message formatting.

Installation

npm install chat

Usage

import { Chat } from "chat";
import { createSlackAdapter } from "@chat-adapter/slack";
import { createRedisState } from "@chat-adapter/state-redis";

const bot = new Chat({
  userName: "mybot",
  adapters: {
    slack: createSlackAdapter({
      botToken: process.env.SLACK_BOT_TOKEN!,
      signingSecret: process.env.SLACK_SIGNING_SECRET!,
    }),
  },
  state: createRedisState({ url: process.env.REDIS_URL! }),
  dedupeTtlMs: 600_000, // 10 minutes (default: 5 min)
});

bot.onNewMention(async (thread) => {
  await thread.subscribe();
  await thread.post("Hello! I'm listening to this thread.");
});

bot.onSubscribedMessage(async (thread, message) => {
  await thread.post(`You said: ${message.text}`);
});

Tip: PostgreSQL and ioredis adapters are also available for production. See State Adapters for all options.

Configuration

Option Type Default Description
userName string required Default bot username across all adapters
adapters Record<string, Adapter> required Map of adapter name to adapter instance
state StateAdapter required State adapter for subscriptions, locking, and dedup
logger Logger | LogLevel "info" Logger instance or log level ("silent" to disable)
streamingUpdateIntervalMs number 500 Update interval for fallback streaming (post + edit) in ms
dedupeTtlMs number 300000 TTL for message deduplication entries in ms. Increase if webhook cold starts cause platform retries (e.g., Slack's http_timeout retry) that arrive after the default window

AI coding agent support

If you use an AI coding agent like Claude Code, you can teach it about Chat SDK:

npx skills add vercel/chat

Documentation

Full documentation is available at chat-sdk.dev/docs.

  • Usage — event handlers, threads, messages, channels
  • Chat API — full Chat class reference
  • Cards — JSX-based interactive cards
  • Streaming — AI SDK integration
  • Emoji — cross-platform emoji helpers

License

MIT