رفتن به محتوا

push کردنِ رویدادها به یک نشستِ در حالِ اجرا با channelها

یک channel یک سرورِ MCP است که رویدادها را به نشستِ در حالِ اجرای Claude Code‌ات push می‌کند، تا Claude بتواند به چیزهایی که وقتی پشتِ ترمینال نیستی اتفاق می‌افتند واکنش نشان دهد. channelها می‌توانند دوطرفه باشند: Claude رویداد را می‌خواند و از همان channel پاسخ می‌دهد، مثلِ یک پلِ گفتگو. رویدادها فقط وقتی نشست باز است می‌رسند، پس برای یک راه‌اندازیِ همیشه‌روشن، Claude را در یک پراسسِ پس‌زمینه یا ترمینالِ پایدار اجرا می‌کنی.

برخلافِ یکپارچه‌سازی‌هایی که یک نشستِ ابریِ تازه می‌سازند یا منتظرِ poll شدن می‌مانند، رویداد در همان نشستی می‌رسد که از قبل باز داری: مقایسه‌ی channelها را ببین.

یک channel را به‌عنوانِ یک plugin نصب می‌کنی و با اعتبارنامه‌های خودت پیکربندی‌اش می‌کنی. Telegram، Discord و iMessage در research preview گنجانده شده‌اند.

وقتی Claude از طریقِ یک channel پاسخ می‌دهد، پیامِ ورودی را در ترمینالت می‌بینی اما متنِ پاسخ را نه. ترمینال فراخوانیِ ابزار و یک تأیید (مثلِ “sent”) را نشان می‌دهد، و پاسخِ واقعی روی پلتفرمِ دیگر ظاهر می‌شود.

این صفحه این موارد را پوشش می‌دهد:

برای ساختنِ channelِ خودت، مرجعِ Channels را ببین.

هر channelِ پشتیبانی‌شده یک plugin است که به Bun نیاز دارد. برای یک دموی عملیِ جریانِ plugin پیش از اتصال به یک پلتفرمِ واقعی، شروعِ سریعِ fakechat را امتحان کن.

سورسِ کاملِ pluginِ Telegram را ببین.

یک ربات Telegram بساز

BotFather را در Telegram باز کن و /newbot بفرست. یک نامِ نمایشی و یک نامِ کاربریِ یکتا که به bot ختم می‌شود به آن بده. توکنی را که BotFather برمی‌گرداند کپی کن.

plugin را نصب کن

در Claude Code، این را اجرا کن:

/plugin install telegram@claude-plugins-official

اگر Claude Code گزارش داد که plugin در هیچ marketplaceای پیدا نشد، marketplaceات یا وجود ندارد یا قدیمی است. برای تازه‌سازی‌اش /plugin marketplace update claude-plugins-official را اجرا کن، یا اگر قبلاً اضافه‌اش نکرده‌ای /plugin marketplace add anthropics/claude-plugins-official را اجرا کن. سپس نصب را دوباره امتحان کن.

پس از نصب، /reload-plugins را اجرا کن تا فرمانِ configureِ plugin فعال شود.

توکنت را پیکربندی کن

فرمانِ configure را با توکنِ BotFather اجرا کن:

/telegram:configure <token>

این آن را در ~/.claude/channels/telegram/.env ذخیره می‌کند. می‌توانی پیش از اجرای Claude Code، TELEGRAM_BOT_TOKEN را هم در محیطِ shellات تنظیم کنی.

با channelهای فعال‌شده دوباره راه بینداز

از Claude Code خارج شو و با پرچمِ channel دوباره راه بینداز. این pluginِ Telegram را شروع می‌کند، که شروع به poll کردنِ پیام‌ها از رباتت می‌کند:

Terminal window
claude --channels plugin:telegram@claude-plugins-official

حسابت را pair کن

Telegram را باز کن و هر پیامی به رباتت بفرست. ربات با یک کدِ pairing پاسخ می‌دهد.

برگرد به Claude Code و این را اجرا کن:

/telegram:access pair <code>

سپس دسترسی را قفل کن تا فقط حسابِ خودت بتواند پیام بفرستد:

/telegram:access policy allowlist

همچنین می‌توانی برای سیستم‌هایی که هنوز plugin ندارند channelِ خودت را بسازی.

Fakechat یک channelِ دموی رسماً پشتیبانی‌شده است که یک رابطِ گفتگو را روی localhost اجرا می‌کند، بدونِ چیزی برای احراز هویت و بدونِ سرویسِ خارجی برای پیکربندی.

