Unified chat abstraction for Slack, Teams, Google Chat, and Discord
npm install chatA unified SDK for building chat bots across Slack, Microsoft Teams, and Google Chat.
``bash`
npm install chat
`typescript
import { Chat, emoji } 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! }),
});
// Handle @mentions
bot.onNewMention(async (thread) => {
await thread.subscribe();
await thread.post(${emoji.wave} Hello! I'm listening.);
});
// Handle follow-up messages
bot.onSubscribedMessage(async (thread, message) => {
await thread.post(You said: ${message.text});``
});
| Package | Platform |
|---------|----------|
| @chat-adapter/slack | Slack |
| @chat-adapter/teams | Microsoft Teams |
| @chat-adapter/gchat | Google Chat |
| Package | Backend |
|---------|---------|
| @chat-adapter/state-redis | Redis (production) |
| @chat-adapter/state-ioredis | Redis via ioredis |
| @chat-adapter/state-memory | In-memory (dev only) |
- Multi-platform: Write once, deploy to Slack, Teams, and Google Chat
- Thread subscriptions: Follow conversations after @mentions
- Rich cards: JSX-based cards that convert to Block Kit, Adaptive Cards, etc.
- Action callbacks: Handle button clicks across platforms
- Reactions: Type-safe emoji with cross-platform normalization
- File uploads: Send files with messages
- Direct messages: Initiate DMs programmatically
- Serverless-ready: Pluggable state backends for distributed deployments
See the main repository for full documentation.
MIT