Свой ИИ‑помощник в Telegram за два дня: реальный план

Зачем вообще нужен такой бот?

Слышали про ChatGPT, но хотите, чтобы он отвечал только на ваши личные запросы? Представьте, что утром бот подскажет, какие письма требуют внимания, а вечером предложит рецепт блинов, если в холодильнике осталось только яйца и молоко. Звучит, как фантазия? На деле – несколько готовых сервисов и немного терпения, и вы уже управляете собственным «умным» ассистентом.

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

Собираем «инвентарь»:

  • Telegram‑аккаунт и BotFather – создаём нового бота, получаем токен.
  • Аккаунт в OpenAI (да, бесплатный пробный кредит). Если хотите без OpenAI – берём Hugging Face и их модель GPT‑Neo.
  • Сервис для запуска кода без серверов – Replit или Cloudflare Workers. Я использовал Replit, потому что там есть готовый шаблон «Telegram Bot».
  • Немного времени: 3‑4 часа на настройку, ещё пару часов на тесты.

Шаг за шагом: от токена до диалога

Первый вопрос: «Где хранить токен, чтобы он не вылез наружу?» В Replit открываем Secrets и кладём TELEGRAM_TOKEN и OPENAI_API_KEY. Ни один из них не попадает в публичный репозиторий.

Дальше – код. Существует готовый «скелет» в виде Python‑скрипта:

import os, requests, json
from flask import Flask, request

app = Flask(__name__)
TOKEN = os.getenv('TELEGRAM_TOKEN')
OPENAI = os.getenv('OPENAI_API_KEY')
URL = f"https://api.telegram.org/bot{TOKEN}/"

def ask_gpt(prompt):
    resp = requests.post(
        "https://api.openai.com/v1/chat/completions",
        headers={"Authorization": f"Bearer {OPENAI}"},
        json={"model":"gpt-3.5-turbo","messages":[{"role":"user","content":prompt}]}
    )
    return resp.json()["choices"][0]["message"]["content"]

@app.route(f'/{TOKEN}', methods=['POST'])
def webhook():
    data = request.get_json()
    chat_id = data['message']['chat']['id']
    text = data['message'].get('text', '')
    if text:
        reply = ask_gpt(text)
        requests.post(URL + "sendMessage", json={"chat_id": chat_id, "text": reply})
    return "ok"

if __name__ == '__main__':
    app.run()

Скрипт берёт любое сообщение, шлёт его в GPT и возвращает ответ. Звучит просто? Да, но есть нюансы. Нужно добавить обработку ошибок, чтобы бот не «упал» при сетевых глюках. Я вставил try/except, а также ограничил длину запросов до 300 символов – иначе OpenAI начинает «запихивать» слишком много текста и рачает кредит быстрее.

После загрузки кода в Replit включаем «Always On», ставим веб‑хук:

https://api.telegram.org/bot{TOKEN}/setWebhook?url={YOUR_REPLIT_URL}/{TOKEN}

Проверяем в Telegram: «Привет, бот!» – получаем осмысленный ответ от GPT. Если хотите добавить «личные» команды, просто расширяете функцию ask_gpt условием if text.startswith('/todo') и сохраняете задачи в файле todo.txt.

Тонкости, о которых часто забывают

— Ограничения модели. Бесплатный кредит OpenAI позволяет примерно 100 000 токенов. При активном использовании бот быстро их исчерпает. Решение – установить лимит запросов в час (например, 20) и хранить счётчик в Redis.

— Безопасность. Не давайте боту права админа в группах, иначе он может случайно удалять сообщения. В настройках BotFather выключ