> ## 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.

# Свой Telegram-бот с ИИ без кода: GPT, Claude, DeepSeek

> Как сделать свой Telegram-бот с нейросетью на бесплатном хостинге Cloudflare Workers: проект ChatGPT-Telegram-Workers, ключ RuAPI и все команды бота

Свой бот в Telegram, который отвечает с помощью моделей GPT, Claude, DeepSeek и других из RuAPI. Используем открытый проект [ChatGPT-Telegram-Workers](https://github.com/TBXark/ChatGPT-Telegram-Workers) (лицензия MIT): он работает на бесплатном тарифе Cloudflare Workers, свой сервер и домен не нужны. По умолчанию с ботом может общаться только владелец, поэтому посторонние не потратят ваш баланс.

Инструкция проверена 09.11.2026 на актуальной версии проекта. Программировать не нужно. Хотите написать бота сами на Python — см. [Телеграм-бот на нейросети](https://docs.ruapi.ai/ru/recipes/telegram-bot.md).

## Что понадобится

* **Ключ RuAPI.** Консоль → **API-ключи** → создайте ключ `sk-...`. Новым пользователям обычно сразу начисляется пробный баланс, на нём доступны `deepseek-flash`, `claude-haiku-5-5` и `gpt-6-luna`. Для остальных моделей пополните баланс — см. [Пополнение](https://docs.ruapi.ai/ru/topup.md).
* **Аккаунт Cloudflare** (бесплатный).
* **Аккаунт GitHub или GitLab.** Cloudflare скопирует в него код бота. Лучше взять отдельный пустой аккаунт — ниже объясняем почему.
* **Telegram** на телефоне или компьютере.

## Шаг 1. Создайте бота и узнайте свой ID

**1. Бот в @BotFather**

Откройте [@BotFather](https://t.me/BotFather), отправьте `/newbot`, придумайте имя и username, который заканчивается на `_bot`. BotFather пришлёт **токен** — сохраните его, никому не показывайте.

**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 namespace | создать новый, имя любое |
| **TELEGRAM\_TOKEN** | токен от @BotFather |
| **ADMIN\_ID** | число от @userinfobot |
| **ADMIN\_PASSWORD** | длинный случайный пароль |

> [!NOTE]
>
> **ADMIN\_PASSWORD** подписан как необязательный, но без него форма не отправится. Придумайте длинный случайный пароль (20+ символов) и сохраните: с ним открывается админка бота, где лежит ваш ключ RuAPI.

Команды сборки и деплоя оставьте как есть. **Защиту Cloudflare Access не включайте** — она закроет боту приём сообщений от Telegram.

**4. Запустите деплой**

Сборка идёт около минуты. Дождитесь, пока все этапы станут зелёными.

## Шаг 3. Включите адрес workers.dev

В новых проектах адрес `*.workers.dev` бывает выключен, и тогда Telegram не может достучаться до бота. Откройте проект → вкладка с доменами (Domains) → включите переключатель у адреса Production. Адрес Preview может включиться вместе с ним — это не мешает. Скопируйте адрес Production — он понадобится дальше.

Надписи «доступ есть у всех, кто знает 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=ru-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=ru-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. `/setenv settings.language=en` — служебные сообщения бота по умолчанию на китайском, русского языка в боте нет, поэтому переключите на английский. Чтобы меню команд **/** тоже стало английским, ещё раз откройте `/init` в браузере. На ответы модели это не влияет: она отвечает на языке вашего вопроса.
2. `/start` — бот ответит, что начат новый диалог.
3. Напишите «Привет, представься одной фразой» — ответ появляется постепенно, по мере генерации.
4. `/models` → **RuAPI** → выберите другую модель, отправьте `/new` и спросите что-нибудь ещё.
5. Отправьте фото с вопросом «что на картинке?». `deepseek-flash` картинки не видит — для фото переключитесь, например, на `claude-haiku-5-5`. Какие модели понимают изображения — см. [Изображения](https://docs.ruapi.ai/ru/vision.md).

> [!WARNING]
>
> **Сменили модель — отправьте `/new`.** `/models` меняет только модель, а диалог продолжается: бот снова отправляет новой модели всю прошлую переписку, и она принимает чужие ответы за свои. Например, после ответа `deepseek-flash` модель 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 (вложенный 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`.

Чтобы ботом пользовались друзья, добавьте их Telegram ID в список разрешённых пользователей на вкладке **Settings**. Все их запросы списываются с вашего баланса RuAPI. Учтите: друзья тоже могут менять модель через `/models`, и она меняется для всех. Оставьте в списке Models только недорогие модели.

## Расходы

* Cloudflare: для личного бота обычно хватает бесплатного тарифа Workers.
* RuAPI: оплата за токены по [ценам](https://www.ruapi.ai/pricing?utm_source=docs\&utm_campaign=ru-telegram-bot). С каждым сообщением бот заново отправляет модели историю диалога, поэтому в длинной переписке каждый следующий ответ стоит дороже. Начинайте `/new`, когда меняете тему.
* Для Claude RuAPI автоматически кэширует повторяющееся начало диалога: если между сообщениями проходит не больше 5 минут, повторно отправленная история стоит дешевле — см. [Кэширование промптов](https://docs.ruapi.ai/ru/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 — это ваш числовой ID от @userinfobot, а не username.

> [accordion] Модель называет себя другой моделью
>
> После `/models` бот продолжает старый диалог, и новая модель видит, что «она» писала раньше. Например, Claude после ответа DeepSeek может назвать себя DeepSeek. Отправьте `/new` после смены модели.

> [accordion] Ошибка «Начните с пробной модели…»
>
> Пока баланс не пополнен, работают только `deepseek-flash`, `claude-haiku-5-5` и `gpt-6-luna`. Выберите одну из них в `/models` или [пополните баланс](https://docs.ruapi.ai/ru/topup.md).

> [accordion] Админка не открывается
>
> Админка и `/init` открываются через адрес `*.workers.dev`. Если в вашем регионе он не открывается или грузится очень медленно, попробуйте другую сеть. Переписка с ботом идёт через Telegram и от этого не зависит.

> [accordion] 401 / неверный ключ
>
> * API Key — ключ RuAPI `sk-...`.
> * Base URL — ровно `https://www.ruapi.ai/v1`.

## Безопасность

* Ключ RuAPI и токен бота хранятся в вашем аккаунте Cloudflare и не попадают в Git-репозиторий.
* Можно создать для бота отдельный ключ RuAPI с лимитом расходов — тогда в худшем случае бот потратит не больше лимита.
* Если бот больше не нужен: удалите Worker в Cloudflare, бота — командой `/deletebot` в @BotFather, ключ — в консоли RuAPI, созданный репозиторий — в GitHub. В настройках GitHub (**Settings → Applications**) отзовите доступ Cloudflare.


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