はじめに
Claude Code v2.1.80で追加されたChannels機能を使うと、TelegramやDiscordからClaude Codeセッションにメッセージを送り、リモートで作業を指示できます。
外出先からスマホでTelegramを開いて「mainブランチのテスト結果を確認して」と送ると、自宅のMacで動いているClaude Codeがそのまま実行してくれます。結果はTelegramに返ってきます。
この記事では、実際にTelegramとDiscordの両方をセットアップした手順を共有します。
Channels機能は2026年3月時点でResearch Preview(リサーチプレビュー)です。フラグの構文やプロトコルは今後変更される可能性があります。
Channels機能の全体像
Channelsは、外部のメッセージングサービスとClaude Codeセッションを橋渡しするMCPサーバーです。
ポイントは以下の3つです。
- Channelプラグインはローカルで動作します。外部にサーバーを立てる必要はありません
- セッションが開いている間だけメッセージを受信します
- 送信者のホワイトリストでアクセスを制御できます
他の機能との違い
Claude Codeには外部連携の仕組みがいくつかあります。Channelsの位置づけを整理しておきます。
| 機能 | 方向 | 用途 |
|---|---|---|
| Channels(今回の機能) | 外部→Claude Code | スマホから作業指示、Webhook受信 |
| Remote Control | claude.ai→ローカル | ブラウザから既存セッションを操作 |
| Claude in Slack | Slack→クラウド | チームチャットからタスクを開始 |
| 標準MCPサーバー | Claude Code→外部 | Claudeが外部システムを参照・操作 |
Channelsは「外部から能動的にイベントをプッシュする」という、他にはない役割を担っています。
前提条件
セットアップに必要なものは以下の通りです。
| 項目 | 要件 |
|---|---|
| Claude Code | v2.1.80以上 |
| 認証 | claude.aiログイン(APIキー認証は非対応) |
| ランタイム | Bun(公式プラグインの実行に必要。自作チャンネルはNode/Denoでも可) |
| 組織設定 | Team/Enterpriseプランの場合、管理者がChannelsを有効化する必要あり |
Bunが未インストールの場合は、以下のコマンドでインストールできます。
curl -fsSL https://bun.sh/install | bash
Telegramチャンネルのセットアップ
1. Telegram Botを作成する
Telegramアプリで@BotFatherを開き、/newbotコマンドを送信します。
表示名とユーザー名(botで終わる必要があります)を入力すると、トークンが発行されます。
123456789:AAHfiqksKZ8WxxxxxxxxxxxxxxxxxxxxxxX
このトークンは後で使うので、コピーしておいてください。
2. プラグインをインストールする
Claude Codeセッションを開いて、以下を実行します。
/plugin install telegram@claude-plugins-official
「plugin is not found in any marketplace」と表示される場合は、マーケットプレイスを追加・更新してください。
/plugin marketplace add anthropics/claude-plugins-official
/plugin marketplace update claude-plugins-official
追加後に再度インストールコマンドを実行します。
インストール後、/reload-pluginsを実行してプラグインを有効化します。
3. トークンを設定する
BotFatherから取得したトークンを設定します。
/telegram:configure 123456789:AAHfiqksKZ8WxxxxxxxxxxxxxxxxxxxxxxX
トークンは~/.claude/channels/telegram/.envに保存されます。
4. Channels有効でClaude Codeを再起動する
一度セッションを終了し、--channelsフラグを付けて再起動します。
claude --channels plugin:telegram@claude-plugins-official
起動すると、プラグインがTelegram APIへのポーリングを開始します。
5. ペアリングする
Telegramアプリで作成したBotにDMを送ります。Botが6桁の16進文字列のペアリングコードを返します。
Claude Codeセッションに戻り、以下を実行します。
/telegram:access pair <ペアリングコード>
最後に、アクセスポリシーをallowlistに切り替えます。
/telegram:access policy allowlist
これで、自分のTelegramアカウントからのみメッセージを受け付けるようになりました。
動作確認
Telegramからメッセージを送ると、Claude Codeのターミナルに以下のような形式で届きます。
<channel source="telegram" chat_id="12345" sender="YourName">
今のディレクトリにあるファイルを教えて
</channel>
Claudeがタスクを実行し、結果をTelegramに返信します。
Discordチャンネルのセットアップ
1. Discord Botを作成する
Discord Developer Portalにアクセスし、「New Application」をクリックします。
アプリケーション名を入力した後、左メニューの「Bot」セクションでユーザー名を設定し、「Reset Token」でトークンを取得します。
2. Message Content Intentを有効化する
Bot設定画面の「Privileged Gateway Intents」でMessage Content Intentを有効にします。
この設定を有効にしないと、メッセージの中身が空で届きます。必ず有効化してください。
3. Botをサーバーに招待する
「OAuth2」→「URL Generator」で以下を設定します。
Scope: bot
Bot Permissions:
- View Channels
- Send Messages
- Send Messages in Threads
- Read Message History
- Attach Files
- Add Reactions
生成されたURLをブラウザで開き、Botを招待したいサーバーを選択します。
4. プラグインをインストールする
Claude Codeセッションで以下を実行します。
/plugin install discord@claude-plugins-official
インストール後、/reload-pluginsを実行します。
5. トークンを設定する
/discord:configure MTIz...(ここにBotトークン)
トークンは~/.claude/channels/discord/.envに保存されます。
6. Channels有効でClaude Codeを再起動する
claude --channels plugin:discord@claude-plugins-official
7. ペアリングする
DiscordでBotにDMを送り、返ってきたペアリングコードをClaude Codeで入力します。
/discord:access pair <ペアリングコード>
/discord:access policy allowlist
複数チャンネルを同時に使う
TelegramとDiscordを同時に有効化できます。--channelsにスペース区切りで渡します。
claude --channels plugin:telegram@claude-plugins-official plugin:discord@claude-plugins-official
この状態では、どちらのプラットフォームからメッセージを送っても同じClaude Codeセッションに届きます。
TelegramとDiscordの機能比較
両プラグインで使えるツールには差があります。
| 機能 | Telegram | Discord |
|---|---|---|
| テキスト返信 | reply | reply |
| リアクション | react | react |
| メッセージ編集 | edit_message | edit_message |
| ファイル送信 | reply(files引数) | reply(files引数) |
| メッセージ履歴取得 | 非対応 | fetch_messages |
| 添付ファイルDL | 写真は受信時自動DL、通常ファイルはdownload_attachment | download_attachment |
| ファイル送信上限 | 50MB/ファイル | 25MB/ファイル |
| ファイルDL上限 | 20MB(Telegram Bot API制限) | 制限なし(Discord CDN経由) |
Discordのほうがメッセージ履歴の取得に対応しており、過去のやり取りを参照しやすいです。Telegramは受信時に写真を自動ダウンロードするため、画像を送って処理させるワークフローに向いています。
セキュリティの注意点
Channels機能を使う上で、セキュリティ面で押さえておくべきポイントがあります。
送信者のallowlist
ペアリング後に必ずpolicy allowlistを設定してください。デフォルトのpairingモードでは、誰でもBotにメッセージを送ってペアリングコードを取得できます。allowlistに切り替えると、登録済みのアカウントからのみメッセージを受け付けます。
/telegram:access policy allowlist
/discord:access policy allowlist
プロンプトインジェクションのリスク
グループチャットでBotを使う場合、グループ内の他のメンバーからのメッセージもClaude Codeに届く可能性があります。グループでの使用はID単位でゲーティングされますが、個人DMでの利用を推奨します。
セッションが開いている間だけ動作する
Channelsはセッション中のみ有効です。Claude Codeを閉じるとメッセージは届きません。常時稼働させたい場合は、バックグラウンドプロセスやtmuxなどで永続化する方法があります。
# tmuxでの永続化例
tmux new-session -d -s claude 'claude --channels plugin:telegram@claude-plugins-official'
パーミッションに関する注意
Channelsでメッセージを受信したとき、Claudeがファイル操作やコマンド実行の許可を求める場面があります。ターミナルの前にいない場合、許可プロンプトでセッションが止まります。
v2.1.81(2026年3月21日)でpermission relayが追加され、承認プロンプトをTelegramやDiscordのチャット側に転送できるようになりました。これにより、スマホから権限の承認・拒否が可能です。
完全に無人で動かしたい場合は--dangerously-skip-permissionsフラグを使えますが、信頼できる環境でのみ使用してください。
# 無人運用(信頼できる環境限定)
claude --channels plugin:telegram@claude-plugins-official --dangerously-skip-permissions
--dangerously-skip-permissionsはすべての権限確認をスキップします。不特定多数がアクセスできる環境では使わないでください。
Team / Enterprise組織での有効化
Team・Enterpriseプランでは、Channels機能はデフォルトで無効です。管理者が有効化する必要があります。
有効化の手順は以下の通りです。
- claude.aiにAdmin権限でログイン
- Admin settings → Claude Code → Channels に移動
-
channelsEnabledをtrueに設定
| プラン | デフォルト |
|---|---|
| Pro / Max(個人) | 有効(--channelsで個別にオプトイン) |
| Team / Enterprise | 無効(管理者が明示的に有効化する必要あり) |
OpenClawのチャネル統合との比較
Telegram・Discordからの操作という点では、OpenClawでも同じことができます。どちらを選ぶかは用途次第です。
アーキテクチャの違い
Claude Code Channelsは「既存のClaude Codeセッションに外部からメッセージを差し込む」仕組みです。コーディングエージェントとしてのClaude Codeの能力がそのまま使えます。
OpenClawは「汎用AIアシスタントのフロントエンドとしてメッセージングアプリを使う」設計です。50以上のチャネルに対応し、LLMプロバイダーも自由に選べます。
機能比較
| 観点 | Claude Code Channels | OpenClaw |
|---|---|---|
| 目的 | コーディングセッションへのリモートアクセス | 汎用AIアシスタント |
| 対応チャネル | Telegram, Discord(Research Preview) | Telegram, Discord, Slack, WhatsApp, Signal, iMessage, LINE, Google Chat等20+ |
| 常時稼働 | セッション中のみ(tmux等で永続化は可能) | Gateway常駐(デーモンとして動作) |
| LLMプロバイダー | Claude固定 | Claude, GPT-4, Gemini, Ollama等15+ |
| ファイル操作 | ローカルファイルを直接編集 | first-classツール(exec等)で操作 |
| コード実行 | ネイティブ対応(Bash, テスト等) | execツールでシェルコマンド実行 |
| ルーティング | なし(現在のセッションに直送) | チャネル×エージェントのバインディング設定が可能 |
| セットアップ | プラグインインストール+トークン設定 | Gateway起動+チャネル設定+バインディング |
| アクセス制御 | ペアリング+allowlist、組織レベルのchannelsEnabled | チャネルごとのアカウント設定 |
| データ保存 | Claudeのコンテキスト内 |
~/.openclaw配下にconfig・sessions・memory等を保存 |
| ライセンス | claude.aiサブスクリプション | MIT(自己ホスト) |
ルーティングの違い
Claude Code Channelsには、メッセージのルーティング概念がありません。すべてのメッセージが現在開いているセッションに直接届きます。
OpenClawでは、チャネルとエージェントをバインディングで紐づけられます。たとえば、Slackの特定チームをサポート用エージェントに、Telegramの個人DMを開発アシスタントに振り分ける、といった構成が可能です。
{
"bindings": [
{ "agentId": "support", "channel": "slack", "accountId": "my-slack" },
{ "agentId": "dev-assistant", "channel": "telegram", "accountId": "my-tg" }
]
}
権限承認の違い
Claude Code Channelsでは、Claudeがファイル操作やコマンド実行の許可を求めたとき、ターミナル側で承認する必要があります。v2.1.81(2026年3月21日)で「permission relay」が導入され、承認プロンプトをチャット側に転送できるようになりました。
OpenClawのTelegramプラグインには、exec-approvalsシステムがあります。Telegramのインラインボタン(Allow Once / Allow Always / Deny)で、スマホから即座に権限を承認できます。
セキュリティ面の違い
Claude Code ChannelsはAnthropicが管理するホワイトリスト制度で、公式マーケットプレイスに掲載されたプラグインのみが--channelsで利用できます。組織レベルのchannelsEnabled設定でTeam/Enterprise管理者が一括制御できる点も強みです。
OpenClawはセルフホスト型のため、セキュリティは利用者の管理に依存します。2026年初頭にRCE脆弱性(CVE-2026-25253)が発見された経緯もあり、Gateway のネットワーク公開設定やスキルの信頼性には注意が必要です。
どちらを選ぶか
Claude Code Channelsが向いている場面:
- 開発中のプロジェクトに外出先からリモートで指示を出したい
- Claude Codeのツール群(ファイル編集、Git操作、テスト実行等)をそのまま活かしたい
- セットアップの手軽さと企業レベルのアクセス管理を重視する
OpenClawが向いている場面:
- 開発以外の汎用タスクにも使いたい(リマインダー、情報収集、日常会話等)
- Slack、WhatsApp、iMessageなど多数のチャネルを統合したい
- 複数エージェントを用途別にルーティングしたい
- LLMプロバイダーを切り替えたい、またはローカルモデルを使いたい
- 常時稼働のアシスタントが必要
両方を併用するのも選択肢の一つです。開発作業はClaude Code Channels経由で、日常のタスクはOpenClaw経由で、と使い分けられます。
OpenClawのセットアップ手順は「OpenClawを日本語環境で使い倒す ── セットアップから実践まで」で詳しく解説しています。
自作チャンネルの開発
Telegram・Discord以外のサービスと連携したい場合、自作のChannelサーバーを構築できます。最小限の実装は以下の通りです。
import { Server } from '@modelcontextprotocol/sdk/server/index.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
const mcp = new Server(
{ name: 'my-channel', version: '0.0.1' },
{
capabilities: { experimental: { 'claude/channel': {} } },
instructions: 'Events arrive as <channel source="my-channel">. Read and act.',
},
)
await mcp.connect(new StdioServerTransport())
// HTTPリクエストをClaude Codeに転送
Bun.serve({
port: 8788,
hostname: '127.0.0.1',
async fetch(req) {
const body = await req.text()
await mcp.notification({
method: 'notifications/claude/channel',
params: {
content: body,
meta: { path: new URL(req.url).pathname },
},
})
return new Response('ok')
},
})
.mcp.jsonに登録し、開発用フラグで起動します。
{
"mcpServers": {
"my-channel": { "command": "bun", "args": ["./webhook-channel.ts"] }
}
}
claude --dangerously-load-development-channels server:my-channel
CIの失敗通知やモニタリングアラートをClaude Codeに流し込む、といった使い方が考えられます。
まとめ
Channels機能によって、Claude Codeの操作がターミナルの前に座っている必要がなくなりました。TelegramやDiscordから指示を出し、結果を受け取れます。
セットアップの手順を振り返ります。
- BotFather(Telegram)またはDeveloper Portal(Discord)でBotを作成
-
/plugin installでプラグインをインストール -
/configureでトークンを設定 -
--channelsフラグ付きでClaude Codeを再起動 - ペアリングとallowlist設定
Research Previewの段階なので今後の変更はあり得ますが、MCPベースの設計は拡張性が高く、Webhook受信などのカスタムチャンネルも構築できます。
関連記事
公式ドキュメント:
筆者の関連記事: