mcpField
C
chat-sdk

chat-sdk

github.com/lobehub開発83.6k201 回インストール今日更新
リポジトリ

chat-sdk について

複数のチャットプラットフォーム向けボットを構築する TypeScript SDK です。プラットフォームアダプターでメッセージ、イベント、状態を扱い、スレッド返信やインタラクティブカード、ストリーミング出力にも対応します。

主な機能

  1. 01複数のチャットプラットフォームに対応
  2. 02メッセージとイベントを共通処理
  3. 03スレッドとチャンネルの操作
  4. 04状態ストレージを差し替え可能
  5. 05JSX のインタラクティブカード
  6. 06非同期ストリームをスレッドに投稿

活用シーン

  1. 01複数のチャット環境への共通ボットロジックの展開
  2. 02メンション、コマンド、メッセージへの応答
  3. 03ボタンやフォーム付きカードの送信
  4. 04AI のストリーミング出力を会話スレッドに投稿

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/lobehub/lobehub --skill chat-sdk

インストール後、Claude Code で/chat-sdkを入力して読み込まれたか確認します。

詳細

チャット SDK

Slack、Teams、Google Chat、Discord、GitHub、Linear 向けのチャットボットを構築するための、統一された TypeScript SDK です。ボットのロジックを一度書けば、あらゆるプラットフォームにデプロイできます。

重要:同梱ドキュメントを読む

chat パッケージには、node_modules/chat/docs/ に完全なドキュメントと TypeScript ソース型が含まれています。コードを書く前に、必ずこれらを読んでください:

node_modules/chat/docs/           # Full documentation (MDX files)
node_modules/chat/dist/           # Built types (.d.ts files)

タスクに応じて読むべき主なドキュメント:

  • 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/platform-adapters.mdx — アダプターの概要とプラットフォーム固有のセットアップ
  • docs/state-adapters.mdx — 状態アダプターの設定(Redis、ioredis、memory)

完全な API の範囲を理解するために、node_modules/chat/dist/ にある TypeScript 型も読んでください。

クイックスタート

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 — 主なエントリーポイントで、アダプターを調整し、イベントをルーティングします
  • アダプター — プラットフォーム固有のアダプター(Slack、Teams、GChat、Discord、GitHub、Linear)
  • 状態 — 差し替え可能な永続化機能(本番環境では Redis、開発環境では memory)
  • スレッド — post()、subscribe()、startTyping() を備えた会話スレッド
  • メッセージ — text、formatted(mdast AST)、raw を含む正規化された形式
  • チャンネル — スレッドのコンテナーで、一覧表示と投稿に対応します

イベントハンドラー

ハンドラートリガー
onNewMention購読されていないスレッドでボットが @ メンションされたとき
onSubscribedMessage購読中のスレッド内のすべてのメッセージ
onNewMessage(regex)購読されていないスレッド内でパターンに一致するメッセージ
onSlashCommand("/cmd")スラッシュコマンドの呼び出し
onReaction(emojis)絵文字リアクションが追加/削除されたとき
onAction(actionId)ボタンのクリックとドロップダウンの選択
onAssistantThreadStartedSlack Assistants API のスレッドが開かれたとき
onAppHomeOpenedSlack App Home タブが開かれたとき

ストリーミング

任意の AsyncIterable<string> を thread.post() に渡します。AI SDK の textStream で動作します:

import { ToolLoopAgent } from 'ai';
const agent = new ToolLoopAgent({ model: 'anthropic/claude-sonnet-5' });

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 と @chat-adapter/* パッケージは、このリポジトリが利用する外部 SDK です(package.json の semver 範囲でバージョンを固定しています)。このリポジトリでビルドやバージョン管理を行うものではないため、これらのパッケージについて記載する Changesets/リリースフローはありません。

パッケージ用途
chatコア SDK
@chat-adapter/discordDiscord
@chat-adapter/slackSlack
@chat-adapter/telegramTelegram
@chat-adapter/state-ioredisioredis の状態
@lobechat/chat-adapter-feishuLark/Feishu — リポジトリ内でビルド(packages/chat-adapter-feishu)。@chat-adapter/ からのものではありません
@lobechat/chat-adapter-imessageBlueBubbles 経由の iMessage — リポジトリ内でビルド
@lobechat/chat-adapter-lineLINE Messaging API — リポジトリ内でビルド
@lobechat/chat-adapter-qqQQ Bot — リポジトリ内でビルド
@lobechat/chat-adapter-wechatWeChat(iLink)— リポジトリ内でビルド

Webhook の設定

各アダプターは bot.webhooks.{platform} を通じて Webhook ハンドラーを公開します。これらを HTTP フレームワークのルート(例:Next.js API ルート、Hono、Express)に接続してください。

コメント