> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ruapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# 不写代码自建 AI Telegram 机器人：GPT、Claude、DeepSeek

> 用免费的 Cloudflare Workers 托管，搭自己的 AI Telegram 机器人：ChatGPT-Telegram-Workers 项目＋RuAPI 密钥，附机器人全部命令

搭一个属于自己的 Telegram 机器人，用 RuAPI 上的 GPT、Claude、DeepSeek 等模型回答。我们用开源项目 [ChatGPT-Telegram-Workers](https://github.com/TBXark/ChatGPT-Telegram-Workers)（MIT 许可）：它跑在 Cloudflare Workers 免费套餐上，不需要服务器和域名。默认只有机器人主人能和它对话，陌生人花不了你的余额。

本文于 2026-11-09 按项目当前版本实测。全程不用写代码。想自己用 Python 写机器人，见 [Telegram 机器人示例](https://docs.ruapi.ai/zh/recipes/telegram-bot.md)。

## 准备

* **RuAPI 密钥。** 控制台 →「**令牌管理**」→ 创建 `sk-...` 密钥。新用户一般注册后就有体验额度，可以用 `deepseek-flash`、`claude-haiku-5-5`、`gpt-6-luna`。用其他模型要先充值——见[充值](https://docs.ruapi.ai/zh/topup.md)。
* **Cloudflare 账号**（免费）。
* **GitHub 或 GitLab 账号。** Cloudflare 会把机器人代码复制进去。最好用一个单独的空账号，原因见下文。
* **Telegram**，手机或电脑都行。

## 第 1 步：创建机器人，查自己的 ID

**1. 在 @BotFather 建机器人**

打开 [@BotFather](https://t.me/BotFather)，发 `/newbot`，起一个名字和以 `_bot` 结尾的用户名。BotFather 会回一串 **Token**，保存好，别给别人看。

**2. 查你的 Telegram ID**

打开 [@userinfobot](https://t.me/userinfobot)，发 `/start`。它会回一个数字 `Id`，这就是你的 **ADMIN\_ID**。

## 第 2 步：部署到 Cloudflare

**1. 打开部署链接**

[deploy.workers.cloudflare.com/?url=https://github.com/TBXark/ChatGPT-Telegram-Workers](https://deploy.workers.cloudflare.com/?url=https://github.com/TBXark/ChatGPT-Telegram-Workers)，登录 Cloudflare。

**2. 连接 Git 账号**

不连 GitHub 或 GitLab 就没法部署（提示 **Connect a Git account to continue**）。点连接 GitHub 的按钮并授权。

> [!WARNING]
>
> 在 GitHub 的「Install & Authorize」页面，不要把放着工作代码的主账号的**全部仓库**授权给它：Cloudflare 会因此能读、能改这些仓库。最稳妥的是连一个单独的空 GitHub 账号，那里放心选 **All repositories**。

**3. 填表**

| 字段 | 填什么 |
| - | - |
| 创建专用 Git 存储库（勾选框） | 打勾 |
| 项目名称 | 随意，例如 `my-ai-bot` |
| KV 命名空间 | 新建，名字随意 |
| **TELEGRAM\_TOKEN** | @BotFather 给的 Token |
| **ADMIN\_ID** | @userinfobot 给的数字 |
| **ADMIN\_PASSWORD** | 一个长的随机密码 |

> [!NOTE]
>
> **ADMIN\_PASSWORD** 标着「可选」，但不填表单交不上去。填一个 20 位以上的随机密码并保存好：用它能打开机器人后台，你的 RuAPI 密钥就存在那里。

构建命令、部署命令保持默认。**不要开 Cloudflare Access 保护**，开了 Telegram 的消息就送不进机器人。

**4. 开始部署**

构建约 1 分钟，等所有阶段都变成绿勾。

## 第 3 步：打开 workers.dev 地址

新项目的 `*.workers.dev` 地址可能默认是关的，关着 Telegram 就连不上机器人。打开项目 →「域」（Domains）标签 → 打开生产（Production）地址那一行的开关。预览（Preview）那一行可能跟着一起打开，没有影响。复制生产地址，下一步要用。

「任何拥有此 URL 的人都可以访问」不用担心：能和机器人对话的只有 ADMIN\_ID，后台有密码。

## 第 4 步：登录后台，绑定 webhook

**1. 登录后台**

打开 `https://<你的项目>.<你的子域>.workers.dev/admin`，用 **ADMIN\_PASSWORD** 登录。

**2. 绑定 webhook**

在同一个浏览器里打开 `https://<你的项目>.<你的子域>.workers.dev/init`，看到 **Webhook bound successfully** 就成功了。

![/init 页面：Webhook bound successfully](https://mintcdn.com/no-d0cfaf14/Roh7O5xGZZfXpuRd/images/telegram-bot/init-success.webp?fit=max\&auto=format\&n=Roh7O5xGZZfXpuRd\&q=85\&s=ddf933369c4bba986cc475b4773e4d6b)

如果显示 `Unauthorized. Open /admin, log in, then retry.`，说明还没登录后台。回到上一步登录，再点 **Retry**。

![/init 页面：Unauthorized. Open /admin, log in, then retry.](https://mintcdn.com/no-d0cfaf14/Roh7O5xGZZfXpuRd/images/telegram-bot/init-unauthorized.webp?fit=max\&auto=format\&n=Roh7O5xGZZfXpuRd\&q=85\&s=ec0db7571a63dba6ebd3563800b1194b)

## 第 5 步：接上 RuAPI

在后台「**Chat**」标签点 **Add Provider**：

| 字段 | 值 |
| - | - |
| **Name** | `RuAPI` |
| **API Format** | `OpenAI Chat Completions` |
| **Base URL** | `https://www.ruapi.ai/v1`  ——**带** `/v1`，不要加 `/chat/completions` |
| **API Key** | `sk-你的密钥` |
| **API Key Header** | 留空（只有 Azure 用） |

![机器人后台：Add Provider 表单和 API Format 选项](https://mintcdn.com/no-d0cfaf14/Roh7O5xGZZfXpuRd/images/telegram-bot/add-provider.webp?fit=max\&auto=format\&n=Roh7O5xGZZfXpuRd\&q=85\&s=c47f282279fea3e8cccbe859dcba1ce7)

**1. 模型**

点 **Fetch Models**，会拉回 RuAPI 的模型列表。点要用的模型旁边的 **+**，例如 `deepseek-flash`、`claude-haiku-5-5`、`gpt-6-luna`。拉不下来就用 **Add Model** 手动加，准确的模型 ID 见[价格页](https://www.ruapi.ai/pricing?utm_source=docs\&utm_campaign=zh-telegram-bot)。

![机器人后台：Fetch Models 拉回了 RuAPI 的模型列表](https://mintcdn.com/no-d0cfaf14/Roh7O5xGZZfXpuRd/images/telegram-bot/fetch-models.webp?fit=max\&auto=format\&n=Roh7O5xGZZfXpuRd\&q=85\&s=c5ec6919f34bca3a10906a3af276d5e8)

**2. 默认模型**

在「**Models**」列表里点一个模型，打勾的就是默认模型。建议先用 `deepseek-flash`，是最便宜的模型之一，见[价格页](https://www.ruapi.ai/pricing?utm_source=docs\&utm_campaign=zh-telegram-bot)。

**3. 设 RuAPI 为默认并保存**

点 **Set as Default**，再点 **Save**。服务商列表里 RuAPI 旁边应该出现勾。如果有多个服务商，不设的话机器人可能不走 RuAPI。

![机器人后台：RuAPI 的模型和 Set as Default 按钮](https://mintcdn.com/no-d0cfaf14/Roh7O5xGZZfXpuRd/images/telegram-bot/set-default.webp?fit=max\&auto=format\&n=Roh7O5xGZZfXpuRd\&q=85\&s=4302b9e3381aa8a65e871f78ff98594e)

![机器人后台：服务商列表里 RuAPI 打了勾](https://mintcdn.com/no-d0cfaf14/Roh7O5xGZZfXpuRd/images/telegram-bot/providers-list.webp?fit=max\&auto=format\&n=Roh7O5xGZZfXpuRd\&q=85\&s=fa3ee6932dea7a918b21c53ea8a19f3e)

## 第 6 步：测试

在 Telegram 里打开你的机器人：

1. 发 `/start`，机器人会回「新的对话已经开始」。机器人的界面提示默认就是中文，想改成英文发 `/setenv settings.language=en`；要让 **/** 命令菜单也变成英文，再在浏览器里打开一次 `/init`。
2. 发「你好，用一句话介绍你自己」，回答会边生成边显示。
3. 发 `/models` → **RuAPI** → 换一个模型，发 `/new`，再问一句。
4. 发一张照片，问「图里有什么」。`deepseek-flash` 看不了图，发图前先换成 `claude-haiku-5-5` 之类的模型。哪些模型能看图见[图片输入](https://docs.ruapi.ai/zh/vision.md)。

> [!WARNING]
>
> **换了模型，记得发 `/new`。** `/models` 只换模型，不换对话：机器人会把之前的聊天记录整段发给新模型，新模型会把前一个模型的回答当成自己说的。比如 `deepseek-flash` 回答过之后换成 Claude，Claude 可能也说自己是 DeepSeek，还会沿用前一个模型的风格和错误。而且旧记录每次都要重新计费。发 `/new` 清空记录，新模型从头开始。

机器人的请求可以在 RuAPI 控制台 →「**使用日志**」里看到。

## 机器人全部命令

Telegram 菜单里的命令（输入框旁边的 **/** 按钮）：

| 命令 | 作用 |
| - | - |
| `/new` | 开新对话，机器人忘掉之前的聊天记录 |
| `/redo` | 重新生成上一条回答。`/redo 文字`：把上一个问题换成新文字再回答 |
| `/models` | 用按钮选服务商和模型。换完模型发 `/new` |
| `/img 描述` | 生成图片。要先在后台「**Image**」标签加一个画图服务商才能用 |
| `/admin` | 在 Telegram 里直接打开后台（Mini App） |
| `/help` | 命令列表 |

菜单里没有、但能用的命令：

| 命令 | 作用 |
| - | - |
| `/start` | 和 `/new` 一样，另外显示聊天 ID |
| `/system` | 查看当前服务商和模型 |
| `/version` | 机器人版本，以及有没有新版本 |
| `/setenv 键=值` | 改一项设置 |
| `/setenvs {"settings":{"language":"en","maxHistoryLength":10}}` | 用一段 JSON 同时改几项设置（要写成嵌套结构，键名不带点） |
| `/delenv 键` | 把某项 `settings.*` 设置恢复默认 |

私聊里 `/admin`、`/system`、`/setenv`、`/setenvs`、`/delenv` 只有 ADMIN\_ID 能用。直接发一段 JSON（前面不带命令）会被当成普通文字发给模型，改不了设置。

## 常用设置

可以在后台「**Settings**」标签改，也可以用 `/setenv`：

| 设置 | 命令 |
| - | - |
| 菜单和界面提示的语言：`en`、`zh-cn`（默认）、`zh-hant`、`pt`，没有俄语。模型回答用什么语言跟着你的提问走，不受这项影响 | `/setenv settings.language=en` |
| 系统提示词：机器人的角色和风格 | `/setenv settings.systemInitMessage=你是一个简洁的助手` |
| 每次带给模型的最近消息条数（默认 20） | `/setenv settings.maxHistoryLength=10` |
| 发原尺寸照片给模型。默认机器人取的是缩小版：更省钱，但照片里的小字模型可能看不清 | `/setenv settings.telegramPhotoSizeOffset=-1` |

恢复默认：`/delenv settings.systemInitMessage`。

想让朋友也能用，在「**Settings**」里把他们的 Telegram ID 加进允许的用户。他们的请求都从你的 RuAPI 余额扣。注意：朋友也能用 `/models` 换模型，而且换了对所有人生效。模型列表里最好只留便宜的模型。

## 费用

* Cloudflare：个人用的机器人，Workers 免费套餐一般够用。
* RuAPI：按 token 计费，见[价格](https://www.ruapi.ai/pricing?utm_source=docs\&utm_campaign=zh-telegram-bot)。机器人每发一条消息都会把聊天记录重新发给模型，所以聊得越长，每次回答越贵。换话题时发 `/new`。
* 用 Claude 时，RuAPI 会自动缓存对话里重复的开头部分：两次发言间隔不超过 5 分钟，重复发送的聊天记录就更便宜——见[提示缓存](https://docs.ruapi.ai/zh/prompt-caching.md)。

## 出问题时

> [accordion] Connect a Git account to continue
>
> Cloudflare 部署必须连 GitHub 或 GitLab，这一步跳不过去。连一个单独的空账号（见第 2 步）。

> [accordion] 表单交不上去：ADMIN\_PASSWORD 提示必填
>
> 这一栏实际上是必填的，填一个长的随机密码。

> [accordion] /init 提示 Unauthorized
>
> 先打开 `/admin` 用 ADMIN\_PASSWORD 登录，再打开 `/init` 点 **Retry**。

> [accordion] 机器人不回话
>
> * 确认 workers.dev 地址已打开（第 3 步），`/init` 显示成功。
> * Cloudflare Access 要关着。
> * ADMIN\_ID 填的是 @userinfobot 给的数字 ID，不是用户名。

> [accordion] 模型说自己是另一个模型
>
> 用 `/models` 换模型后，机器人还接着原来的对话，新模型会看到「自己」之前说过的话。比如 DeepSeek 回答过之后换成 Claude，Claude 可能也说自己是 DeepSeek。换模型后发 `/new`。

> [accordion] 报错让你先用体验模型
>
> 充值前只能用 `deepseek-flash`、`claude-haiku-5-5`、`gpt-6-luna`。在 `/models` 里选其中一个，或[充值](https://docs.ruapi.ai/zh/topup.md)。

> [accordion] 后台打不开
>
> 后台和 `/init` 都通过 `*.workers.dev` 地址打开。如果你所在的地区打不开或者很慢，换个网络试试。和机器人聊天走的是 Telegram，不受影响。

> [accordion] 401 / 密钥无效
>
> * API Key 要填 RuAPI 的 `sk-...` 密钥。
> * Base URL 要一字不差地填 `https://www.ruapi.ai/v1`。

## 安全

* RuAPI 密钥和机器人 Token 存在你自己的 Cloudflare 账号里，不会进 Git 仓库。
* 可以给机器人单独建一个设了额度上限的 RuAPI 密钥，最坏情况也只会花到上限为止。
* 不用了：在 Cloudflare 删掉 Worker，在 @BotFather 用 `/deletebot` 删掉机器人，在 RuAPI 控制台删掉密钥，在 GitHub 删掉自动建的仓库。到 GitHub（**Settings → Applications**）撤销 Cloudflare 的授权。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.