UNPKG

chat

Version:

Unified chat abstraction for Slack, Teams, Google Chat, and Discord

95 lines (74 loc) 4.77 kB
--- title: Introduction description: A unified SDK for building chat bots across Slack, Microsoft Teams, Google Chat, Discord, Telegram, and more. type: overview --- Chat SDK is a TypeScript library for building chat bots that work across multiple platforms with a single codebase. Write your bot logic once and deploy it to Slack, Microsoft Teams, Google Chat, Discord, Telegram, GitHub, Linear, WhatsApp, and Messenger. ## Why Chat SDK? Building a chat bot that works across multiple platforms typically means maintaining separate codebases, learning different APIs, and handling platform-specific quirks individually. Chat SDK abstracts these differences behind a unified interface. - **Single codebase** for all platforms - **Type-safe** [adapters](/adapters) and event handlers with full TypeScript support - **Event-driven** architecture with handlers for mentions, messages, reactions, button clicks, slash commands, and modals - **Thread subscriptions** for multi-turn conversations - **Rich UI** with JSX cards, buttons, and modals that render natively on each platform - **AI streaming** with first-class support for streaming LLM responses - **Serverless-ready** with distributed state via Redis and message deduplication ## How it works Chat SDK has three core concepts: 1. **Chat** — the main entry point that coordinates [adapters](/adapters) and routes events to your handlers 2. **[Adapters](/adapters)** — platform-specific implementations that handle webhook parsing, message formatting, and API calls 3. **State** — a pluggable persistence layer for thread subscriptions and distributed locking ```typescript title="lib/bot.ts" lineNumbers 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(), }, state: createRedisState(), }); bot.onNewMention(async (thread) => { await thread.subscribe(); await thread.post("Hello! I'm listening to this thread."); }); ``` Each adapter factory auto-detects credentials from environment variables (`SLACK_BOT_TOKEN`, `SLACK_SIGNING_SECRET`, `REDIS_URL`, etc.), so you can get started with zero config. Pass explicit values to override. ## Supported platforms | Platform | Package | Mentions | Reactions | Cards | Modals | Streaming | DMs | |----------|---------|----------|-----------|-------|--------|-----------|-----| | Slack | `@chat-adapter/slack` | Yes | Yes | Yes | Yes | Native | Yes | | Microsoft Teams | `@chat-adapter/teams` | Yes | Read-only | Yes | Yes | Native (DMs) / Buffered | Yes | | Google Chat | `@chat-adapter/gchat` | Yes | Yes | Yes | No | Post+Edit | Yes | | Discord | `@chat-adapter/discord` | Yes | Yes | Yes | No | Post+Edit | Yes | | Telegram | `@chat-adapter/telegram` | Yes | Yes | Partial | No | Post+Edit | Yes | | GitHub | `@chat-adapter/github` | Yes | Yes | No | No | Buffered | No | | Linear | `@chat-adapter/linear` | Yes | Yes | No | No | Agent sessions / Post+Edit | No | | WhatsApp | `@chat-adapter/whatsapp` | N/A | Yes | Partial | No | Buffered | Yes | | Messenger | `@chat-adapter/messenger` | Yes | Receive-only | Partial | No | Buffered | Yes | ## AI coding agent support If you use an AI coding agent like [Claude Code](https://docs.anthropic.com/en/docs/claude-code), you can teach it about Chat SDK by installing the skill: ```bash npx skills add vercel/chat ``` This gives your agent access to Chat SDK's documentation, patterns, and best practices so it can help you build bots more effectively. ## Packages The SDK is distributed as a set of packages you install based on your needs: | Package | Description | |---------|-------------| | `chat` | Core SDK with `Chat` class, types, JSX runtime, and utilities | | `chat/ai` | [AI utilities](/docs/ai) — [`createChatTools`](/docs/ai/ai-sdk-tools) for agent operations and [`toAiMessages`](/docs/ai/to-ai-messages) for converting chat history into AI SDK prompts | | `@chat-adapter/slack` | Slack adapter | | `@chat-adapter/teams` | Microsoft Teams adapter | | `@chat-adapter/gchat` | Google Chat adapter | | `@chat-adapter/discord` | Discord adapter | | `@chat-adapter/telegram` | Telegram adapter | | `@chat-adapter/github` | GitHub Issues adapter | | `@chat-adapter/linear` | Linear Issues adapter | | `@chat-adapter/whatsapp` | WhatsApp Business adapter | | `@chat-adapter/messenger` | Facebook Messenger adapter | | `@chat-adapter/state-redis` | Redis state adapter (production) | | `@chat-adapter/state-ioredis` | ioredis state adapter (alternative) | | `@chat-adapter/state-pg` | PostgreSQL state adapter (production) | | `@chat-adapter/state-memory` | In-memory state adapter (development) |