7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Claude CodeのChannels機能でTelegram・Discordからリモート操作する ── セットアップから実践まで

7
Posted at

はじめに

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機能はデフォルトで無効です。管理者が有効化する必要があります。

有効化の手順は以下の通りです。

  1. claude.aiにAdmin権限でログイン
  2. Admin settings → Claude Code → Channels に移動
  3. channelsEnabledtrueに設定
プラン デフォルト
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サーバーを構築できます。最小限の実装は以下の通りです。

webhook-channel.ts
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に登録し、開発用フラグで起動します。

.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から指示を出し、結果を受け取れます。

セットアップの手順を振り返ります。

  1. BotFather(Telegram)またはDeveloper Portal(Discord)でBotを作成
  2. /plugin installでプラグインをインストール
  3. /configureでトークンを設定
  4. --channelsフラグ付きでClaude Codeを再起動
  5. ペアリングとallowlist設定

Research Previewの段階なので今後の変更はあり得ますが、MCPベースの設計は拡張性が高く、Webhook受信などのカスタムチャンネルも構築できます。

関連記事

公式ドキュメント:

筆者の関連記事:

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?