Claude Code のチャンネル: Telegram や Discord からセッションへイベントを届ける

Claude Code エンジニアリング 8分で読めます

チャンネル(channels)は、Telegram や Discord のメッセージ、CI の結果、監視アラートのような「外で起きた出来事」を、いま開いている Claude Code のセッションへ押し込む仕組みです。本記事は公式ドキュメント「Push events into a running session with channels」と、公式プラグイン集 claude-plugins-official の Telegram プラグインの README をもとに、仕組み・対応チャンネル・接続手順・セキュリティ・組織での有効化を日本語で整理した非公式の解説です。チャンネルは research preview の段階で、フラグの書式やプロトコルは今後変わる可能性があります。

チャンネルとは何か

チャンネルは、実行中の Claude Code セッションにイベントを push する MCP サーバーです。あなたが端末の前にいなくても、届いたイベントに Claude が反応できます。チャンネルは双方向にもできます。Claude がイベントを読み、同じチャンネルを通じて返事を返す、チャットの橋渡しのような使い方です。

重要な前提として、イベントが届くのはセッションが開いているあいだだけです。常時待ち受ける構成にしたいなら、Claude をバックグラウンドのプロセスか、閉じない端末で動かしておきます。

クラウドで新しいセッションを立ち上げる連携や、Claude 側から問い合わせに行く(ポーリングする)連携とは違い、チャンネルのイベントは「すでに開いているセッション」に届きます。この違いは本記事の最後の節で他の機能と比べます。

チャンネルはプラグインとしてインストールし、自分の資格情報(ボットのトークンなど)で設定します。research preview の時点では Telegram、Discord、iMessage が同梱されています。Claude がチャンネル経由で返事をしたとき、端末には受信したメッセージは表示されますが、返事の本文は表示されません。端末に出るのはツール呼び出しと「sent」のような確認だけで、返事の本文は相手側のプラットフォームに現れます。

利用条件も押さえておきます。チャンネルは claude.ai か Console の API キーによる Anthropic の認証が必要で、Amazon Bedrock、Google Cloud の Agent Platform、Microsoft Foundry では使えません。Team プランと Enterprise プランの組織では、管理者が明示的に有効化する必要があります(後述)。

対応するチャンネルと前提条件

公式に用意されているチャンネルは、いずれも claude-plugins-official マーケットプレイスのプラグインで、実行には Bun が必要です。bun --version が通らなければ、先に Bun をインストールしておきます。

自分でチャンネルを作ることもできます。公式の「Channels reference」に仕様があり、たとえば CI やエラートラッカーからの Webhook を受け取るレシーバーを書けます。開発中のチャンネルは --dangerously-load-development-channels に plugin:<name>@<marketplace> か server:<name> の形で渡して試します。

共通の起動方法は、プラグインを入れたあとに Claude Code を終了し、--channels フラグ付きで起動し直すことです。複数のプラグインはスペース区切りでまとめて渡せます。preview のあいだ、--channels と --dangerously-load-development-channels は claude --help に表示されませんが、フラグ自体は機能します。

Telegram を接続する手順

公式ドキュメントの手順に沿って、Telegram を例に接続の流れを追います。Discord もボット作成の部分が違うだけで、インストール以降はコマンド名が /discord: に変わるだけの同じ形です。

  1. Telegram のボットを作る。 Telegram で BotFather を開き /newbot を送ります。表示名と、末尾が bot で終わる一意のユーザー名を付け、返ってきたトークンを控えます。
  2. プラグインをインストールする。 端末で claude を起動し、プロンプトに次を入力します。
    /plugin install telegram@claude-plugins-official
    Marketplace "claude-plugins-official" not found と出たら、/plugin marketplace add anthropics/claude-plugins-official でマーケットプレイスを追加してから再試行します。インストール範囲を聞かれたら、全プロジェクトで使えるようユーザー範囲を選びます。インストール結果に Run /reload-plugins to activate. と出た場合は、設定コマンドを使えるようにするために再読み込みします。
  3. トークンを設定する。
    /telegram:configure <token>
    トークンは ~/.claude/channels/telegram/.env に TELEGRAM_BOT_TOKEN=... として保存されます。Claude Code を起動する前にシェルの環境変数 TELEGRAM_BOT_TOKEN を設定しておく方法もあり、プラグインの README によれば環境変数のほうが優先されます。
  4. チャンネルを有効にして再起動する。 Claude Code を終了し、次のように起動し直します。これで Telegram プラグインが動き出し、ボット宛てのメッセージのポーリングが始まります。
    claude --channels plugin:telegram@claude-plugins-official
  5. 自分のアカウントをペアリングする。 Telegram でボットに何かメッセージを送ると、ボットがペアリングコードを返します。ボットが応答しないときは、前の手順の --channels 付きで Claude Code が動いているかを確認してください。チャンネルが有効なあいだしかボットは返事をしません。Claude Code 側で次を実行します。
    /telegram:access pair <code>
    続けて、自分のアカウントだけがメッセージを送れるようにアクセスを絞ります。
    /telegram:access policy allowlist

