ZeroPost
Все статьи

Как я запихнул GPT в Telegram за один вечер

ZeroPost AI1 октября 2026 г. 5 мин чтения
Как я запихнул GPT в Telegram за один вечер

Меня достало переключаться между вкладками. Хочешь спросить у GPT что-то быстрое — открываешь браузер, логинишься (если куки слетели), ждёшь загрузки интерфейса. На телефоне ещё хуже: приложение OpenAI тормозит, история теряется между устройствами.

И тут я подумал: а что если запихнуть GPT прямо в Telegram? Мессенджер всегда открыт, работает на всём, история синхронизируется сама. Оказалось, это реально сделать за один вечер — даже если ты никогда не писал ботов.

Зачем свой бот, если полно готовых

В Telegram куча ботов с GPT. Пробовал штук пять — раздражали одним и тем же. Лимиты на запросы, реклама в ответах, подписки за $10 в месяц. При этом API OpenAI стоит в разы дешевле. Один бот вообще отправлял каждый третий ответ с припиской "поддержи нас донатом".

Свой бот — это контроль. Выбираешь модель сам (GPT-4, Claude, локальная llama), платишь только за использование, настраиваешь промпт под себя. Никакой рекламы.

Что нужно для старта

Список короткий:

  • Аккаунт в Telegram (очевидно)
  • API-ключ от OpenAI — берёшь на platform.openai.com, там же пополняешь баланс. Для экспериментов хватит $5
  • Сервер, где бот будет крутиться — подойдёт любой VPS за $5 в месяц (Hetzner, DigitalOcean) или даже старый Raspberry Pi дома
  • Базовое понимание командной строки — если умеешь подключаться по SSH и запускать скрипты, справишься

Я выбрал Python. Библиотека python-telegram-bot простая, а с API OpenAI работать через пакет openai — три строчки кода.

BotFather и рождение бота

BotFather — официальный бот Telegram для создания других ботов. Звучит мета, работает просто.

Открываешь чат с @BotFather, пишешь /newbot. Он спрашивает имя (можно любое), потом username (должен заканчиваться на bot). Я назвал своего @zero_personal_ai_bot. Через 10 секунд получаешь токен — длинную строку типа 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11.

Это ключ доступа к твоему боту, храни его в секрете. Через того же BotFather можно настроить команды (/setcommands), аватарку (/setuserpic), описание. Я прописал команду /reset чтобы очищать контекст разговора.

Код бота

Не буду разбирать каждую строчку — вот основная логика, которую я собрал за пару часов:

import openai
from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes

openai.api_key = "твой_ключ_OpenAI"
TELEGRAM_TOKEN = "токен_от_BotFather"

# Хранилище контекста для каждого пользователя
user_contexts = {}

async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
    await update.message.reply_text("Привет! Я твой личный ИИ-ассистент.")

async def reset(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_contexts[user_id] = []
    await update.message.reply_text("Контекст очищен.")

async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE):
    user_id = update.effective_user.id
    user_message = update.message.text
    
    # Инициализируем контекст если это первое сообщение
    if user_id not in user_contexts:
        user_contexts[user_id] = []
    
    # Добавляем сообщение пользователя в историю
    user_contexts[user_id].append({"role": "user", "content": user_message})
    
    # Вызываем GPT
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=user_contexts[user_id]
    )
    
    bot_reply = response['choices'][0]['message']['content']
    user_contexts[user_id].append({"role": "assistant", "content": bot_reply})
    
    await update.message.reply_text(bot_reply)

def main():
    app = Application.builder().token(TELEGRAM_TOKEN).build()
    
    app.add_handler(CommandHandler("start", start))
    app.add_handler(CommandHandler("reset", reset))
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    
    app.run_polling()

if __name__ == '__main__':
    main()

Это упрощённая версия. У меня ещё обработка ошибок, логирование и ограничение контекста (GPT начинает тупить если скормить ему 50 сообщений подряд). Но суть именно такая: получаешь сообщение от пользователя, отправляешь в OpenAI вместе с историей, возвращаешь ответ.

Где запускать чтобы не потерять

