SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Веб-разработка

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-сессии бота и фоновых задач должен корректно завершаться вместе с приложением.

Документация