Перейти к основному содержанию
Telegram-бот — это, наверное, самый быстрый способ дать людям доступ к нейросети: ни сайта, ни приложения, открыл чат и пишешь. Ниже — полный путь от пустой папки до работающего бота, который отвечает через Claude или GPT по вашему ключу RuAPI. Кода немного, и он копируется целиком. Мы используем OpenAI-совместимый протокол RuAPI: меняем base_url, и тот же openai SDK работает с Claude, GPT, Gemini и DeepSeek.
1

Что нужно заранее

  • Ключ RuAPIsk-.... Создаётся в Консоли: «Токены»«Создать токен». Баланс пополняется в USDT — см. пополнение.
  • Python 3.10+ — проверьте командой python --version.
  • Токен Telegram-бота — получим на следующем шаге.
2

Создайте бота в Telegram

Откройте в Telegram чат с @BotFather и отправьте команду /newbot. BotFather спросит имя бота и его username (должен заканчиваться на bot). В ответ он пришлёт HTTP API token — строку вида 123456789:AAH.... Скопируйте её, она понадобится дальше.
Токен бота — это пароль. Не публикуйте его в коде, репозитории или скриншотах. Если случайно засветили — отправьте BotFather /revoke и получите новый.
3

Установите зависимости

pip install python-telegram-bot openai
python-telegram-bot версии 21+ — это асинхронный фреймворк для Telegram. openai — клиент, который мы направим на RuAPI.
4

Напишите бота

Создайте файл bot.py. Это полностью рабочий минимальный бот: на каждое текстовое сообщение он отправляет ваш текст модели и отвечает её ответом.
bot.py
import os

from openai import OpenAI
from telegram import Update
from telegram.ext import (
    ApplicationBuilder,
    ContextTypes,
    MessageHandler,
    filters,
)

# Ключи берём из переменных окружения — не хардкодим секреты в коде.
TELEGRAM_TOKEN = os.environ["TELEGRAM_TOKEN"]
RUAPI_KEY = os.environ["RUAPI_KEY"]

# Клиент OpenAI SDK, направленный на RuAPI (OpenAI-совместимый протокол).
client = OpenAI(
    api_key=RUAPI_KEY,
    base_url="https://www.ruapi.ai/v1",
)


async def handle_message(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None:
    user_text = update.message.text

    response = client.chat.completions.create(
        model="claude-opus-4-8",  # точные имена моделей — на странице цен основного сайта
        messages=[{"role": "user", "content": user_text}],
    )
    answer = response.choices[0].message.content

    await update.message.reply_text(answer)


def main() -> None:
    app = ApplicationBuilder().token(TELEGRAM_TOKEN).build()
    app.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, handle_message))
    app.run_polling()


if __name__ == "__main__":
    main()
В примере — модель claude-opus-4-8. Тем же ключом доступны и другие модели: gpt-5, gemini-3.5-flash, deepseek-v3 и прочие. Точные имена — на странице «Цены» основного сайта.
5

Запустите

Передайте оба токена через переменные окружения и запустите скрипт:
export TELEGRAM_TOKEN="123456789:AAH..."
export RUAPI_KEY="sk-ВАШ_КЛЮЧ"
python bot.py
Бот молча запустится и начнёт слушать сообщения (run_polling опрашивает Telegram). Найдите бота в Telegram по username, напишите ему что-нибудь — и он ответит через нейросеть. Чтобы остановить, нажмите Ctrl+C.
6

Сделайте лучше

Минимальный бот не помнит контекст и отвечает на каждое сообщение с чистого листа. Несколько идей, куда расти:
  • Память диалога. Храните историю сообщений по chat_id (например, в context.chat_data) и передавайте весь список в messages=[...] — тогда бот будет помнить предыдущие реплики.
  • Системный промпт. Добавьте первым элементом {"role": "system", "content": "Ты — дружелюбный помощник..."}, чтобы задать тон и роль.
  • Команда /start. Добавьте CommandHandler("start", ...) с приветствием — так бот выглядит дружелюбнее.
  • Смена модели. Поменяйте поле model, чтобы переключиться на GPT или Gemini.
  • Дешевле для нагрузки. Если сообщений много, переведите бота на более доступную модель — gemini-3.5-flash или deepseek-v3. Качество для чата отличное, расход баланса заметно ниже.
  • Ответ по мере генерации. Включите потоковый вывод и обновляйте сообщение по ходу — на длинных ответах бот выглядит живее, чем когда долго молчит.

Если что-то пошло не так

Проверьте, что токен бота скопирован целиком и без пробелов, и что скрипт действительно запущен (run_polling должен работать, окно терминала не закрыто). Убедитесь, что вы пишете именно тому боту, которого создали у BotFather. Ошибки печатаются в терминал — посмотрите туда.
Проблема с ключом RuAPI, а не с токеном бота. Проверьте RUAPI_KEY — он должен начинаться с sk-. Посмотреть ключ можно в Консоли на странице «Токены».
Закончился баланс. Пополните его в USDT — см. пополнение.

Что дальше