ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Claude Code Channels 与计划任务完整指南:把外部事件推入会话

Claude Code Channels 与计划任务完整指南:把外部事件推入会话 1. 从一次线上告警说起为什么需要把外部事件推入会话凌晨两点CI 流水线挂了但没人知道。第二天早上打开 Claude Code 会话发现昨晚的部署任务早就跑完了只是失败信息躺在日志里没人看。这个场景我猜很多做后端或者 DevOps 的朋友都遇到过——自动化任务跑是跑了但结果没人收口等于白跑。Claude Code 的 Channels 和计划任务CronCreate就是来解决这个问题的。简单说Channels 负责把外部事件Telegram 消息、Discord 通知、CI 回调、自定义 webhook主动推进当前会话让 Claude 实时处理计划任务负责让 Claude 按时间节奏自己轮询或提醒。两者配合才能形成事件进来 → Claude 处理 → 结果出去的闭环。这套东西适合谁三类人一是需要把告警、CI 状态、监控事件自动接入 AI 会话的开发者二是想让 Claude 定时做代码巡检、日志扫描、数据备份的运维同学三是正在搭 Agent 工作流、需要事件驱动而非纯对话驱动的工程师。如果你只是偶尔问问代码问题那/loop和 Channels 对你意义不大但如果你在搭自动化流水线这篇值得看完。我实测下来最大的感受是Channels 和计划任务是两个正交的能力很多人一上来就搞混结果配了半天发现方向错了。所以下面先讲清楚决策逻辑再给可复制的配置。2. 前置准备TaoToken 统一 Key 与 API 通道在配 Channels 之前得先把模型通道打通。Claude Code 本身支持多种接入方式但如果你想让 Channels 推过来的事件能稳定调用模型建议用统一的 API 通道避免每个 channel 各配一套 key 导致管理混乱。TaoToken 在这里的角色是提供一个统一的 Key 和 API 入口Claude Code 的模型请求、Channels 的事件处理、计划任务的定时调用都走同一个通道。这样你只需要维护一份凭证换模型、调额度、看用量都在一个地方。具体操作先到官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册账号然后在控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 创建一个 API Key。这个 Key 后面会写进 Claude Code 的配置文件里。拿到 Key 之后Claude Code 侧的配置分两块一块是模型通道settings.json一块是 Channels 插件配置config.toml。下面直接给骨架。注意API 地址统一用 https://taotoken.net/api不要加 UTM 参数这是给程序调用的不是给浏览器点的。3. 可复制配置settings.json 与 config.toml 骨架3.1 settings.json模型通道与全局开关Claude Code 的 settings.json 一般放在~/.claude/settings.json用户级或项目根目录.claude/settings.json项目级。项目级优先于用户级。下面这份是我实测能跑通的骨架{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-your-taotoken-key-here, CLAUDE_CODE_DISABLE_CRON: 0 }, permissions: { allow: [ Bash(git status), Bash(git diff:*), Read, Write ] }, channels: { enabled: true, allowedChannelPlugins: [ plugin:fakechatclaude-plugins-official, plugin:telegramclaude-plugins-official ] } }几个关键点解释一下。ANTHROPIC_BASE_URL指向 TaoToken 的 API 入口ANTHROPIC_API_KEY填你刚才在控制台创建的 Key。CLAUDE_CODE_DISABLE_CRON设为0表示启用计划任务调度器如果你完全不需要定时功能设成1可以彻底关掉。channels.enabled是总开关allowedChannelPlugins是白名单——只有列在这里的插件才能注册成 channel这是安全边界的第一层。3.2 config.tomlChannels 插件级配置Channels 的插件配置走 config.toml一般放在~/.claude/config.toml。不同 channel 的配置项不一样但结构类似[channels.fakechat] enabled true port 8787 allowlist [local] [channels.telegram] enabled true bot_token 123456:ABC-your-bot-token allowlist [your_telegram_username] pairing_required true [channels.discord] enabled false bot_token allowlist []allowlist是核心安全机制。不是谁知道 bot 就能发消息进来而是只有被允许的 sender 才能推消息。Telegram 的pairing_required true表示首次使用需要配对码验证防止陌生人直接给你的 bot 发指令。3.3 计划任务相关配置计划任务不需要单独配置文件它通过会话内的命令和.claude/loop.md来管理。如果你想自定义/loop不带参数时的默认行为创建.claude/loop.md# 自定义循环任务默认行为 ## 优先级设置 1. 检查 CI/CD 流水线状态 2. 扫描日志中的错误模式 3. 检查未处理的 PR review comments ## 执行策略 - 每次循环间隔10分钟 - 失败重试最多3次 - 通知方式仅当发现异常时通知项目级.claude/loop.md优先于用户级~/.claude/loop.md。修改后下一次迭代自动生效不需要重启。4. 验证请求从 fakechat 到真实事件闭环配置写完先别急着接 Telegram用 fakechat 插件验证整条链路最安全。fakechat 是官方提供的本地测试 channel不依赖任何外部平台。4.1 安装并启动 fakechat# 安装官方插件市场如果还没装 /plugin marketplace add anthropics/claude-plugins-official # 安装 fakechat 插件 /plugin install fakechatclaude-plugins-official # 重载插件 /reload-plugins # 退出当前会话用 --channels 参数重新启动 claude --channels plugin:fakechatclaude-plugins-official启动后浏览器打开http://localhost:8787在页面里输入任意消息比如 Hello from fakechat!。回到 Claude Code 会话你会看到类似这样的消息channel sourcefakechatHello from fakechat!/channel这说明事件已经成功推入会话。接下来让 Claude 处理它/process Hello from fakechat!4.2 验证计划任务计划任务的验证更直接。在会话里输入/loop 5m check if the deployment finished and tell me what happenedClaude 会确认循环任务已创建并告诉你下一次触发时间。等 5 分钟或者直接输入what scheduled tasks do I have?查看当前任务列表。如果你想测试 CronCreate 的精确调度CronCreate */2 * * * * check system health这表示每 2 分钟执行一次健康检查。用CronList查看用CronDelete task_id删除。4.3 验证成功的结果长什么样一次完整的闭环验证应该看到这些步骤命令预期结果启动 channelclaude --channels plugin:fakechat...会话启动channel 注册成功推送事件浏览器输入消息会话出现channel sourcefakechat标签处理事件/process ...Claude 响应并执行对应动作创建定时任务/loop 5m ...返回任务 ID 和下次触发时间查看任务CronList列出所有活跃任务删除任务CronDelete id任务从列表消失全部通过说明你的 TaoToken 通道、Channels 插件、计划任务调度器都工作正常。5. 本篇常见错排查5.1 channel 启动后收不到消息最常见的原因是 allowlist 没配对。Telegram 的pairing_required true时你需要先执行/telegram:access pair pairing_code完成配对再执行/telegram:access policy allowlist设置策略。少了任何一步消息都会被静默丢弃。另一个原因是--channels参数没加。即使.mcp.json里配了 server也不代表它能推送消息。必须当前会话显式用claude --channels plugin:xxxmarketplace启动。5.2 计划任务不触发先检查CLAUDE_CODE_DISABLE_CRON是不是被设成了1。这个环境变量一旦为1整个调度器直接关闭所有/loop和 CronCreate 都不工作。其次检查会话是否还活着。本地计划任务是 session-scoped 的会话结束任务就没了。如果你关了终端任务自然不触发。需要 always-on 的话用 tmux 或 screen 保持会话或者考虑 Cloud scheduled tasks。还有一个容易忽略的点recurring task 7 天后自动过期。官方默认策略是循环任务 7 天后自动过期最后再触发一次然后删除。这是为了防止遗忘的轮询长期跑下去。5.3 模型调用报 401 或 403大概率是 API Key 或 Base URL 配错了。检查settings.json里的ANTHROPIC_BASE_URL是不是https://taotoken.net/api注意不要带 UTM 参数。ANTHROPIC_API_KEY是不是从控制台复制完整了有没有多余空格。如果 Key 没问题但还是报错去控制台 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite 看一下额度是否用完或者 Key 是否被禁用。5.4 多个 channel 同时启动冲突--channels参数支持空格分隔多个插件claude --channels plugin:telegramclaude-plugins-official plugin:discordclaude-plugins-official但要注意端口冲突。fakechat 默认占 8787如果同时跑多个本地 channel需要改 config.toml 里的 port。5.5 自定义 channel 插件加载失败开发自定义 channel 插件时需要加--dangerously-load-development-channels参数绕过 marketplace 验证claude --channels plugin:my-channel --dangerously-load-development-channels这个参数仅用于本地开发调试不要在生产环境用。6. 下一步把通道用起来配置跑通之后建议按这个顺序推进。先接一个真实的事件源比如把 CI 的 webhook 指向你的 channel让构建失败时自动推消息进会话。然后在会话里配一个/loop做定期巡检比如每 30 分钟扫一次日志错误。最后把常用的排障命令固化到.claude/loop.md里让默认循环行为符合你的工作流。如果你需要长期跑编码任务或者 Agent 工作流建议了解一下 Coding Plan它比按次调用更适合高频场景。模型对话入口可以用来快速验证通道是否正常接入文档里有更详细的参数说明。API Keys 管理页面可以创建多个 Key 做权限隔离比如给 CI 用一个、给本地开发用一个。整套东西的核心就一句话有事件就用 Channels没有事件源才考虑/loop或/schedule。别用轮询去解决推送问题那是更慢、更贵、更臃肿的方案。
返回列表