وقتی fakechat را نصب و فعال کردی، می‌توانی در مرورگر تایپ کنی و پیام در نشستِ Claude Code‌ات می‌رسد. Claude پاسخ می‌دهد، و پاسخ دوباره در مرورگر نمایان می‌شود. بعد از اینکه رابطِ fakechat را آزمودی، Telegram، Discord یا iMessage را امتحان کن.

برای امتحانِ دموی fakechat، به این‌ها نیاز داری:

  • Claude Code که با یک حسابِ claude.ai یا یک کلیدِ Claude Console API نصب و احراز هویت شده
  • Bun که نصب شده. pluginهای channelِ از‌پیش‌ساخته اسکریپت‌های Bun هستند. با bun --version بررسی کن؛ اگر شکست خورد، Bun را نصب کن.
  • سازمانِ Team، Enterprise یا Consoleِ مدیریت‌شده: ادمینت باید channelها را فعال کند در تنظیماتِ مدیریت‌شده

pluginِ channelِ fakechat را نصب کن

یک نشستِ Claude Code شروع کن و فرمانِ نصب را اجرا کن:

/plugin install fakechat@claude-plugins-official

اگر Claude Code گزارش داد که plugin در هیچ marketplaceای پیدا نشد، marketplaceات یا وجود ندارد یا قدیمی است. برای تازه‌سازی‌اش /plugin marketplace update claude-plugins-official را اجرا کن، یا اگر قبلاً اضافه‌اش نکرده‌ای /plugin marketplace add anthropics/claude-plugins-official را اجرا کن. سپس نصب را دوباره امتحان کن.

با channelِ فعال‌شده دوباره راه بینداز

از Claude Code خارج شو، سپس با --channels دوباره راه بینداز و pluginِ fakechatی را که نصب کردی پاس بده:

Terminal window
claude --channels plugin:fakechat@claude-plugins-official

سرورِ fakechat به‌صورتِ خودکار شروع می‌شود.

یک پیام push کن

رابطِ fakechat را در http://localhost:8787 باز کن و یک پیام تایپ کن:

hey, what's in my working directory?

پیام به‌عنوانِ یک رویدادِ <channel source="fakechat"> در نشستِ Claude Code‌ات می‌رسد. Claude آن را می‌خواند، کار را انجام می‌دهد، و ابزارِ replyِ fakechat را فراخوانی می‌کند. پاسخ در رابطِ گفتگو نمایان می‌شود.

اگر Claude وقتی پشتِ ترمینال نیستی به یک پرامپتِ دسترسی برخورد، نشست متوقف می‌ماند تا پاسخ بدهی. سرورهای channel که قابلیتِ relayِ دسترسی را اعلام می‌کنند می‌توانند این پرامپت‌ها را به تو فوروارد کنند تا بتوانی از راه دور تأیید یا رد کنی. برای استفاده‌ی بدونِ نظارت، --dangerously-skip-permissions پرامپت‌ها را جز قواعدِ askِ صریح دور می‌زند، اما فقط در محیط‌هایی که به آن‌ها اعتماد داری استفاده‌اش کن.

وقتی channelها را در حالتِ غیرتعاملی با -p اجرا می‌کنی، ابزارهایی که به ورودیِ ترمینال نیاز دارند، مثلِ سؤال‌های چندگزینه‌ای و تأییدِ plan mode، غیرفعال می‌شوند تا نشست هرگز در انتظارِ ورودی گیر نکند.

هر pluginِ channelِ تأییدشده یک allowlistِ فرستنده نگه می‌دارد: فقط IDهایی که اضافه کرده‌ای می‌توانند پیام push کنند، و بقیه بی‌سروصدا دور انداخته می‌شوند.

Telegram و Discord فهرست را با pairing مقداردهیِ اولیه می‌کنند:

  1. رباتت را در Telegram یا Discord پیدا کن و هر پیامی به آن بفرست
  2. ربات با یک کدِ pairing پاسخ می‌دهد
  3. در نشستِ Claude Code‌ات، وقتی پرامپت داده شد کد را تأیید کن
  4. IDِ فرستنده‌ات به allowlist اضافه می‌شود

iMessage متفاوت کار می‌کند: پیام‌دادن به خودت به‌صورتِ خودکار از دروازه عبور می‌کند، و مخاطب‌های دیگر را با handle و با /imessage:access allow اضافه می‌کنی.

علاوه بر آن، تو با --channels کنترل می‌کنی کدام سرورها در هر نشست فعال‌اند، و سازمانت با channelsEnabled روی پلن‌های Team و Enterpriseِ claude.ai و روی سازمان‌های Console که تنظیماتِ مدیریت‌شده مستقر می‌کنند، دسترس‌پذیری را کنترل می‌کند.

