Skip to Content
ユーザーガイド機能チャンネル概要

チャンネル

チャンネルを使用すると、ターミナルではなく、Telegram、WeChat、QQ、DingTalk などのメッセージングプラットフォームから Qwen Code エージェントとやり取りできます。スマートフォンやデスクトップのチャットアプリからメッセージを送信すると、エージェントは CLI と同じように応答します。

仕組み

qwen channel start を実行すると、Qwen Code は次の処理を行います:

  1. 設定ファイル settings.json からチャンネル設定を読み取ります
  2. Agent Client Protocol (ACP) を使用して単一のエージェントプロセスを起動します
  3. 各メッセージングプラットフォームに接続し、メッセージのリッスンを開始します
  4. 受信メッセージをエージェントにルーティングし、適切なチャットに応答を送り返します

すべてのチャンネルは単一のエージェントプロセスを共有しますが、ユーザーごとにセッションは分離されています。各チャンネルは独自の作業ディレクトリ、モデル、指示を持つことができます。

クイックスタート

  1. メッセージングプラットフォームでボットをセットアップします(チャンネル別ガイド: TelegramWeChatQQ BotDingTalk
  2. チャンネル設定を ~/.qwen/settings.json に追加します
  3. qwen channel start を実行してすべてのチャンネルを開始するか、qwen channel start <名前> で単一のチャンネルを開始します

組み込みでないプラットフォームに接続したいですか? 拡張機能としてカスタムアダプターを追加するには Plugins を参照してください。

設定

チャンネルは settings.jsonchannels キーの下で設定します。各チャンネルには名前と一連のオプションがあります:

{ "channels": { "my-channel": { "type": "telegram", "token": "$MY_BOT_TOKEN", "senderPolicy": "allowlist", "allowedUsers": ["123456789"], "sessionScope": "user", "cwd": "/path/to/working/directory", "instructions": "Optional system instructions for the agent.", "groupPolicy": "disabled", "groups": { "*": { "requireMention": true } } } } }

オプション

オプション必須説明
typeはいチャンネルタイプ: telegram, weixin, qq, dingtalk, feishu、または拡張機能からのカスタムタイプ(Plugins を参照)
tokenTelegramボットトークン。環境変数から読み取るための $ENV_VAR 構文をサポートします。WeChat または DingTalk では不要
clientIdDingTalkDingTalk AppKey。$ENV_VAR 構文をサポート
clientSecretDingTalkDingTalk AppSecret。$ENV_VAR 構文をサポート
modelいいえこのチャンネルで使用するモデル(例:qwen3.5-plus)。デフォルトモデルを上書きします。画像入力をサポートするマルチモーダルモデルに便利
senderPolicyいいえボットとやり取りできる人: allowlist (デフォルト)、open、または pairing
allowedUsersいいえボットの使用を許可されたユーザー ID のリスト(allowlist および pairing ポリシーで使用)
sessionScopeいいえセッションのスコープ方法: user (デフォルト)、thread、または single
cwdいいえエージェントの作業ディレクトリ。デフォルトはカレントディレクトリ
instructionsいいえ各セッションの最初のメッセージに追加されるカスタム指示
groupPolicyいいえグループチャットアクセス: disabled (デフォルト)、allowlist、または openグループチャット を参照
groupsいいえグループごとの設定。キーはグループチャット ID またはデフォルト用の "*"グループチャット を参照
dispatchModeいいえボットがビジー中にメッセージを送信したときの動作: steer (デフォルト)、collect、または followupディスパッチモード を参照
blockStreamingいいえプログレッシブ応答配信: on または off (デフォルト)。ブロックストリーミング を参照
blockStreamingChunkいいえチャンクサイズの範囲: { "minChars": 400, "maxChars": 1000 }ブロックストリーミング を参照
blockStreamingCoalesceいいえアイドルフラッシュ: { "idleMs": 1500 }ブロックストリーミング を参照

送信者ポリシー

ボットとやり取りできる人を制御します:

  • allowlist (デフォルト) — allowedUsers にリストされたユーザーのみメッセージを送信できます。その他は無視されます。
  • pairing — 不明な送信者にペアリングコードが送信されます。ボットオペレーターが CLI 経由で承認すると、永続的な許可リストに追加されます。allowedUsers のユーザーはペアリングをスキップします。以下の DM ペアリング を参照。
  • open — 誰でもメッセージを送信できます。注意して使用してください。

セッションスコープ

会話セッションの管理方法を制御します:

  • user (デフォルト) — ユーザーごとに 1 つのセッション。同じユーザーからのすべてのメッセージが会話を共有します。
  • thread — スレッド/トピックごとに 1 つのセッション。スレッドのあるグループチャットに便利です。
  • single — すべてのユーザーで共有される 1 つのセッション。全員が同じ会話を共有します。

トークンセキュリティ

ボットトークンは settings.json に直接保存しないでください。代わりに、環境変数参照を使用します:

{ "token": "$TELEGRAM_BOT_TOKEN" }

実際のトークンはシェル環境またはチャンネル実行前に読み込まれる .env ファイルに設定します。

DM ペアリング

senderPolicy"pairing" に設定されている場合、不明な送信者は承認フローを経由します:

  1. 不明なユーザーがボットにメッセージを送信します
  2. ボットは 8 文字のペアリングコード(例:VEQDDWXJ)で応答します
  3. ユーザーがあなた(ボットオペレーター)とコードを共有します
  4. CLI 経由で承認します:
qwen channel pairing approve my-channel VEQDDWXJ

承認されると、ユーザー ID が ~/.qwen/channels/<名前>-allowlist.json に保存され、以降のすべてのメッセージは通常通り処理されます。

ペアリング CLI コマンド

# 保留中のペアリングリクエストを一覧表示 qwen channel pairing list my-channel # コードでリクエストを承認 qwen channel pairing approve my-channel <CODE>

ペアリングルール

  • コードは 8 文字、大文字、明確なアルファベットを使用(0/O/1/I は使用しません)
  • コードは 1 時間後に期限切れ
  • チャンネルあたり最大 3 つの保留リクエスト — 期限切れまたは承認されるまで追加リクエストは無視されます
  • settings.jsonallowedUsers にリストされたユーザーは常にペアリングをスキップ
  • 承認されたユーザーは ~/.qwen/channels/<名前>-allowlist.json に保存されます — このファイルは機密として扱ってください

グループチャット

デフォルトでは、ボットはダイレクトメッセージでのみ動作します。グループチャットを有効にするには、groupPolicy"allowlist" または "open" に設定します。

グループポリシー

ボットがグループチャットに参加するかどうかを制御します:

  • disabled (デフォルト) — ボットはすべてのグループメッセージを無視します。最も安全なオプション。
  • allowlist — ボットは、groups でチャット ID によって明示的にリストされたグループ内でのみ応答します。"*" キーはデフォルト設定を提供しますが、ワイルドカード許可としては機能しません
  • open — ボットは追加されたすべてのグループで応答します。注意して使用してください。

メンションゲート

グループでは、デフォルトでボットは @メンション または自身のメッセージへの返信が必要です。これにより、グループチャットのすべてのメッセージにボットが応答するのを防ぎます。

groups 設定を使用してグループごとに設定します:

{ "groups": { "*": { "requireMention": true }, "-100123456": { "requireMention": false } } }
  • "*" — すべてのグループのデフォルト設定。設定のデフォルトを提供するのみで、許可リストエントリではありません。
  • グループチャット ID — 特定のグループの設定を上書きします。"*" のデフォルトを上書きします。
  • requireMention (デフォルト: true) — true の場合、ボットは @メンションがあるか、自身のメッセージへの返信であるメッセージにのみ応答します。false の場合、ボットはすべてのメッセージに応答します(専用タスクグループに便利)。

グループメッセージの評価方法

1. groupPolicy — このグループは許可されているか? (いいえ → 無視) 2. requireMention — ボットにメンション/返信があったか? (いいえ → 無視) 3. senderPolicy — この送信者は承認されているか? (いいえ → ペアリングフロー) 4. セッションにルーティング

Telegram のグループ設定

  1. ボットをグループに追加
  2. BotFather で プライバシーモードを無効 にする(/mybots → Bot Settings → Group Privacy → Turn Off)— そうしないとボットはコマンド以外のメッセージを認識しません
  3. プライバシーモードを変更した後、ボットをグループから 削除して再度追加 する(Telegram はこの設定をキャッシュします)

グループチャット ID の検索

groups 許可リスト用のグループチャット ID を見つけるには:

  1. ボットが実行中の場合は停止
  2. グループでボットにメンションしたメッセージを送信
  3. Telegram Bot API を使用してキューされたアップデートを確認:
curl -s "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates" | python3 -m json.tool

応答内の message.chat.id を探します — グループ ID は負の数値です(例:-5170296765)。

メディアサポート

チャンネルはテキストだけでなく、画像やファイルをエージェントに送信することもサポートしています。

画像

ボットに写真を送信するとエージェントがそれを認識します — スクリーンショット、エラーメッセージ、図を共有するのに便利です。画像はビジョン入力としてモデルに直接送信されます。

画像サポートを使用するには、チャンネルにマルチモーダルモデルを設定します:

{ "channels": { "my-channel": { "type": "telegram", "model": "qwen3.5-plus", ... } } }

ファイル

ドキュメント(PDF、コードファイル、テキストファイルなど)をボットに送信します。ファイルはダウンロードされて一時ディレクトリに保存され、エージェントにはファイルパスが通知されるため、ファイル読み取りツールを使用して内容を読むことができます。

ファイルは任意のモデルで動作します — マルチモーダルサポートは不要です。

プラットフォームの違い

機能TelegramWeChatDingTalk
画像Bot API 経由で直接ダウンロードAES 復号化による CDN ダウンロードdownloadCode API(2段階)
ファイルBot API 経由で直接ダウンロード(20MB制限)AES 復号化による CDN ダウンロードdownloadCode API(2段階)
キャプション写真/ファイルのキャプションはメッセージテキストに含まれます該当なしリッチテキスト:1つのメッセージにテキストと画像を混在

ディスパッチモード

ボットが前のメッセージを処理中に新しいメッセージを送信した場合の動作を制御します。

  • steer (デフォルト) — ボットは現在のリクエストをキャンセルし、新しいメッセージの処理を開始します。通常のチャットに最適で、フォローアップは通常、ボットを修正またはリダイレクトしたいことを意味します。
  • collect — 新しいメッセージはバッファリングされます。現在のリクエストが完了すると、バッファされたすべてのメッセージが1つのフォローアッププロンプトに結合されます。非同期ワークフローで、考えをキューに入れたい場合に適しています。
  • followup — 各メッセージがキューに入れられ、順番に個別のターンとして処理されます。各メッセージが独立しているバッチワークフローに便利です。
{ "channels": { "my-channel": { "type": "telegram", "dispatchMode": "steer", ... } } }

また、グループごとにディスパッチモードを設定して、チャンネルのデフォルトを上書きすることもできます:

{ "groups": { "*": { "requireMention": true, "dispatchMode": "steer" }, "-100123456": { "dispatchMode": "collect" } } }

ブロックストリーミング

デフォルトでは、エージェントはしばらく動作してから 1 つの大きな応答を送信します。ブロックストリーミングを有効にすると、エージェントが処理中に応答が複数の短いメッセージとして届きます — ChatGPT や Claude がプログレッシブ出力を表示するのと同様です。

{ "channels": { "my-channel": { "type": "telegram", "blockStreaming": "on", "blockStreamingChunk": { "minChars": 400, "maxChars": 1000 }, "blockStreamingCoalesce": { "idleMs": 1500 }, ... } } }

仕組み

  • エージェントの応答は段落境界でブロックに分割され、個別のメッセージとして送信されます
  • minChars (デフォルト 400) — ブロックがこの長さに達するまで送信しません。小さなメッセージの大量送信を避けるため
  • maxChars (デフォルト 1000) — ブロックが自然な区切りなしでこの長さになった場合、強制的に送信します
  • idleMs (デフォルト 1500) — エージェントが一時停止した場合(例:ツールの実行)、現在バッファされているテキストを送信します
  • エージェントが終了すると、残りのテキストは即座に送信されます

blockStreaming のみ必須です。チャンクと coalesce の設定はオプションで、適切なデフォルト値があります。

スラッシュコマンド

チャンネルはスラッシュコマンドをサポートしています。これらはローカルで処理されます(エージェントへの往復は発生しません):

  • /help — 利用可能なコマンドを一覧表示
  • /clear — セッションをクリアして新しく開始(エイリアス:/reset/new
  • /status — セッション情報とアクセスポリシーを表示

その他のスラッシュコマンド(例:/compress/summary)はエージェントに転送されます。

これらのコマンドはすべてのチャンネルタイプ(Telegram、WeChat、QQ、DingTalk)で動作します。

実行

# 設定されたすべてのチャンネルを開始(エージェントプロセスを共有) qwen channel start # 単一のチャンネルを開始 qwen channel start my-channel # サービスが実行中かどうかを確認 qwen channel status # 実行中のサービスを停止 qwen channel stop

ボットはフォアグラウンドで実行されます。Ctrl+C で停止するか、別のターミナルから qwen channel stop を使用します。

マルチチャンネルモード

qwen channel start を名前なしで実行すると、settings.json で定義されたすべてのチャンネルが同時に起動し、単一のエージェントプロセスを共有します。各チャンネルは独自のセッションを維持します — Telegram ユーザーと WeChat ユーザーは、同じエージェントを共有していても、別々の会話を取得します。

各チャンネルは設定から独自の cwd を使用するため、異なるチャンネルで異なるプロジェクトを同時に作業できます。

サービス管理

チャンネルサービスは PID ファイル(~/.qwen/channels/service.pid)を使用して実行中のインスタンスを追跡します:

  • 重複防止: サービスが既に実行中に qwen channel start を実行すると、2 番目のインスタンスを開始する代わりにエラーが表示されます
  • qwen channel stop: 別のターミナルから実行中のサービスを正常に停止します
  • qwen channel status: サービスが実行中かどうか、その稼働時間、チャンネルごとのセッション数を表示します

クラッシュリカバリ

エージェントプロセスが予期せずクラッシュした場合、チャンネルサービスは自動的に再起動し、アクティブなすべてのセッションの復元を試みます。ユーザーは最初からやり直すことなく会話を続けることができます。

  • セッションはサービス実行中に ~/.qwen/channels/sessions.json に永続化されます
  • クラッシュ時:エージェントは 3 秒以内に再起動し、保存されたセッションを再ロードします
  • 3 回連続でクラッシュした場合、サービスはエラーで終了します
  • クリーンシャットダウン(Ctrl+C または qwen channel stop)時:セッションデータはクリアされ、次回の起動は常に新しい状態から行われます
Last updated on