Aiogram и FastAPI: разные задачи, общий Python
Aiogram обрабатывает события Telegram Bot API, а FastAPI предоставляет HTTP API. Их не обязательно выбирать вместо друг друга: бот может обращаться к HTTP-сервису, а webhook может принимать обновления Telegram в веб-приложении.
Бот с polling
Для aiogram 3 установите библиотеку и передайте токен через окружение. Пример отвечает на команду start; токен не нужно вставлять в исходник.
import asyncio
import os
from aiogram import Bot, Dispatcher
from aiogram.filters import CommandStart
from aiogram.types import Message
dp = Dispatcher()
@dp.message(CommandStart())
async def start(message: Message):
await message.answer("Здравствуйте!")
async def main():
async with Bot(token=os.environ["BOT_TOKEN"]) as bot:
await dp.start_polling(bot)
if __name__ == "__main__":
asyncio.run(main())HTTP-сервис FastAPI
from fastapi import FastAPI
app = FastAPI()
@app.get("/health")
async def health():
return {"status": "ok"}Установите FastAPI с необходимым сервером по инструкции проекта, запустите приложение и проверьте GET /health и автоматически создаваемую документацию /docs.
Если объединять
Не запускайте asyncio.run внутри уже работающего event loop. Выберите один способ доставки Telegram updates: polling или webhook. При webhook проверяйте запросы и secret token, контролируйте повторы и время ответа. Долгую работу лучше отделить от HTTP-обработчика. Жизненный цикл HTTP-сессии бота и фоновых задач должен корректно завершаться вместе с приложением.