بودن در .mcp.json برای push کردنِ پیام کافی نیست: یک سرور باید در --channels هم نام برده شود.

allowlist همچنین relayِ دسترسی را دروازه‌بانی می‌کند اگر channel آن را اعلام کند. هر کس که بتواند از طریقِ channel پاسخ دهد می‌تواند استفاده از ابزار در نشستت را تأیید یا رد کند، پس فقط فرستنده‌های allowlistی را قرار بده که به آن‌ها برای آن اختیار اعتماد داری.

ادمین‌ها دسترس‌پذیری را از طریقِ دو تنظیماتِ مدیریت‌شده کنترل می‌کنند که کاربران نمی‌توانند override کنند. پیش‌فرض به این بستگی دارد که چطور احراز هویت می‌کنی:

  • Team و Enterpriseِ claude.ai: channelها مسدودند تا یک ادمین آن‌ها را فعال کند.
  • Anthropic Console با احراز هویتِ کلیدِ API: channelها به‌صورتِ پیش‌فرض مجازند. فقط وقتی به این تنظیم نیاز داری که سازمانت تنظیماتِ مدیریت‌شده مستقر کند.

در همه‌ی حالت‌ها، هیچ channelای اجرا نمی‌شود تا یک کاربر آن را برای نشست با --channels فعال کند.

تنظیمهدفوقتی پیکربندی نشده
channelsEnabledکلیدِ اصلی. برای اینکه هر channelای پیام تحویل دهد باید true باشد. از طریقِ کلیدِ Admin consoleِ claude.ai یا مستقیماً در تنظیماتِ مدیریت‌شده تنظیم می‌شود. وقتی خاموش است همه‌ی channelها از جمله پرچمِ development را مسدود می‌کند.Team و Enterpriseِ claude.ai: channelها مسدودند. Console: channelها مجازند مگر اینکه سازمانت تنظیماتِ مدیریت‌شده مستقر کند، که در آن صورت channelها مسدودند تا این کلید تنظیم شود
allowedChannelPluginsاینکه کدام pluginها می‌توانند پس از فعال‌شدنِ channelها ثبت‌نام کنند. وقتی تنظیم شود فهرستِ نگه‌داری‌شده‌ی Anthropic را جایگزین می‌کند. فقط وقتی channelsEnabled برابرِ true باشد اعمال می‌شود.فهرستِ پیش‌فرضِ Anthropic اعمال می‌شود

کاربرانِ Pro و Max بدونِ سازمان کاملاً از این بررسی‌ها رد می‌شوند: channelها در دسترس‌اند و کاربران هر نشست با --channels آن‌ها را فعال می‌کنند.

فعال‌سازیِ channelها برای سازمانت

Section titled “فعال‌سازیِ channelها برای سازمانت”

ادمین‌ها می‌توانند channelها را از claude.ai → Admin settings → Claude Code → Channels فعال کنند، یا با تنظیمِ channelsEnabled به true در تنظیماتِ مدیریت‌شده.

وقتی فعال شد، کاربرانِ سازمانت می‌توانند از --channels استفاده کنند تا سرورهای channel را در نشست‌های جداگانه فعال کنند. اگر تنظیم غیرفعال یا تنظیم‌نشده باشد، سرورِ MCP همچنان متصل می‌شود و ابزارهایش کار می‌کنند، اما پیام‌های channel نمی‌رسند. یک هشدارِ راه‌اندازی به کاربر می‌گوید از یک ادمین بخواهد تنظیم را فعال کند.

محدودکردنِ اینکه کدام pluginهای channel می‌توانند اجرا شوند

Section titled “محدودکردنِ اینکه کدام pluginهای channel می‌توانند اجرا شوند”

به‌صورتِ پیش‌فرض، هر pluginی که روی allowlistِ نگه‌داری‌شده‌ی Anthropic باشد می‌تواند به‌عنوانِ یک channel ثبت‌نام کند. ادمین‌ها روی پلن‌های Team و Enterprise می‌توانند آن allowlist را با مالِ خودشان جایگزین کنند با تنظیمِ allowedChannelPlugins در تنظیماتِ مدیریت‌شده. از این استفاده کن تا محدود کنی کدام pluginهای رسمی مجازند، channelها را از marketplaceِ داخلیِ خودت تأیید کنی، یا هر دو. هر ورودی یک plugin و marketplaceای که از آن می‌آید را نام می‌برد:

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

