chat-sdk
Slack・Teams・Google Chat・Discord・Telegram・GitHub・Linear・WhatsApp など複数プラットフォームに対応したチャットボットを、Chat SDK(`chat` npm パッケージ)を使って構築します。メンションやDM・スレッド購読・リアクション・スラッシュコマンド・カード・モーダル・ファイル送受信・AIストリーミングの処理、Webhookルートやマルチアダプター構成のセットアップ、リッチカードやAIレスポンスのストリーム配信、カスタムアダプターや状態管理アダプターの実装など、チャットボット開発全般で活用できます。
description の原文を見る
Build multi-platform chat bots with Chat SDK (`chat` npm package). Use when developers want to build a Slack, Teams, Google Chat, Discord, Telegram, GitHub, Linear, or WhatsApp bot, handle mentions, direct messages, subscribed threads, reactions, slash commands, cards, modals, files, or AI streaming, set up webhook routes or multi-adapter bots, send rich cards or streamed AI responses to chat platforms, or build a custom adapter or state adapter.
SKILL.md 本文
Chat SDK
Slack、Teams、Google Chat、Discord、Telegram、GitHub、Linear、WhatsApp 全体でチャットボットを構築するための統合 TypeScript SDK。ボットロジックを一度書いて、すべてのプラットフォームにデプロイしてください。
公開ソースから始める
Chat SDK がユーザープロジェクトにインストールされると、node_modules に含まれる公開ファイルを確認します:
node_modules/chat/docs/ # バンドルドキュメント
node_modules/chat/dist/index.d.ts # コア API タイプ
node_modules/chat/dist/jsx-runtime.d.ts # JSX ランタイムタイプ
node_modules/chat/docs/contributing/ # アダプタオーサリングドキュメント
node_modules/chat/docs/guides/ # フレームワーク/プラットフォームガイド
以下のパスの1つが存在しない場合、そのパッケージはまだプロジェクトにインストールされていません。
コードを書く前に以下をお読みください:
node_modules/chat/docs/getting-started.mdx— インストールとセットアップnode_modules/chat/docs/usage.mdx—Chat設定とライフサイクルnode_modules/chat/docs/handling-events.mdx— イベントルーティングとハンドラnode_modules/chat/docs/threads-messages-channels.mdx— スレッド/チャネル/メッセージモデルnode_modules/chat/docs/posting-messages.mdx— 投稿、編集、削除、スケジュールnode_modules/chat/docs/streaming.mdx— AI SDK 統合とストリーミングセマンティクスnode_modules/chat/docs/cards.mdx— JSX カードnode_modules/chat/docs/actions.mdx— ボタン/選択インタラクションnode_modules/chat/docs/modals.mdx— モーダル送信/閉じるフローnode_modules/chat/docs/slash-commands.mdx— スラッシュコマンドルーティングnode_modules/chat/docs/direct-messages.mdx— DM 動作とopenDM()node_modules/chat/docs/files.mdx— 添付ファイル/アップロードnode_modules/chat/docs/state.mdx— 永続化、ロック、重複排除node_modules/chat/docs/adapters.mdx— クロスプラットフォーム機能マトリックスnode_modules/chat/docs/api/chat.mdx— 正確なChatAPInode_modules/chat/docs/api/thread.mdx— 正確なThreadAPInode_modules/chat/docs/api/message.mdx— 正確なMessageAPInode_modules/chat/docs/api/modals.mdx— モーダル要素とイベント詳細
使用している特定のアダプタまたはステートパッケージについては、node_modules にインストールされたそのパッケージの dist/index.d.ts エクスポート サーフェスを確認してください。
クイックスタート
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(),
dedupeTtlMs: 600_000,
});
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、Google Chat、Discord、Telegram、GitHub、Linear、WhatsApp 用のプラットフォーム固有統合
- ステートアダプタ — 購読、ロック、重複排除、スレッドステートの永続化
- Thread —
post()、stream()、subscribe()、setState()、startTyping()付きの会話コンテキスト - Message —
text、formatted、添付ファイル、作者情報、プラットフォームrawを備えた正規化されたコンテンツ - Channel — スレッドとトップレベルの投稿用コンテナ
イベントハンドラ
| ハンドラ | トリガー |
|---|---|
onNewMention | 未購読スレッドでボットが @メンション |
onDirectMessage | 未購読 DM スレッドで新規 DM |
onSubscribedMessage | 購読スレッド内のメッセージ |
onNewMessage(regex) | 未購読スレッド内の正規表現マッチ |
onReaction(emojis?) | 絵文字追加または削除 |
onAction(actionIds?) | ボタンクリックと選択/ラジオインタラクション |
onModalSubmit(callbackId?) | モーダルフォーム送信 |
onModalClose(callbackId?) | モーダル閉じる/キャンセル |
onSlashCommand(commands?) | スラッシュコマンド呼び出し |
onAssistantThreadStarted | Slack アシスタントスレッド開始 |
onAssistantContextChanged | Slack アシスタントコンテキスト変更 |
onAppHomeOpened | Slack App Home 開始 |
onMemberJoinedChannel | Slack メンバーチャネル参加イベント |
ハンドラを接続する前に node_modules/chat/docs/handling-events.mdx、node_modules/chat/docs/actions.mdx、node_modules/chat/docs/modals.mdx、node_modules/chat/docs/slash-commands.mdx をお読みください。onDirectMessage の動作は node_modules/chat/docs/direct-messages.mdx に記載されています。
ストリーミング
任意の AsyncIterable<string> を thread.post() に渡します。AI SDK の場合、ステップ境界を保持するために、利用可能な場合は result.textStream より result.fullStream を優先してください。
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.fullStream);
});
主要な詳細:
streamingUpdateIntervalMsは投稿+編集フォールバックのキャデンスを制御fallbackStreamingPlaceholderTextはデフォルト"..."。無効にするにはnullを設定- 構造化
StreamChunkサポートは Slack のみ。他のアダプタはテキスト以外のチャンクを無視
カードとモーダル (JSX)
tsconfig.json で jsxImportSource: "chat" を設定します。
カードコンポーネント:
Card、CardText、Section、Fields、Field、Button、CardLink、LinkButton、Actions、Select、SelectOption、RadioSelect、Table、Image、Divider
モーダルコンポーネント:
Modal、TextInput、Select、SelectOption、RadioSelect
Button と Modal は callbackUrl プロップを受け入れます。トリガーされると、SDK は onAction / onModalSubmit ハンドラを発火することに加えて、そのアクションペイロードをそのURLに POST します。これを webhook ベースのワークフローフロー用に使用してください。node_modules/chat/docs/actions.mdx と node_modules/chat/docs/modals.mdx を参照してください。
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>
);
アダプタインベントリ
公式プラットフォームアダプタ
| プラットフォーム | パッケージ | ファクトリ |
|---|---|---|
| Slack | @chat-adapter/slack | createSlackAdapter |
| Microsoft Teams | @chat-adapter/teams | createTeamsAdapter |
| Google Chat | @chat-adapter/gchat | createGoogleChatAdapter |
| Discord | @chat-adapter/discord | createDiscordAdapter |
| GitHub | @chat-adapter/github | createGitHubAdapter |
| Linear | @chat-adapter/linear | createLinearAdapter |
| Telegram | @chat-adapter/telegram | createTelegramAdapter |
| WhatsApp Business Cloud | @chat-adapter/whatsapp | createWhatsAppAdapter |
公式ステートアダプタ
| ステートバックエンド | パッケージ | ファクトリ |
|---|---|---|
| Redis | @chat-adapter/state-redis | createRedisState |
| ioredis | @chat-adapter/state-ioredis | createIoRedisState |
| PostgreSQL | @chat-adapter/state-pg | createPostgresState |
| Memory | @chat-adapter/state-memory | createMemoryState |
コミュニティアダプタ
chat-state-cloudflare-do@beeper/chat-adapter-matrixchat-adapter-imessage@bitbasti/chat-adapter-webex@resend/chat-sdk-adapter@zernio/chat-sdk-adapterchat-adapter-baileys@liveblocks/chat-sdk-adapterchat-adapter-sendbluechat-adapter-zalochat-adapter-mattermost
近日公開予定のプラットフォーム
- Signal
- X
- Messenger
カスタムアダプタの構築
最初に以下の公開ドキュメントをお読みください:
node_modules/chat/docs/contributing/building.mdxnode_modules/chat/docs/contributing/testing.mdxnode_modules/chat/docs/contributing/publishing.mdx
また確認してください:
node_modules/chat/dist/index.d.ts—Adapterおよび関連インターフェースnode_modules/@chat-adapter/shared/dist/index.d.ts— 共有エラーとユーティリティ- インストール済み公式アダプタ
dist/index.d.tsファイル — 設定と API の参考実装
カスタムアダプタはリクエスト検証、webhook 解析、メッセージ/スレッド/チャネル操作、ID エンコーディング/デコーディング、フォーマットコンバータが必要です。chat から BaseFormatConverter を使用し、@chat-adapter/shared から共有ユーティリティを使用してください。
Webhook セットアップ
登録された各アダプタは bot.webhooks.<name> を公開します。それらを HTTP フレームワークルートに直接接続してください。フレームワーク固有のルートパターンについては node_modules/chat/docs/guides/slack-nextjs.mdx と node_modules/chat/docs/guides/discord-nuxt.mdx を参照してください。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- vercel
- リポジトリ
- vercel/chat
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/vercel/chat / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。