Free Claude Code 提供了 Discord 和 Telegram 聊天机器人集成方案。你只需配置一个消息平台的 API Token,就能在聊天窗口直接下达编程指令,Claude Code 会在后台执行并实时回传进度,支持任务分支和会话管理。这是实现移动端或轻量级远程编程的可控方案。
Free Claude Code 接入 Discord 和 Telegram:用聊天机器人远程写代码
将 Free Claude Code 代理封装为聊天机器人,意味着你可以在 Discord 或 Telegram 的任意客户端(手机、网页、桌面应用)中,通过发送消息来远程触发 Claude Code 执行编程任务。这打破了必须在 IDE 前工作的限制,实现了“随时随地写代码”的轻量级接入。此方案是 Free Claude Code 中文指南 中远程访问策略的一种实践,它要求你理解并控制整个代理与消息平台的交互过程,符合“古法编程”中透明可控的原则。
核心功能
基于 messaging-bots.md 的文档,该消息机器人封装具备以下核心能力:
- 远程触发:在 Discord/Telegram 聊天窗口直接发送自然语言或代码指令。
- 实时回传:机器人会实时将 Claude Code 的思考过程、工具调用结果及最终输出回传到聊天频道。
- 树状对话分支:这是其核心交互设计。你可以回复机器人的某条任务消息,在该任务的上下文中继续对话,创建独立的分支,而不影响主对话流。
- 控制命令:提供
/stop、/clear、/stats等命令来管理任务和会话。
配置 Discord Bot
创建 Discord 机器人
- 访问 Discord Developer Portal 并登录。
- 点击 “New Application” 创建新应用,为其命名。
- 进入左侧菜单的 “Bot” 页面。
- 在 “Privileged Gateway Intents” 下,务必开启 Message Content Intent,这是机器人读取消息内容的关键权限。
- 点击 “Add Bot” 下的 “Reset Token” 以生成并复制你的 Bot Token。此 Token 是配置的凭证,需妥善保管。
- 在 “OAuth2 > URL Generator” 中,选择
botscope,并勾选以下权限:- Read Messages / View Channels
- Send Messages
- Read Message History
- 用生成的 URL 将机器人邀请至你的 Discord 服务器或私信频道。
配置环境变量
在 Free Claude Code 项目的根目录或你的启动环境中,配置 .env 文件。关键配置如下:
# 指定使用 Discord 平台
MESSAGING_PLATFORM="discord"
# 上一步获取的 Bot Token
DISCORD_BOT_TOKEN="你的 Discord Bot Token"
# 允许机器人响应的频道ID,多个ID用逗号分隔
ALLOWED_DISCORD_CHANNELS="1234567890"
# Claude Code 执行任务时使用的工作目录
CLAUDE_WORKSPACE="./agent_workspace"
# Claude Code 可以访问的文件系统根目录(安全限制)
ALLOWED_DIR="C:/Users/你的用户名/projects"
| 变量 | 说明 | 是否必须 |
|---|---|---|
MESSAGING_PLATFORM |
设置为 "discord" |
是 |
DISCORD_BOT_TOKEN |
Discord 开发者门户中获取的机器人令牌 | 是 |
ALLOWED_DISCORD_CHANNELS |
限制机器人只响应特定频道,从 Discord 设置中复制频道 ID | 是 |
CLAUDE_WORKSPACE |
Claude Code 的默认工作目录 | 是 |
ALLOWED_DIR |
Claude Code 可操作文件的根目录,用于安全隔离 | 是 |
配置 Telegram Bot
创建 Telegram 机器人
- 在 Telegram 应用中搜索并打开 @BotFather。
- 发送命令
/newbot,然后按照提示依次为机器人设置名称和用户名(用户名必须以bot结尾)。 - 创建成功后,@BotFather 会提供一个 API Token,形如
123456789:ABC...。复制此 Token。 - (可选)获取你的个人 User ID:搜索 @userinfobot 并发送任意消息,它会回复你的 ID。此 ID 用于限制机器人只响应你一人。
配置环境变量
# 指定使用 Telegram 平台
MESSAGING_PLATFORM="telegram"
# 从 @BotFather 获取的 Token
TELEGRAM_BOT_TOKEN="123456789:ABC..."
# 限制只允许你的 User ID 使用机器人(推荐私有部署时使用)
ALLOWED_TELEGRAM_USER_ID="你的用户ID"
# Claude Code 的工作目录
CLAUDE_WORKSPACE="./agent_workspace"
# Claude Code 可访问的文件系统根目录
ALLOWED_DIR="C:/Users/你的用户名/projects"
聊天命令
在与机器人的对话中,你可以使用以下命令进行控制:
| 命令 | 说明 | 使用场景 |
|---|---|---|
/stop |
停止当前正在处理的任务。 | 取消错误的或耗时过长的任务。 |
/clear |
清理会话上下文。 | 重置对话,开始一个全新的任务。 |
/stats |
显示当前会话的状态信息,如活动任务数等。 | 监控机器人运行情况。 |
| 带引用的命令 | 回复(Reply)某条任务消息,然后发送命令。 | 精准操作特定任务。例如,回复某个任务的进度消息后发送 /stop,仅停止该分支任务。 |
树状对话分支机制
这是 Free Claude Code 消息系统的核心设计,它模仿了代码开发中的“分支”概念,使得多个编程任务可以并行或基于上下文衍生。
工作原理:
- 你发送一条消息(如“写一个 TODO App”)。
- 机器人回复一条任务消息(标记为任务 A)。
- 后续交互有两种模式:
- 创建新任务:直接发送新消息(如“帮我写个 README”),机器人会处理为独立的任务 B。
- 创建分支:回复(Reply)任务 A 的消息,然后发送新指令(如“加一个删除功能”)。机器人会基于任务 A 的会话上下文继续执行,形成一个分支。
示意图解:
你:写一个 TODO App
Bot:🔄 Processing... (任务 A)
你:[回复任务 A] 加一个删除功能
Bot:🔄 Processing... (任务 A 的分支) -> 此分支运行在任务 A 的上下文中。
你:帮我写个 README
Bot:🔄 Processing... (任务 B,独立任务) -> 此任务与 A 无关。
- 独立性:任务 A、任务 A 的分支、任务 B 彼此独立运行,互不干扰。
- 队列处理:同一个分支内的消息会按照队列顺序处理。
会话管理与速率限制
会话管理:
- 每个任务(包括分支)在启动时会创建一个独立的 Claude Code CLI 会话。
- 任务执行完成或被
/stop命令终止后,该会话资源会被释放。 - 通过回复分支,新任务可以“复刻”父任务的会话上下文(例如,之前的代码生成历史),实现连续编程。
- 会话状态会持久化到本地的
session_store。即使代理进程重启,之前的会话信息也不会丢失(但运行中的任务会中断)。
速率限制:
为了控制并发和避免滥用,可以在 .env 中配置速率限制:
MESSAGING_RATE_LIMIT=1 # 每个时间窗口内允许处理的最大消息数
MESSAGING_RATE_WINDOW=1 # 时间窗口大小(单位:秒)
默认配置下,机器人每秒最多处理 1 条来自同一用户或频道的消息。如果你在多人协作的 Discord 频道中部署,可以适当调大这两个值。
FAQ
Q: Bot 启动后在 Discord/Telegram 中不响应消息?
A: 首先检查 ALLOWED_DISCORD_CHANNELS 或 ALLOWED_TELEGRAM_USER_ID 配置是否正确且与当前聊天环境匹配。机器人仅响应白名单内的频道或用户。其次,确认 .env 文件中的 Token 没有填写错误。
Q: 一个任务执行到一半网络断了或进程崩溃了,怎么办?
A: 重新发送相同的指令,机器人会创建一个全新的任务来执行。前一个未完成的任务的状态会保留在 session_store 中,但不会自动恢复执行。你需要手动决定是否需要基于旧的上下文继续。
Q: 可以同时配置并使用 Discord 和 Telegram 机器人吗?
A: 不可以。MESSAGING_PLATFORM 环境变量只能设置为一个平台。如果确实需要同时支持,你需要启动两个独立的 Free Claude Code 代理实例,为它们配置不同的端口和不同的平台 Token。这与 连接 IDE 时配置不同端口是类似的思路。
Q: 机器人发送的消息在 Discord 和 Telegram 里格式错乱(Markdown 不显示)? A: Discord 和 Telegram 支持的 Markdown 语法略有不同(例如代码块标记)。Free Claude Code 代理内部会进行基本的格式适配。如果遇到显示问题,请检查代理运行日志中是否有格式化相关的错误输出,并确认消息内容本身是符合目标平台 Markdown 语法的。