وقتی allowedChannelPlugins تنظیم شود، allowlistِ Anthropic را کاملاً جایگزین می‌کند: فقط pluginهای فهرست‌شده می‌توانند ثبت‌نام کنند. آن را تنظیم‌نشده بگذار تا به allowlistِ پیش‌فرضِ Anthropic برگردد. یک آرایه‌ی خالی همه‌ی pluginهای channel را از allowlist مسدود می‌کند، اما --dangerously-load-development-channels همچنان می‌تواند برای آزمایشِ محلی آن را دور بزند. برای مسدودکردنِ کاملِ channelها از جمله پرچمِ development، به‌جایش channelsEnabled را تنظیم‌نشده بگذار.

این تنظیم به channelsEnabled: true نیاز دارد. اگر کاربری pluginی به --channels پاس بدهد که روی فهرستت نیست، Claude Code به‌صورتِ عادی شروع می‌شود اما channel ثبت‌نام نمی‌شود، و اطلاعیه‌ی راه‌اندازی توضیح می‌دهد که plugin روی فهرستِ تأییدشده‌ی سازمان نیست.

channelها یک قابلیتِ research preview هستند. دسترس‌پذیری به‌تدریج در حالِ گسترش است، و نحوِ پرچمِ --channels و قراردادِ پروتکل ممکن است بر اساسِ بازخورد تغییر کند.

در طیِ preview، --channels فقط pluginها را از یک allowlistِ نگه‌داری‌شده‌ی Anthropic می‌پذیرد، یا از allowlistِ سازمانت اگر یک ادمین allowedChannelPlugins را تنظیم کرده باشد. pluginهای channel در claude-plugins-official مجموعه‌ی تأییدشده‌ی پیش‌فرض‌اند. اگر چیزی پاس بدهی که روی allowlistِ مؤثر نیست، Claude Code به‌صورتِ عادی شروع می‌شود اما channel ثبت‌نام نمی‌شود، و اطلاعیه‌ی راه‌اندازی دلیلش را می‌گوید.

برای آزمایشِ channelی که می‌سازی، از --dangerously-load-development-channels استفاده کن. برای اطلاعات درباره‌ی آزمایشِ channelهای سفارشی که می‌سازی Test during the research preview را ببین.

مشکلات یا بازخورد را در مخزنِ GitHubِ Claude Code گزارش کن.

چند قابلیتِ Claude Code به سیستم‌های بیرونِ ترمینال متصل می‌شوند، که هر کدام برای نوعِ متفاوتی از کار مناسب‌اند:

قابلیتچه کار می‌کندخوب برای
Claude Code on the webکارها را در یک sandboxِ ابریِ تازه، که از GitHub کلون شده، اجرا می‌کندواگذاریِ کارِ async و خوداتکا که بعداً بررسی‌اش می‌کنی
Claude in Slackاز یک منشنِ @Claude در یک channel یا thread یک نشستِ وب می‌سازدشروعِ کارها مستقیماً از کانتکستِ گفتگوی تیمی
سرورِ MCP استانداردClaude در طیِ یک کار از آن کوئری می‌گیرد؛ چیزی به نشست push نمی‌شوددادنِ دسترسیِ on-demand به Claude برای خواندن یا کوئری‌گرفتن از یک سیستم
Remote Controlتو نشستِ محلی‌ات را از claude.ai یا اپِ موبایلِ Claude هدایت می‌کنیهدایتِ یک نشستِ در حالِ انجام وقتی پشتِ میزت نیستی

channelها شکافِ آن فهرست را پر می‌کنند با push کردنِ رویدادها از منابعِ غیرِ Claude به نشستِ محلیِ از‌قبل‌در‌حالِ‌اجرایت.

  • پلِ گفتگو: از Claude چیزی را از طریقِ تلفنت با Telegram، Discord یا iMessage بپرس، و پاسخ در همان گفتگو برمی‌گردد در حالی که کار روی دستگاهت روی فایل‌های واقعی‌ات اجرا می‌شود.
  • گیرنده‌ی Webhook: یک webhook از CI، error tracker‌ات، یک خط‌لوله‌ی deploy، یا سرویسِ خارجیِ دیگر جایی می‌رسد که Claude از قبل فایل‌هایت را باز دارد و یادش هست داشتی چه چیزی را debug می‌کردی.

وقتی یک channel در حالِ اجرا داری، این قابلیت‌های مرتبط را کاوش کن:

  • channelِ خودت را بساز برای سیستم‌هایی که هنوز plugin ندارند
  • Remote Control برای هدایتِ یک نشستِ محلی از تلفنت به‌جای فوروارد کردنِ رویدادها به آن
  • Scheduled tasks برای poll کردن روی یک تایمر به‌جای واکنش به رویدادهای push‌شده