Свой ИИ‑помощник в 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 выключ
Комментарии