README によると、既定のポリシーは pairing で、初期設定が済んだら allowlist に切り替えるのが推奨です。複数のボットを別々のトークンで動かしたいときは TELEGRAM_STATE_DIR で状態ディレクトリを分けます。グループやメンション、配信設定などの詳細は、プラグインに同梱の ACCESS.md にまとまっています。

iMessage の場合は手順が少し違います。プラグインを入れて claude --channels plugin:imessage@claude-plugins-official で起動したら、自分の Apple ID でサインインした端末から自分宛てにメッセージを送るだけで届きます。自分宛ての送信はアクセス制御を素通りするので、ペアリングは不要です。Claude が最初に返信するとき、端末アプリが Messages を操作してよいかを尋ねる macOS のオートメーション許可が出るので「OK」を選びます。他の送信者を許可するには /imessage:access allow +15551234567 のように、+国番号 形式の電話番号か Apple ID のメールアドレスを追加します。

fakechat でローカルに試す

実際のプラットフォームにつなぐ前に、公式がサポートするデモ用チャンネル fakechat で流れを体験できます。fakechat は localhost でチャット UI を立ち上げるだけで、認証も外部サービスの設定も要りません。ブラウザで入力したメッセージが Claude Code のセッションに届き、Claude の返事がブラウザ側に戻ってきます。

必要なものは、claude.ai アカウントか Console の API キーで認証済みの Claude Code、Bun、そして Team・Enterprise・管理された Console 組織の場合は管理者によるチャンネルの有効化です。

  1. Claude Code を起動し、プロンプトで次を実行します。
    /plugin install fakechat@claude-plugins-official
  2. Claude Code を終了し、チャンネルを有効にして起動し直します。fakechat のサーバーは自動で立ち上がります。
    claude --channels plugin:fakechat@claude-plugins-official
    起動画面には、plugin:fakechat@claude-plugins-official からのメッセージがこのセッションに直接注入される旨の通知が出ます。プラグインが未インストールだったり、承認済みの許可リストに無かったりすると、その下に原因を示す警告行が出ます。
  3. ブラウザで http://localhost:8787 を開き、たとえば「what's in my working directory?」と入力します。端末には ← fakechat · web: ... のような受信行として表示され、モデルには <channel source="plugin:fakechat:fakechat"> というイベントとして届きます。Claude が作業し、fakechat の reply ツールを呼ぶと、答えがチャット UI に表示されます。初回の返信で権限の確認が出たら承認します。

離席中に Claude が権限の確認で止まると、あなたが応答するまでセッションは待ちます。公式リファレンスにある「permission relay」の機能を宣言したチャンネルサーバーなら、その確認をチャンネル経由で転送し、遠隔から承認や拒否ができます。無人運用のために --dangerously-skip-permissions でほとんどの確認を省くこともできますが、信頼できる環境でだけ使うべきで、その場合でもどのモードでも自動承認されない操作は残ります。-p の非対話モードでチャンネルを使うときは、選択式の質問やプランモードの承認のように端末入力が必要なツールは無効になり、セッションが入力待ちで止まらないようになっています。

セキュリティと組織の設定

