# Telegram 接入

> Telegram Adapter 的接入教程。找 BotFather 拿 Token，桌面端填完配对即可。

## 适用场景

Telegram 方案适合个人私聊远程使用。当前实现只处理 `private chat`，不处理群聊。

实现入口：`adapters/telegram/index.ts`

## 1. 创建 Telegram 机器人

在 Telegram 里搜索官方账号 **@BotFather**：

![搜索 BotFather](../images/im/telegram/01-search-botfather.png)

给它发送 `/newbot`：

![发送 /newbot](../images/im/telegram/02-newbot-command.png)

按提示走完三步：

- **取一个机器人名称**，例如 `GasterCode机器人`
- **取一个机器人用户名**，要求全英文字母，且必须以 `_bot` 结尾，例如 `gaster_code_bot`
- 创建成功后，复制 BotFather 返回的 **Bot Token**

![复制 Bot Token](../images/im/telegram/03-bot-token.png)

## 2. 在 Gaster Code 桌面端填写

### 2.1 填写 Bot Token

打开桌面端 `设置 → IM 接入 → Telegram`，把上一步的 Bot Token 填进去：

![填写 Bot Token](../images/im/telegram/04-fill-bot-token.png)

### 2.2 生成配对码

点击「生成配对码」按钮，拿到 6 位配对码后点击保存：

![生成配对码](../images/im/telegram/05-generate-pairing-code.png)

## 3. 机器人与桌面端配对

随便给刚才创建的机器人发送一条消息，按提示输入配对码。看到下面的配对成功提示，就可以从手机 Telegram 远程驱动桌面端 Gaster Code 了：

![配对成功](../images/im/telegram/06-pair-success.png)

## 支持的命令

- `/start` — 显示帮助和可用命令
- `/projects` — 切换项目，重新显示最近项目列表
- `/status` — 查看当前会话的项目、模型、运行状态和任务摘要
- `/clear` — 清空当前会话上下文，保留项目绑定
- `/new` — 清空当前 chat 绑定的 session，并重新选择项目
- `/help` — 显示当前可用命令
- `/stop` — 向当前 session 发送 `stop_generation`

## 权限审批

当 Claude 请求敏感权限时，Telegram adapter 会发带按钮的消息：

- `✅ 允许`
- `♾️ 永久允许`
- `❌ 拒绝`

点击后 adapter 会把结果通过 `permission_response` 回传给 Desktop server。

## 返回消息的表现

Telegram 侧有一层流式缓冲：

- thinking 时先发占位消息
- text delta 逐步累积
- 完成时按 4000 字分片发送

对应公共模块：

- `adapters/common/message-buffer.ts`
- `adapters/common/format.ts`
- `adapters/common/ws-bridge.ts`

## 启动 adapter

桌面端会自动把 adapter 作为 sidecar 拉起。如果你在本地开发，需要手动启动：

```bash
cd adapters
bun install
bun run telegram
```

## 环境变量覆盖（可选）

```bash
export TELEGRAM_BOT_TOKEN="123456:ABC-DEF..."
export ADAPTER_SERVER_URL="ws://127.0.0.1:3456"
```

## 常见问题

### bot 启动时报缺少 token

说明 `TELEGRAM_BOT_TOKEN` 和 `~/.claude/adapters.json` 里的 `telegram.botToken` 都没有生效。

### 能打开设置页但 bot 不工作

Webapp 只负责配置，不会自动拉起 `bun run telegram`（桌面端发布版会通过 sidecar 自动拉起）。

### 发消息提示未授权

- 是否已经在桌面端生成配对码
- 配对码是否在 60 分钟有效期内
- 是否把码发到了正确的 bot 私聊
- 连续输错会有速率限制，等几分钟再试

### 每次重启后会话丢失

检查 `~/.claude/adapter-sessions.json` 是否能正常写入，以及 Desktop server 的 session 是否仍存在。

## 源码入口

- `adapters/telegram/index.ts`
- `adapters/common/pairing.ts`
- `adapters/common/session-store.ts`
- `adapters/common/ws-bridge.ts`
- `adapters/common/http-client.ts`
