chat-sdk
Chat SDK(`chat` npmパッケージ)を使用して、複数プラットフォーム対応のチャットボットを構築できます。開発者が(1)Slack、Teams、Google Chat、Discord、GitHub、Linearのボットを構築したい、(2)Chat SDKを使ってメンション、メッセージ、リアクション、スラッシュコマンド、カード、モーダル、ストリーミングを処理したい、(3)チャットプラットフォーム用のWebhookハンドラーをセットアップしたい、(4)インタラクティブカードやAIレスポンスのストリーミングをチャットプラットフォームに送信したい、(5)新しいチャットプラットフォーム用のカスタムアダプターを構築したい場合に活用します。「chat sdk」「chat bot」「slack bot」「teams bot」「discord bot」「@chat-adapter」「custom adapter」「build adapter」、複数のチャットプラットフォームで動作するボット構築に関連するキーワードで検出されます。
description の原文を見る
Build multi-platform chat bots with Chat SDK (`chat` npm package). Use when developers want to (1) Build a Slack, Teams, Google Chat, Discord, GitHub, or Linear bot, (2) Use the Chat SDK to handle mentions, messages, reactions, slash commands, cards, modals, or streaming, (3) Set up webhook handlers for chat platforms, (4) Send interactive cards or stream AI responses to chat platforms, (5) Build a custom adapter for a new chat platform. Triggers on "chat sdk", "chat bot", "slack bot", "teams bot", "discord bot", "@chat-adapter", "custom adapter", "build adapter", building bots that work across multiple chat platforms.
SKILL.md 本文
Chat SDK
Slack、Teams、Google Chat、Discord、GitHub、Linear 全体でチャットボットを構築するための統一 TypeScript SDK です。ボットロジックを一度書いて、すべてにデプロイできます。
重要: バンドルされたドキュメントを必ず読んでください
chat パッケージには node_modules/chat/docs/ と TypeScript ソースタイプに完全なドキュメントが付属しています。コードを書く前に必ずこれらを読んでください:
node_modules/chat/docs/ # 完全なドキュメント (MDX ファイル)
node_modules/chat/dist/ # ビルド済みタイプ (.d.ts ファイル)
タスクに応じて読むべき重要なドキュメント:
docs/getting-started.mdx— セットアップガイドdocs/usage.mdx— イベントハンドラー、スレッド、メッセージ、チャネルdocs/streaming.mdx— AI SDK を使用した AI ストリーミングdocs/cards.mdx— JSX インタラクティブカードdocs/actions.mdx— ボタン/ドロップダウンハンドラーdocs/modals.mdx— フォームダイアログ (Slack のみ)docs/adapters.mdx— プラットフォーム固有のアダプターセットアップdocs/state.mdx— ステートアダプター設定 (Redis、ioredis、PostgreSQL、メモリ)
また、node_modules/chat/dist/ の TypeScript タイプを読んで、完全な API サーフェスを理解してください。
クイックスタート
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! }),
});
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}`);
});
コアコンセプト
- Chat — メインエントリーポイント。アダプターを調整し、イベントをルーティングします
- Adapters — プラットフォーム固有 (Slack、Teams、GChat、Discord、GitHub、Linear)
- State — プラガブルな永続化 (本番環境では Redis または PostgreSQL、開発環境ではメモリ)
- Thread —
post()、schedule()、subscribe()、startTyping()を備えた会話スレッド - Message —
text、formatted(mdast AST)、rawを含む正規化フォーマット - Channel — スレッドのコンテナ。リストと投稿をサポート
イベントハンドラー
| ハンドラー | トリガー |
|---|---|
onNewMention | ボットが未購読スレッドで @メンションされた |
onSubscribedMessage | 購読スレッド内のメッセージ |
onNewMessage(regex) | 未購読スレッド内のパターンにマッチするメッセージ |
onSlashCommand("/cmd") | スラッシュコマンド呼び出し |
onReaction(emojis) | 絵文字リアクションの追加/削除 |
onAction(actionId) | ボタンクリックとドロップダウン選択 |
onAssistantThreadStarted | Slack Assistants API スレッド開始 |
onAppHomeOpened | Slack App Home タブ開始 |
ストリーミング
任意の AsyncIterable<string> を thread.post() に渡します。AI SDK の textStream で動作します:
import { ToolLoopAgent } from "ai";
const agent = new ToolLoopAgent({ model: "anthropic/claude-4.5-sonnet" });
bot.onNewMention(async (thread, message) => {
const result = await agent.stream({ prompt: message.text });
await thread.post(result.textStream);
});
カード (JSX)
tsconfig で jsxImportSource: "chat" を設定してください。コンポーネント: Card、CardText、Button、Actions、Fields、Field、Select、SelectOption、Image、Divider、LinkButton、Section、RadioSelect。
await thread.post(
<Card title="Order #1234">
<CardText>Your order has been received!</CardText>
<Actions>
<Button id="approve" style="primary">Approve</Button>
<Button id="reject" style="danger">Reject</Button>
</Actions>
</Card>
);
パッケージ
| パッケージ | 用途 |
|---|---|
chat | コア SDK |
@chat-adapter/slack | Slack |
@chat-adapter/teams | Microsoft Teams |
@chat-adapter/gchat | Google Chat |
@chat-adapter/discord | Discord |
@chat-adapter/github | GitHub Issues |
@chat-adapter/linear | Linear Issues |
@chat-adapter/state-redis | Redis ステート (本番環境) |
@chat-adapter/state-ioredis | ioredis ステート (代替) |
@chat-adapter/state-pg | PostgreSQL ステート (本番環境) |
@chat-adapter/state-memory | インメモリステート (開発環境) |
Changesets (リリースフロー)
このモノレポでは Changesets を使用してバージョン管理とチェンジログを行います。パッケージの動作を変更する PR にはすべて changeset を含める必要があります。
pnpm changeset
# → 影響を受けるパッケージを選択 (例: @chat-adapter/slack, chat)
# → バージョンタイプを選択: patch (修正)、minor (機能)、major (破壊的変更)
# → CHANGELOG の簡潔なサマリーを記述
これにより .changeset/ にファイルが作成されます — PR でコミットしてください。main にマージされると、Changesets GitHub Action が "Version Packages" PR を開きます。その PR をマージすると npm に公開されます。
カスタムアダプターの構築
コミュニティまたはベンダーアダプターを作成するには、chat から Adapter インターフェースを実装し、以下を読んでください:
docs/contributing/building.mdx— 完全なステップバイステップガイド (Matrix アダプターを例として使用)docs/contributing/testing.mdx— アダプターのテストdocs/contributing/publishing.mdx— npm 命名規則と公開
アダプターは handleWebhook、parseMessage、postMessage、editMessage、deleteMessage、スレッド ID のエンコード/デコード、および FormatConverter (chat から BaseFormatConverter を拡張) を実装する必要があります。エラークラスとメッセージユーティリティには @chat-adapter/shared を使用してください。
Webhook セットアップ
各アダプターは bot.webhooks.{platform} 経由で webhook ハンドラーを公開します。これらを HTTP フレームワークのルート (Next.js API ルート、Hono、Express など) に接続してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- Niapya
- リポジトリ
- Niapya/clawless
- ライセンス
- MIT
- 最終更新
- 2026/4/11
Source: https://github.com/Niapya/clawless / ライセンス: MIT