Telegram-бот, который через пошаговый диалог (FSM) собирает заявки (лиды) и FastAPI-админку с дашбордом и управлением статусами заявок. Один процесс, один Docker-контейнер — готово к деплою на Render.
Live demo (admin): https://telegram-lead-bot-admin.onrender.com · Логин: пароль
demo· Бот: <добавь @username бота после заведения токена>
- Бот (aiogram 3):
/start→ кнопка «Оставить заявку» → собирает имя, контакт, описание задачи → сохраняет заявку в БД → выдаёт номер заявки. Валидация на каждом шаге, FSM-состояния. - Админка (FastAPI): вход по паролю (session-cookie), дашборд со статистикой
(всего / за сегодня / новые / закрытые), таблица последних заявок, страница
всех заявок с фильтром по статусу, смена статуса (
new/contacted/closed). - БД: SQLite через SQLAlchemy 2 (async) + aiosqlite.
- Healthcheck:
GET /healthдля Render / uptime-мониторинга.
| Слой | Технология |
|---|---|
| Бот | aiogram 3 (FSM, long-polling) |
| Web/админка | FastAPI + Jinja2 + Bootstrap 5 |
| БД | SQLAlchemy 2 (async) + aiosqlite (SQLite) |
| Конфиг | pydantic-settings (.env) |
| Деплой | Render Blueprint (Python web) / Docker |
portfolio/telegram-bot-admin/
├── app/
│ ├── __main__.py # entrypoint: бот + uvicorn в одном event loop
│ ├── config.py # настройки из .env
│ ├── models.py # модель Lead
│ ├── database.py # async engine + init_db
│ ├── bot.py # aiogram FSM-бот
│ ├── web.py # FastAPI админка
│ └── templates/ # base / login / dashboard / leads (Jinja2)
├── requirements.txt
├── Dockerfile
├── .env.example
└── README.md
# 1. Установить зависимости
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
# 2. Настроить окружение
cp .env.example .env # Windows: copy .env.example .env
# заполни TELEGRAM_BOT_TOKEN (от @BotFather)
# придумай ADMIN_PASSWORD и SESSION_SECRET
# 3. Запустить (бот + админка одновременно)
python -m app- Админка: http://localhost:8000 (логин: пароль из
ADMIN_PASSWORD) - Бот: напиши ему в Telegram
/start
- Кликни кнопку выше (или открой
https://render.com/deploy?repo=https://github.com/yusizer/telegram-lead-bot-admin). - Render прочитает
render.yamlи создаст web-сервисtelegram-lead-bot-admin(free, Python 3.12.6).ADMIN_PASSWORD=demo,SESSION_SECRETгенерируется автоматически,DATABASE_URL— SQLite. - Сервис поднимет только FastAPI-админку (
uvicorn app.web:app) — бот не запускается, т.к. токен-плейсхолдер.seed_if_empty()при старте наполняет демо-лидами, чтобы админка не выглядела пустой. - После деплоя открой
https://telegram-lead-bot-admin.onrender.com, введи парольdemo— увидишь дашборд с заявками./health— проверка, что сервис жив.
⚠️ SQLite хранится в файле внутри контейнера (Render free — диск эфемерный, сбрасывается при редеплое). Для демо-портфолио этого достаточно:seed_if_empty()каждый старт наполняет заново. Для прод-нагрузки подключи PostgreSQL (поменяйDATABASE_URLнаpostgresql+asyncpg://...и добавьasyncpgв requirements) и задай реальныйTELEGRAM_BOT_TOKEN, чтобы запускался и бот (python -m app).
| Бот: приветствие и сбор заявки | Админка: дашборд |
|---|---|
![]() |
![]() |
Положи скриншоты в docs/ после запуска.
Этот проект — готовая демонстрация связки «Telegram-бот + веб-админка со статистикой», которую можно переиспользовать под разные ниши клиентов (запись, заявки, опросы, лидогенерация).

