用 Channels 向会话推送事件
Channel 是把消息、告警和 webhook 推进运行中 Claude Code 会话的 MCP 服务器:支持的渠道(Telegram、Discord、iMessage)、fakechat 快速开始、安全、企业控制、研究预览限制与对比(研究预览)。
Channels 处于研究预览阶段:需要通过 claude.ai 或 Console API Key 的 Anthropic 认证,在 Amazon Bedrock、Google Cloud 的 Agent Platform 和 Microsoft Foundry 上不可用。Team 和 Enterprise 组织需要由管理员先明确启用。
Channel 是一个把事件推进你正在运行的 Claude Code 会话的 MCP 服务器,让 Claude 能对你不在终端前时发生的事情作出反应。Channel 可以是双向的:Claude 读到事件后,通过同一个 channel 回复,像一座聊天桥。事件只在会话打开期间到达,所以要做到常驻,就让 Claude 运行在后台进程或持久终端里。
与启动新云端会话或等你去轮询的集成不同,事件到达的是你已经打开的那个会话(对比见下面「Channels 与其他功能的比较」)。
你把 channel 作为插件安装,并用自己的凭据配置它。研究预览里包含 Telegram、Discord 和 iMessage。当 Claude 通过 channel 回复时,你在终端里看到的是收到的消息,而不是回复的文字:终端显示工具调用和一条确认(如「sent」),真正的回复出现在另一个平台上。
如果你管理 Team、Enterprise 或 Console 组织,见「为你的组织启用 channels」。要构建自己的 channel,见 Channels reference。
支持的渠道
每个受支持的渠道都是一个需要 Bun 的插件。在连接真实平台前,可以先用 fakechat 快速开始体验插件流程。
Telegram
-
创建 Telegram 机器人:在 Telegram 里打开 BotFather 发送
/newbot,给它一个显示名和一个以bot结尾的唯一用户名,复制 BotFather 返回的令牌。 -
安装插件:在 Claude Code 里运行
/plugin install telegram@claude-plugins-official。如果安装失败,按 Claude Code 报告的消息处理:Marketplace "claude-plugins-official" not found时,先用/plugin marketplace add anthropics/claude-plugins-official添加市场再重试;插件在市场里找不到时,检查插件名称。安装询问范围时选用户范围,让插件在所有项目里可用。查看安装摘要:如果它报告Run /reload-plugins to activate.,按「不重启应用插件改动」让插件的 configure 命令可用。 -
配置令牌:用 BotFather 给的令牌运行
/telegram:configure <token>,保存到~/.claude/channels/telegram/.env;也可以在启动 Claude Code 前在 shell 环境里设置TELEGRAM_BOT_TOKEN。 -
启用 channel 重启:退出 Claude Code,带 channel 标志重启,这会启动 Telegram 插件并开始轮询你机器人的消息:
claude --channels plugin:telegram@claude-plugins-official -
配对你的账号:在 Telegram 里给你的机器人发任意消息,它会回复一个配对码。如果机器人没响应,确认 Claude Code 是带上一步的
--channels运行的:机器人只有在 channel 活动时才能回复。回到 Claude Code 运行/telegram:access pair <code>,然后锁定访问,让只有你的账号能发消息:/telegram:access policy allowlist。
Discord
-
创建 Discord 机器人:进入 Discord Developer Portal,点 New Application 并命名;在 Bot 部分创建用户名,然后点 Reset Token 并复制令牌。
-
启用 Message Content Intent:在机器人设置里滚动到 Privileged Gateway Intents,启用 Message Content Intent。
-
邀请机器人进入你的服务器:进入 OAuth2 > URL Generator,选
bot范围并启用这些权限:View Channels、Send Messages、Send Messages in Threads、Read Message History、Attach Files、Add Reactions;打开生成的 URL,把机器人加到你的服务器。 -
安装插件:运行
/plugin install discord@claude-plugins-official,失败时的处理和选范围、/reload-plugins的说明与 Telegram 相同。 -
配置令牌:用你复制的机器人令牌运行
/discord:configure <token>,保存到~/.claude/channels/discord/.env;也可以在启动前在 shell 环境里设置DISCORD_BOT_TOKEN。 -
启用 channel 重启:退出 Claude Code 并带 channel 标志重启,连接 Discord 插件,让你的机器人能接收和回应消息:
claude --channels plugin:discord@claude-plugins-official -
配对你的账号:在 Discord 里私信你的机器人,它会回复配对码(机器人没响应时同样先确认
--channels在运行)。回到 Claude Code 运行/discord:access pair <code>,然后用/discord:access policy allowlist锁定访问,让只有你的账号能发消息。
iMessage
iMessage channel 直接读取你的 Messages 数据库,并通过 AppleScript 发送回复。它需要 macOS,不需要机器人令牌或外部服务。
-
授予完全磁盘访问权限:
~/Library/Messages/chat.db处的 Messages 数据库受 macOS 保护。服务器第一次读取它时,macOS 提示访问:点 Allow,提示里点名的是启动 Bun 的那个应用(如 Terminal、iTerm 或你的 IDE)。如果提示没出现或你点了不允许,在 System Settings > Privacy & Security > Full Disk Access 里手动授权并添加你的终端;没有它,服务器会立即以authorization denied退出。 -
安装插件:运行
/plugin install imessage@claude-plugins-official(失败时的处理同上,选用户范围)。如果安装摘要报告Run /reload-plugins to activate.,这里不用处理,因为下一步重启会加载该插件。 -
启用 channel 重启:退出 Claude Code 并带 channel 标志重启:
claude --channels plugin:imessage@claude-plugins-official -
给自己发短信:在任何登录了你 Apple ID 的设备上打开 Messages,给自己发一条消息,它会立即到达 Claude:给自己发消息绕过访问控制,无需设置。Claude 发出的第一条回复会触发 macOS 的 Automation 提示,询问你的终端是否能控制 Messages,点 OK。
-
允许其他发送者:默认只有你自己的消息会通过。要让其他联系人能联系 Claude,添加他们的句柄:
/imessage:access allow +15551234567。句柄是+国家码格式的电话号码,或user@example.com这样的 Apple ID 邮箱。
快速开始
Fakechat 是官方支持的演示 channel,在 localhost 上运行一个聊天界面,不需要认证,也没有外部服务要配置。安装并启用 fakechat 后,你可以在浏览器里输入,消息到达你的 Claude Code 会话;Claude 回复,回复又显示回浏览器。测试过 fakechat 界面后,再试 Telegram、Discord 或 iMessage。
要试 fakechat 演示,你需要:
- 已安装并认证的 Claude Code,用 claude.ai 账号或 Claude Console API key。
- 已安装的 Bun:预构建的 channel 插件都是 Bun 脚本。用
bun --version检查;失败的话安装 Bun。 - Team、Enterprise 或受管的 Console 组织:你的管理员必须在托管设置里启用 channels。
1. 安装 fakechat channel 插件。 启动一个 Claude Code 会话并运行安装命令:
/plugin install fakechat@claude-plugins-official失败时的处理同上;询问安装范围时选用户范围。如果安装摘要报告 Run /reload-plugins to activate.,这里不用处理,因为下一步重启会加载该插件。
2. 启用 channel 重启。 退出 Claude Code,用 --channels 重启并传入你安装的 fakechat 插件:
claude --channels plugin:fakechat@claude-plugins-officialfakechat 服务器自动启动。启动画面显示一条 channels 通知,说明来自 plugin:fakechat@claude-plugins-official 的消息直接注入这个会话;如果插件没有安装或不在批准的允许列表里,该通知下方会出现点名问题的警告行。你可以向 --channels 传多个插件,用空格分隔。
3. 推送一条消息进来。 打开 http://localhost:8787 的 fakechat 界面并输入一条消息:
what's in my working directory?消息到达你的 Claude Code 会话。终端把它显示为一行入站 channel 内容,如 ← fakechat · web: what's in my working directory?,而模型收到的是一个 <channel source="plugin:fakechat:fakechat"> 事件,使用插件的限定服务器名。Claude 读取它、完成工作并调用 fakechat 的 reply 工具;如果 Claude Code 为第一次回复请求权限,批准它,答案就显示在聊天界面里。
如果你离开终端时 Claude 遇到权限提示,会话会暂停到你响应为止。声明了权限中继能力的 channel 服务器可以把这些提示转发给你,让你远程批准或拒绝。无人值守使用时,--dangerously-skip-permissions 会绕过大多数提示,但只在你信任的环境里使用;即使这样,没有任何模式会自动批准的那些操作仍然适用。
当你用 -p 在非交互模式运行 channels 时,需要终端输入的工具(如多选问题和 plan 模式批准)被禁用,所以会话永远不会停下来等输入。
安全
每个获批的 channel 插件都维护一个发送者允许列表:只有你添加过的 ID 才能推送消息,其他所有人都被静默丢弃。
Telegram 和 Discord 通过配对来引导这个列表:
- 在 Telegram 或 Discord 里找到你的机器人并给它发任意消息。
- 机器人回复一个配对码。
- 在你的 Claude Code 会话里,出现提示时批准该代码。
- 你的发送者 ID 被加入允许列表。
iMessage 的做法不同:给自己发短信会自动绕过这道关口,其他联系人用 /imessage:access allow 按句柄添加。
除此之外,你用 --channels 控制每个会话启用哪些服务器,你的组织则在 claude.ai Team 和 Enterprise 套餐上以及部署了托管设置的 Console 组织上,通过 channelsEnabled 控制可用性。只在 .mcp.json 里是不足以推送消息的:服务器还必须在 --channels 里被点名。
如果 channel 声明了权限中继,允许列表也会管控它:任何能通过该 channel 回复的人都能批准或拒绝你会话里的工具使用,所以只把你信任拥有这种权限的发送者加入允许列表。
企业控制
管理员通过两个用户无法覆盖的托管设置控制可用性,默认值取决于你如何认证:
- claude.ai Team 和 Enterprise:channels 被阻止,直到 Owner 启用它们。
- 使用 API key 认证的 Anthropic Console:channels 默认允许;只有当你的组织部署了托管设置时才需要这个设置。
任何情况下,在用户用 --channels 为会话选择加入之前,没有 channel 会运行。
| 设置 | 用途 | 未配置时 |
|---|---|---|
channelsEnabled | 总开关。必须为 true,任何 channel 才能投递消息;关闭时阻止所有 channel,包括开发标志 | claude.ai Team 和 Enterprise:channels 被阻止;Console:channels 允许,除非你的组织部署了托管设置,此时在设置该键之前 channels 被阻止 |
allowedChannelPlugins | channels 启用后哪些插件能注册;设置后会替换 Anthropic 维护的列表 | 适用 Anthropic 的默认列表 |
没有组织的 Pro 和 Max 用户完全跳过这些检查:channels 可用,用户按会话用 --channels 选择加入。
为你的组织启用 channels
从 claude.ai → Admin settings → Claude Code → Channels 为你的组织启用 channels(需要 Owner 角色),或者在托管设置里把 channelsEnabled 设为 true。启用后,你组织里的用户可以用 --channels 把 channel 服务器选入单个会话。如果该设置被禁用或未设置,MCP 服务器仍然连接、它的工具也能用,但 channel 消息不会到达;启动警告会告诉用户让管理员启用这个设置。
限制哪些 channel 插件可以运行
默认情况下,Anthropic 维护的允许列表里的任何插件都能注册为 channel。Team 和 Enterprise 套餐的管理员可以在托管设置里设置 allowedChannelPlugins,用自己的列表替换它,用来限制允许哪些官方插件、批准来自你自己内部市场的 channel,或两者兼有。每个条目点名一个插件及其来源市场:
{
"channelsEnabled": true,
"allowedChannelPlugins": [
{ "marketplace": "claude-plugins-official", "plugin": "telegram" },
{ "marketplace": "claude-plugins-official", "plugin": "discord" },
{ "marketplace": "acme-corp-plugins", "plugin": "internal-alerts" }
]
}如果你设置了空数组,就阻止了允许列表里的所有 channel 插件,但 --dangerously-load-development-channels 仍可以为本地测试绕过这个阻止;要连开发标志一起彻底阻止 channels,改为不设置 channelsEnabled。
该设置要求 channelsEnabled: true。如果用户向 --channels 传入了不在你列表里的插件,Claude Code 正常启动,但该 channel 不会注册,启动通知会说明该插件不在组织批准的列表里。如果你在 v2 MCP 客户端运行时把 MCP_PROTOCOL_NEGOTIATION 设为 auto,channel 也可能注册失败,因为 Claude Code 不注册协商协议修订版 2026-07-28 的 channel 服务器。
研究预览
Channels 是研究预览功能。可用性正在逐步推出,--channels 标志的语法和协议约定可能根据反馈变化。在预览期间,claude --help 里既不列出 --channels 也不列出 --dangerously-load-development-channels,这些标志虽然没有列出但可以使用。
预览期间,--channels 只接受来自 Anthropic 维护的允许列表的插件,或者管理员设置了 allowedChannelPlugins 时来自你组织的允许列表的插件;claude-plugins-official 里的 channel 插件是默认的批准集合。如果你传入的东西不在有效的允许列表上,Claude Code 正常启动,但该 channel 不注册,启动通知会告诉你原因。要测试你正在构建的 channel,用 plugin:<name>@<marketplace> 或 server:<name> 的形式把它传给 --dangerously-load-development-channels;测试你构建的自定义 channel 见 Channels reference 的「Test during the research preview」。问题或反馈报告到 Claude Code 的 GitHub 仓库。
Channels 与其他功能的比较
几个 Claude Code 功能连接终端之外的系统,各自适合不同种类的工作:
| 功能 | 做什么 | 适合 |
|---|---|---|
| 云端会话 | 在从 GitHub 克隆的全新云沙盒里运行任务 | 委派你稍后再查看的、自成一体的异步工作 |
| Slack 里的 Claude | 从频道或线程里的 @Claude 提及启动一个云端会话 | 直接从团队对话上下文发起任务 |
| 标准 MCP 服务器 | Claude 在任务期间查询它;没有东西被推送到会话 | 让 Claude 按需读取或查询某个系统 |
| Remote Control | 你从 claude.ai 或 Claude 移动应用驱动你的本地会话 | 离开办公桌时引导进行中的会话 |
Channels 填补了这张清单里的空白:把来自非 Claude 来源的事件推进你已经在运行的本地会话。
- 聊天桥:用手机通过 Telegram、Discord 或 iMessage 问 Claude 点什么,答案回到同一个聊天里,而工作在你的机器上针对你真实的文件运行。
- Webhook 接收器:来自 CI、你的错误跟踪器、部署流水线或其他外部服务的 webhook,到达 Claude 已经打开了你的文件、并记得你在调试什么的地方。
自己构建 channel
想构建自己的 channel,见官方的 Channels reference:它讲如何做一个把 webhook、告警和聊天消息推进 Claude Code 会话的 MCP 服务器。想在事件发生时就响应而不是轮询,用 channel;想按计划重复运行提示词,用定时任务。
下一步
- 为还没有插件的系统构建你自己的 channel。
- Remote Control:从手机驱动本地会话,而不是把事件转发进去。
- 定时任务:按计时器轮询,而不是对推送的事件作出反应。