Telegram-бот + NeuroAPI: aiogram и OpenAI SDK
Рабочая схема Telegram-бота на Python: токен от BotFather, ключ NeuroAPI в окружении, асинхронный OpenAI-клиент и честные ограничения стриминга.
Короткий ответ
Краткий ответ
Telegram-бот на Python с NeuroAPI: токен бота от BotFather, ключ NeuroAPI в переменных, AsyncOpenAI с base_url https://neuroapi.host/v1, лимиты и деплой.
98
моделей в каталоге
Публичный каталог /price на 18.10.2026; список для бота можно получать через GET /v1/models.
/v1
базовый адрес
https://neuroapi.host/v1 — параметр base_url в клиенте OpenAI.
3
тарифа доступа
Пилот, Смарт и Оптимальный выбираются при создании ключа под бота.
/docs
документация
Быстрый старт, форматы API и ошибки — neuroapi.host/docs (проверено 19.10.2026).
Два разных секрета
Токен бота выдаёт BotFather, ключ API — кабинет NeuroAPI. Это разные системы, и хранить их нужно раздельно.
AsyncOpenAI
Асинхронный клиент OpenAI подходит для aiogram: запрос к модели не блокирует обработку других сообщений.
base_url один раз
Адрес https://neuroapi.host/v1 задаётся при создании клиента; дальше используется обычный Chat Completions.
Лимиты — на стороне бота
НейроАПИ тарифицирует запросы, а ограничения на пользователя и частоту сообщений настраиваются в вашем боте.
Как поднять Telegram-бота на NeuroAPI
- 1
Получите токен бота и ключ API
Создайте бота у BotFather и сохраните токен. В кабинете NeuroAPI создайте API-ключ и выберите тариф. Оба секрета положите в переменные окружения.
- 2
Установите зависимости
Создайте виртуальное окружение и установите aiogram и openai: pip install aiogram openai. Версии фиксируйте в requirements.txt, чтобы деплой был воспроизводимым.
- 3
Создайте клиент и обработчик
Инициализируйте AsyncOpenAI с base_url https://neuroapi.host/v1 и ключом NeuroAPI, а в обработчике сообщений вызывайте chat.completions.create с точным ID модели.
- 4
Добавьте лимиты и учёт расхода
Ограничьте длину истории и число запросов на пользователя, сохраняйте usage из ответа. Ошибки 401, 404, 429 разбирайте по коду ответа.
- 5
Запустите как сервис
Настройте автоперезапуск и логирование без приватного текста. Для продакшена рассмотрите webhook, для отладки достаточно long polling.
Шаги и их текст совпадают с HowTo-разметкой. Названия классов aiogram и параметры OpenAI SDK сверены с официальной документацией 19.10.2026; порядок запуска проверяйте по актуальной версии библиотек.
Как устроен бот: Telegram и NeuroAPI
Бот — это ваш сервис, который принимает обновления от Telegram Bot API и отправляет запросы к модели через API NeuroAPI. В этой цепочке два независимых секрета: токен бота (его выдаёт BotFather) и ключ NeuroAPI (его создаёт пользователь в кабинете). Токен бота даёт доступ к переписке и отправке сообщений, ключ — к оплаченным запросам модели; смешивать их нельзя.
Запрос к модели выполняется по OpenAI-совместимому протоколу, поэтому подходит официальный клиент SDK. Ключевые поля: base_url с адресом NeuroAPI, api_key с ключом и model с точным ID из каталога. Ответ приходит в обычном формате Chat Completions, а поле usage позволяет учитывать расход на каждого пользователя.
- BOT_TOKEN — только для Telegram Bot API.
- NEUROAPI_API_KEY — только для запросов к модели.
- base_url = https://neuroapi.host/v1.
- model — точный ID из /price или GET /v1/models.
Минимальный бот на aiogram и AsyncOpenAI
Документация aiogram описывает типовую структуру: Dispatcher, обработчики команд и текстовых сообщений, запуск через start_polling. Модель вызывается внутри обработчика асинхронным клиентом SDK — это важно, потому что генерация занимает секунды, и синхронный вызов заблокировал бы бота для остальных пользователей.
Историю диалога храните самостоятельно: Chat Completions не помнит предыдущие сообщения. Для простого бота достаточно передавать последние несколько реплик, а для полноценного диалога — хранить контекст по chat_id с ограничением длины. Бесконечно растущая история увеличивает и задержку, и стоимость запроса.
- Модель вызывается внутри async-обработчика.
- Клиент создаётся один раз при старте, а не на каждое сообщение.
- История — ваша ответственность, ограничивайте её длину.
- Длинные ответы можно разбивать на несколько сообщений Telegram.
Стриминг в Telegram: честные ограничения
Стриминг выглядит эффектно, но Telegram не предназначен для десятков мелких правок одного сообщения. Редактирование отправленного сообщения — отдельный вызов Bot API, и при слишком частых правках вы получите ограничение со стороны Telegram (код 429 и время ожидания). Практичный компромисс: показывать индикатор «печатает» и обновлять сообщение раз в одну-две секунды, а не на каждый фрагмент.
Если задача — просто ответить по существу, надёжнее не стримить вовсе: дождаться полного ответа и отправить один раз. Это экономит вызовы Telegram, упрощает обработку ошибок и снижает риск получить 429. Стриминг стоит включать только там, где задержка первого токена действительно важна пользователю.
- Не редактируйте сообщение на каждый фрагмент.
- Обновляйте текст с паузой в одну-две секунды.
- При 429 от Telegram — подождите время из ответа.
- Для простых сценариев стриминг не нужен вовсе.
Лимиты, безопасные повторы и расход
Ошибки модели разбирайте по коду: 401 — неверный или отозванный ключ NeuroAPI, 404 — опечатка в ID модели, 429 — превышение лимитов, 5xx — временная проблема. Повторы допустимы для 429 и 5xx с ограничением числа попыток и задержкой; при 401 и 404 повтор не поможет, нужна правка конфигурации.
Расход зависит от модели, длины истории и числа ответов. Ведите учёт по пользователям: сохраняйте usage из ответов и ограничивайте длину контекста. Баланс предоплаченный — если он закончился, запросы перестанут выполняться, поэтому для production-бота заведите мониторинг остатка и уведомление администратору.
- 401 и 404 не лечатся повтором — проверьте ключ и модель.
- 429 и 5xx — повтор с задержкой и ограничением попыток.
- Сохраняйте usage и считайте расход по пользователям.
- Следите за балансом: он предоплаченный.
Деплой, секреты и поддержка
Запускать бота лучше как отдельный сервис с автоперезапуском: systemd, Docker или платформа приложений. Токены передавайте через переменные окружения, а не в исходниках; если используется git, добавьте .env в .gitignore. Для продакшена удобнее webhook с HTTPS, для разработки — long polling, как в примере из документации aiogram.
Перед запуском на пользователей проверьте четыре сценария: обычный ответ, длинный ответ, ошибка ключа и превышение баланса. Логи должны содержать идентификатор пользователя, модель и usage, но не полный текст приватных сообщений. Документация и коды ошибок NeuroAPI помогут разбирать инциденты без догадок. Отдельно зафиксируйте, кто получает уведомление при исчерпании баланса и как быстро бот должен деградировать до понятного сообщения.
- Автоперезапуск процесса обязателен для бота.
- Секреты — только в переменных окружения.
- Проверьте штатный, длинный и ошибочный сценарии.
- Логи без приватного текста, но с usage и моделью.
Минимальный бот: aiogram + AsyncOpenAI
pythonimport asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
from openai import AsyncOpenAI
BOT_TOKEN = os.environ["BOT_TOKEN"]
MODEL_ID = os.environ["NEUROAPI_MODEL"]
client = AsyncOpenAI(
base_url="https://neuroapi.host/v1",
api_key=os.environ["NEUROAPI_API_KEY"],
)
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message) -> None:
await message.answer("Привет! Задайте вопрос модели.")
@dp.message()
async def answer(message: Message) -> None:
response = await client.chat.completions.create(
model=MODEL_ID,
messages=[{"role": "user", "content": message.text}],
max_tokens=800,
)
await message.answer(response.choices[0].message.content)
async def main() -> None:
bot = Bot(token=BOT_TOKEN)
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())Переменные окружения
bashBOT_TOKEN=<токен_от_BotFather>
NEUROAPI_API_KEY=<ключ_из_кабинета_NeuroAPI>
NEUROAPI_MODEL=<MODEL_ID_ИЗ_PRICE>Запустите бота на рублёвом балансе
Один ключ NeuroAPI, OpenAI-совместимый base_url и каталог моделей в рублях. Начните с короткого ответа в тестовом боте, а лимиты и мониторинг добавьте до запуска на пользователей.
Факты о каталоге проверены 18.10.2026; API aiogram и openai описаны по официальной документации на 19.10.2026.