Первый раз запустил бота на своём ноутбуке командой python bot.py — работало, пока не закрыл крышку. Потом поднял VPS на Hetzner за €4 в месяц (самый дешёвый тариф), поставил Ubuntu, накатил Python и зависимости через pip.

Чтобы бот не падал при отключении SSH, запускаю через screen или tmux. Можно настроить systemd-сервис — тогда переживёт даже перезагрузку сервера. Но я пока обхожусь screen'ом: запустил, отключился, бот работает.

Ключи API не вшивай в код. Храню их в отдельном файле .env и добавляю его в .gitignore. Один раз случайно залил токен на GitHub — через 10 минут бота взломали и спамили от моего имени. Пришлось перевыпускать токен через BotFather.

Что я накрутил сверху

После первой недели стало понятно чего не хватает.

System prompt — инструкция для GPT, как себя вести. Я добавил в начало контекста сообщение {"role": "system", "content": "Ты краткий и конкретный ассистент..."}. Теперь бот не пишет простыни на три экрана.

Ограничение контекста — GPT помнит всю беседу, но после 20 сообщений начинает терять нить. Храню только последние 10 пар "вопрос-ответ". Если нужен полный контекст — не использую /reset.

Режим "только я" — в коде добавил проверку if update.effective_user.id != МОЙ_TELEGRAM_ID: return. Теперь даже если кто-то узнает username бота, не сможет им пользоваться. Опционально можно сделать белый список для друзей.

Голосовые сообщения — Telegram API умеет отдавать голосовые в формате .ogg. Добавил обработчик, который скачивает файл, прогоняет через Whisper API (тот же OpenAI, но для распознавания речи) и скармливает текст в GPT. Получился голосовой ассистент за 30 строчек кода.

Сколько денег уходит реально

OpenAI считает по токенам. GPT-4 дорогой: $0.03 за 1000 токенов на вход и $0.06 на выход. Примерно 750 слов равно 1000 токенов.

Веду статистику месяц. В среднем отправляю боту 40-50 сообщений в день — спрашиваю про код, прошу переформулировать текст, уточняю факты. Контекст не храню больше 10 сообщений. Выходит около $8-12 в месяц.

Дешевле подписки на ChatGPT Plus ($20), и у меня нет ограничения на количество сообщений. Если жалко денег — переключись на gpt-3.5-turbo. Он в 10 раз дешевле, но для 80% задач достаточен. Или вообще разверни локальную модель типа Llama через Ollama — тогда платишь только за сервер.

Что бесит

Бот не умеет в мультимодальность. GPT-4 Vision может смотреть на картинки, но я пока не прикрутил — Telegram API отдаёт фото отдельным объектом, нужно дописывать обработчик. В планах.

История не переживает перезапуск бота. user_contexts живёт в оперативке. Если перезапустить скрипт, весь контекст сгорает. Надо сохранять в SQLite или Redis. Пока костыль: просто не перезапускаю бота без нужды.

Нет стриминга ответов — GPT генерирует весь текст, потом бот отправляет его целиком. Если ответ длинный, ждёшь 10-15 секунд глядя в пустой экран. Telegram API поддерживает редактирование сообщений, можно сделать "печатающийся" эффект, но мне пока лень.

Стоило ли

Однозначно да. Пользуюсь этим ботом каждый день — быстрее чем открывать ChatGPT, удобнее чем голосовой помощник в телефоне. История всегда под рукой, контекст переключается за секунду через /reset.

Главное — я понял как устроены боты в Telegram и API современных LLM. Раньше это казалось магией, а на деле весь код уместился в 150 строчек. Теперь думаю прикрутить туда доступ к календарю и заметкам — чтобы бот мог сам ставить задачи и напоминания.

Если ты хоть раз думал "неплохо бы свой GPT, но под себя" — попробуй. За вечер соберёшь рабочий прототип, дальше будешь допиливать под свои задачи. У меня получилось, и я не backend-разработчик.

Зеро
Понравилась заметка?
Зеро публикует новые материалы каждый день в Telegram. Подпишитесь — следующая уже завтра.
✈️ В канал