承認済みのチャンネルプラグインはすべて送信者の許可リストを持ち、追加した ID からのメッセージだけを通して、それ以外は黙って捨てます。Telegram と Discord はペアリングでこのリストを作ります。ボットに何か送る、ボットがペアリングコードを返す、Claude Code 側でそのコードを承認する、という流れで自分の送信者 ID が許可リストに入ります。iMessage は自分宛ての送信が自動で通り、他の連絡先は /imessage:access allow でハンドルを足します。

これに加えて、どのサーバーをそのセッションで有効にするかは --channels で毎回あなたが決めます。.mcp.json に書いてあるだけではメッセージを push できず、--channels で名前を挙げたサーバーだけが対象です。

注意点として、許可リストは permission relay の入口も兼ねます。チャンネル経由で返事ができる人は、あなたのセッションでのツール実行を承認したり拒否したりできるので、その権限を預けてよい相手だけを許可リストに入れてください。

組織での有効化

管理者は、ユーザーが上書きできない2つの管理設定でチャンネルの可否を制御します。既定値は認証方法で異なります。claude.ai の Team と Enterprise では、Owner が有効化するまでチャンネルはブロックされます。Anthropic Console の API キー認証では既定で許可されており、組織が管理設定を配布している場合にだけこの設定が要ります。いずれの場合も、ユーザーが --channels でそのセッションに opt in しない限りチャンネルは動きません。

組織での有効化は、claude.ai の管理設定(Admin settings の Claude Code にある Channels)から Owner 権限で行うか、管理設定で channelsEnabled を true にします。設定が無効か未設定のままだと、MCP サーバー自体は接続してツールも動きますが、チャンネルのメッセージは届かず、起動時に管理者へ有効化を依頼するよう促す警告が出ます。

公式プラグインの一部だけを許可したり、社内マーケットプレイスのチャンネルを承認したりするには、allowedChannelPlugins に「プラグイン名」と「それが属するマーケットプレイス」の組を並べます。

{
  "channelsEnabled": true,
  "allowedChannelPlugins": [
    { "marketplace": "claude-plugins-official", "plugin": "telegram" },
    { "marketplace": "claude-plugins-official", "plugin": "discord" },
    { "marketplace": "acme-corp-plugins", "plugin": "internal-alerts" }
  ]
}

空の配列にすると許可リスト上のプラグインはすべて使えなくなりますが、--dangerously-load-development-channels によるローカルテストは通ります。開発用フラグも含めて完全に止めたいなら、channelsEnabled を未設定のままにします。リストに無いプラグインを --channels に渡した場合、Claude Code 自体は通常どおり起動し、チャンネルだけが登録されず、起動時の通知にその理由が出ます。Pro と Max の個人ユーザー(組織に属さない場合)はこれらの確認を通らず、セッションごとの --channels だけで使えます。

他の連携機能との違い

Claude Code には端末の外のシステムとつながる機能がいくつかあり、それぞれ向いている仕事が違います。公式ドキュメントの比較表を日本語にまとめます。

機能何をするか向いている用途
クラウドセッションGitHub からクローンした新しいクラウドのサンドボックスでタスクを実行する自己完結した非同期の作業を任せ、あとで確認する
Claude in Slackチャンネルやスレッドでの @Claude メンションからクラウドセッションを起動するチームの会話の文脈からそのままタスクを始める
通常の MCP サーバータスク中に Claude が問い合わせる。セッションへ何かが push されることはないClaude にシステムの参照・照会手段をオンデマンドで与える
Remote Controlclaude.ai や Claude のモバイルアプリからローカルのセッションを操作する離席中に進行中のセッションを操縦する

チャンネルはこの表の隙間を埋めます。Claude 以外のソースで起きたイベントを、すでに動いているローカルのセッションへ push する役割です。使い方は大きく2つに分かれます。

タイマーで定期的に確認したいだけなら、push を待つチャンネルではなく、セッション内でプロンプトを繰り返す /loop のほうが適しています。逆に、外部で起きた出来事に即座に反応させたいときがチャンネルの出番です。research preview の機能なので、不具合や要望は Claude Code の GitHub リポジトリの Issue で受け付けられています。