> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ruapi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Телеграм-бот на нейросети (Claude/GPT)

> Соберите Telegram-бота, который отвечает через LLM, за полчаса. Python, готовый код.

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

Мы используем OpenAI-совместимый протокол RuAPI: меняем `base_url`, и тот же `openai` SDK работает с Claude, GPT, Gemini и DeepSeek.

<Steps>
  <Step title="Что нужно заранее">
    * **Ключ RuAPI** — `sk-...`. Создаётся в Консоли: **«Токены»** → **«Создать токен»**. Баланс пополняется в USDT — см. [пополнение](/ru/topup).
    * **Python 3.10+** — проверьте командой `python --version`.
    * **Токен Telegram-бота** — получим на следующем шаге.
  </Step>

  <Step title="Создайте бота в Telegram">
    Откройте в Telegram чат с [@BotFather](https://t.me/BotFather) и отправьте команду `/newbot`. BotFather спросит имя бота и его username (должен заканчиваться на `bot`). В ответ он пришлёт **HTTP API token** — строку вида `123456789:AAH...`. Скопируйте её, она понадобится дальше.

    <Warning>
      Токен бота — это пароль. Не публикуйте его в коде, репозитории или скриншотах.
      Если случайно засветили — отправьте BotFather `/revoke` и получите новый.
    </Warning>
  </Step>

  <Step title="Установите зависимости">
    ```bash theme={null}
    pip install python-telegram-bot openai
    ```

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

  <Step title="Напишите бота">
    Создайте файл `bot.py`. Это полностью рабочий минимальный бот: на каждое текстовое сообщение он отправляет ваш текст модели и отвечает её ответом.

    ```python bot.py theme={null}
    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",  # точные имена моделей — на www.ruapi.ai
            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()
    ```

    <Note>
      В примере — модель `claude-opus-4-8`. Тем же ключом доступны и другие модели:
      `gpt-5.4`, `gemini-3.5-flash`, `deepseek-v4-pro` и прочие. Точные имена — на странице
      **«Цены»** на [www.ruapi.ai](http://www.ruapi.ai).
    </Note>
  </Step>

  <Step title="Запустите">
    Передайте оба токена через переменные окружения и запустите скрипт:

    ```bash theme={null}
    export TELEGRAM_TOKEN="123456789:AAH..."
    export RUAPI_KEY="sk-ВАШ_КЛЮЧ"
    python bot.py
    ```

    Бот молча запустится и начнёт слушать сообщения (`run_polling` опрашивает Telegram). Найдите бота в Telegram по username, напишите ему что-нибудь — и он ответит через нейросеть. Чтобы остановить, нажмите `Ctrl+C`.
  </Step>

  <Step title="Сделайте лучше">
    Минимальный бот не помнит контекст и отвечает на каждое сообщение с чистого листа. Несколько идей, куда расти:

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

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

<AccordionGroup>
  <Accordion title="Бот молчит, не отвечает на сообщения">
    Проверьте, что токен бота скопирован целиком и без пробелов, и что скрипт
    действительно запущен (`run_polling` должен работать, окно терминала не
    закрыто). Убедитесь, что вы пишете именно тому боту, которого создали у
    BotFather. Ошибки печатаются в терминал — посмотрите туда.
  </Accordion>

  <Accordion title="Ошибка 401 (Unauthorized)">
    Проблема с ключом **RuAPI**, а не с токеном бота. Проверьте `RUAPI_KEY` —
    он должен начинаться с `sk-`. Посмотреть ключ можно в Консоли на
    странице **«Токены»**.
  </Accordion>

  <Accordion title="Ошибка 402 (Payment Required)">
    Закончился баланс. Пополните его в USDT — см. [пополнение](/ru/topup).
  </Accordion>
</AccordionGroup>

## Что дальше

* [Быстрый старт](/ru/quickstart) — основы работы с API и `base_url`.
* [Ошибки и их решения](/ru/errors) — что означают коды ответов.
* Вопросы? [support@ruapi.ai](mailto:support@ruapi.ai)
