Как сделать Telegram-бота на GPT или Claude
Чтобы сделать Telegram-бота на GPT, хватит двух библиотек: aiogram 3 принимает сообщения, OpenAI SDK отправляет их модели. Если в клиенте указать base_url https://api.pro-ai.online/v1, бот будет работать с GPT и Claude из России без VPN, а API вы оплатите российской картой.
Как подключить
- Получите два ключа
Токен бота выдаёт BotFather в Telegram по команде /newbot. API-ключ вида sk-cxa-... скопируйте в кабинете Pro AI API. После подключения нашего Telegram-бота и подписки на канал там будет 30 ₽ на пробу.
- Поставьте библиотеки
Выполните pip install aiogram openai. Токен бота и API-ключ положите в переменные окружения BOT_TOKEN и OPENAI_API_KEY, в коде их быть не должно.
- Проверьте запрос к модели
В примере ниже впишите свой ключ в параметр api_key и запустите его. Если он напечатал ответ, ключ и адрес верные, можно собирать бота.
Примеры кода
Ключ храните в переменной окружения, а не в коде. Все модели и адреса — в документации.
Python (OpenAI SDK)
from openai import OpenAI
client = OpenAI(base_url="https://api.pro-ai.online/v1", api_key="sk-cxa-...")
reply = client.chat.completions.create(
model="gpt-6-luna",
messages=[{"role": "user", "content": "Привет! Что ты умеешь?"}],
)
print(reply.choices[0].message.content)Когда стоит писать своего бота, а когда хватит готового
Если вам нужен ChatGPT или Claude в Telegram для себя, код писать незачем. Для этого есть наш Telegram-бот, а без регистрации можно начать с бесплатного чата на странице /besplatnyj-chat-gpt.
Свой бот оправдан, когда у него должна быть ваша логика. Он отвечает клиентам по базе знаний, принимает заявки или работает в группе с заданной ролью. Ниже как раз про такого бота. Код ниже рассчитан на Python, но та же схема переносится на Node.js с библиотекой grammY или Telegraf.
Что понадобится для Telegram-бота на GPT
Подойдёт Python 3.10 или новее. Сообщения удобно принимать через aiogram 3: библиотека асинхронная, и пока модель думает над одним ответом, бот принимает сообщения от других людей. python-telegram-bot с версии 20 тоже асинхронная, схема с ней та же, отличаются имена классов.
К модели обращается официальный пакет openai. Пример на странице использует синхронный клиент OpenAI, в боте берите асинхронный AsyncOpenAI с теми же api_key и base_url. Остальной код пишется по документации OpenAI.
- Токен бота от BotFather в переменной окружения BOT_TOKEN.
- Ключ Pro AI API в переменной OPENAI_API_KEY: SDK читает её сам.
- Адрес https://api.pro-ai.online/v1 в параметре base_url или в переменной OPENAI_BASE_URL.
- ID модели: gpt-6-luna для быстрых ответов, gpt-6-sol для сложных, claude-sonnet-5 для Claude.
Как устроен код бота на aiogram 3
Основа умещается в три десятка строк. Создаёте Bot с токеном из os.environ["BOT_TOKEN"], Dispatcher и один обработчик текстовых сообщений с фильтром F.text. В обработчике вызываете client.chat.completions.create с моделью и списком сообщений и отправляете ответ через message.answer. Запуск: dp.start_polling(bot) внутри asyncio.run.
Клиент AsyncOpenAI создавайте один раз при старте. Запрос к модели оборачивайте в try/except: сеть может моргнуть, баланс может закончиться, и человек должен получить хотя бы «Не получилось, попробуйте через минуту».
Пока модель отвечает, отправляйте действие typing через bot.send_chat_action. Пользователь увидит «печатает…» и не станет слать вопрос повторно.
На старте хватит polling: бот сам опрашивает Telegram и работает хоть на домашнем компьютере. На сервере с доменом и HTTPS можно перейти на webhook. aiogram поддерживает оба режима, код обработчиков при этом не меняется.
История диалога: как бот помнит разговор
Между запросами модель ничего не помнит. Чтобы бот понимал контекст, на каждый запрос отправляйте переписку целиком: системное сообщение с ролью бота, затем чередование user и assistant.
Для начала хватит словаря в памяти, где ключ chat.id, а значение список сообщений. После перезапуска он обнулится, так что в рабочем боте историю храните в SQLite или Redis. Добавьте команду /reset, которая очищает историю: люди часто хотят начать заново.
Характер бота задаёт системное сообщение. Опишите в нём, кто он, на какие темы отвечает, что делать с вопросами не по теме и на каком языке писать. Чем конкретнее инструкция, тем реже бот уходит в сторону.
Ограничение длины контекста и ответа
Вся история едет в каждый запрос заново и оплачивается как входные токены. Разговор на сотню реплик стоит заметно дороже первого вопроса и рано или поздно упрётся в лимит контекста модели.
Проще всего хранить последние 20 сообщений плюс системное. Точнее считать токены по полю usage из ответа и обрезать историю, когда сумма переходит ваш порог. Если ранний контекст важен, раз в несколько десятков реплик просите модель сжать начало разговора в выжимку и подставляйте её вместо старых сообщений.
Длину ответа ограничивает параметр max_tokens. У Telegram свой предел, 4096 символов на сообщение, и длинный ответ придётся резать на части.
В группе стоит ограничить и частоту, например несколько запросов в минуту от одного человека. Иначе любопытный участник отправит сотню сообщений подряд, и каждое уйдёт в модель за ваш счёт.
Стриминг: ответ появляется по мере генерации
С параметром stream=True модель отдаёт ответ кусками, и первые слова приходят почти сразу. В Telegram это выглядит так: бот отправляет сообщение-заглушку и потом редактирует его через bot.edit_message_text, дописывая накопленный текст.
Редактировать на каждый кусок не получится, Telegram ограничивает частоту запросов и вернёт Too Many Requests. Обновляйте сообщение примерно раз в секунду, а финальный текст отправьте последним редактированием. Если текст не изменился, Telegram тоже вернёт ошибку, её достаточно поймать и пропустить.
Короткие ответы можно отправлять и без стриминга. Он заметен, когда модель пишет абзац или больше и человек иначе ждал бы ответа в тишине.
GPT или Claude: какую модель поставить в бота и сколько это стоит
Модель меняется одной строкой, поэтому вынесите её в переменную окружения и переключайте без правки кода. Через тот же адрес /v1/chat/completions работают и GPT, и Claude, и, например, deepseek-v4-flash.
Ориентир по цене: типичный ответ GPT-6 Sol на 2000 токенов вопроса и 800 ответа стоит у нас около 0,22 ₽, Claude Opus 5.5 около 0,33 ₽. Если 50 человек задают боту по 20 вопросов в день, это тысяча ответов и около 220 ₽ в день на GPT-6 Sol. С длинной историей вход растёт, и цена ответа тоже, поэтому обрезка контекста экономит деньги напрямую.
- gpt-6-luna: быстрые короткие ответы, поддержка, бот с частыми вопросами. Стоит дешевле GPT-6 Sol.
- gpt-6-sol: сложные вопросы, длинные тексты, разбор документов.
- claude-sonnet-5: если вам ближе стиль Claude или бот помогает с кодом.
- Точная цена каждого запроса видна в кабинете, в разделе «Расход».
Чек-лист перед запуском: ошибки и их признаки
У новых ботов проблемы обычно одни и те же. Пройдитесь по списку до того, как отдавать бота людям.
- Бот отвечает 401 на каждый запрос: ключ скопирован не целиком или в переменной окружения старый ключ.
- SDK получает 404: base_url не заканчивается на /v1.
- Бот молчит в группе: включён privacy mode в BotFather, и бот видит только команды и ответы на свои сообщения.
- Длинный ответ не отправляется: текст больше 4096 символов, его нужно разбить.
- Ответ приходит через десятки секунд: модель тяжелее, чем нужно задаче. Попробуйте gpt-6-luna или включите стриминг.
- Токен попал в git или в чат: перевыпустите его в BotFather командой /revoke.
- Запросы перестали проходить: закончился баланс. Пополните его, ключ и настройки при этом не меняются.
До 78% дешевле официальных цен
Сколько стоят 1 000 типичных ответов: вопрос на страницу, ответ на полстраницы.
| Модель | Официально | У нас |
|---|---|---|
| GPT‑6 Astra | 1 090 ₽ −78% | |
| GPT‑6 Sol | 220 ₽ −78% |
Официальные цены — по прайсам Anthropic, OpenAI на 4 октября 2026, курс 83,48 ₽ за $1. Точное списание зависит от длины запроса и видно в кабинете.
Частые вопросы
Будет ли бот работать с российского сервера?
Да. Бот обращается к API Telegram и к api.pro-ai.online, оба адреса открываются из России без VPN.
Можно сделать бота на Claude без Anthropic SDK?
Да. В OpenAI SDK с адресом https://api.pro-ai.online/v1 достаточно указать модель claude-sonnet-5.
Подойдёт ли python-telegram-bot вместо aiogram?
Подойдёт. Запрос к модели пишется одинаково, меняется только код приёма и отправки сообщений.
А если я не хочу программировать?
Тогда пользуйтесь нашим Telegram-ботом или бесплатным чатом на сайте, свой бот для этого не нужен.
Как оплатить API для бота?
Пополните баланс картой российского банка, через СБП или криптовалютой, от 50 ₽. Деньги списываются только за ответы модели.
Можно запустить бота на пробных деньгах?
Да, для отладки их хватит. За подключение нашего Telegram-бота и подписку на канал начисляем 30 ₽, это больше сотни типичных ответов GPT-6 Sol.