Личный кабинет в Telegram-боте — это полноценное приложение. Вот как это устроено технически.
Архитектура:
- 1.Telegram Bot API — получает и отправляет сообщения
- 2.Backend (Python/aiogram или Node.js/grammy) — обрабатывает логику
- 3.База данных (PostgreSQL) — хранит данные пользователей
- 4.FSM (Finite State Machine) — управляет состояниями диалога
FSM — конечный автомат. Это способ управлять диалогом: «сейчас пользователь вводит имя → теперь адрес → теперь выбирает товар». Без FSM бот не понимает, на каком этапе находится пользователь.
Пример реализации на Python (aiogram):
1from aiogram import Router, F
2from aiogram.fsm.context import FSMContext
3from aiogram.fsm.state import State, StatesGroup
4
5class ProfileStates(StatesGroup):
6 waiting_name = State()
7 waiting_phone = State()
8 waiting_address = State()
9
10router = Router()
11
12@router.message(F.text == "👤 Мой профиль")
13async def show_profile(message, state, db):
14 user = await db.get_user(message.from_user.id)
15 text = (
16 f"👤 Ваш профиль\n\n"
17 f"Имя: {user.name}\n"
18 f"Телефон: {user.phone}\n"
19 f"Адрес: {user.address}\n"
20 f"Заказов: {user.orders_count}\n"
21 f"Баланс: {user.balance} ₽"
22 )
23 await message.answer(text)
24
25@router.message(F.text == "📋 Мои заказы")
26async def show_orders(message, state, db):
27 orders = await db.get_orders(message.from_user.id)
28 if not orders:
29 await message.answer("У вас пока нет заказов")
30 return
31 for order in orders:
32 text = (
33 f"📦 Заказ #{order.id}\n"
34 f"Дата: {order.date}\n"
35 f"Сумма: {order.sum} ₽\n"
36 f"Статус: {order.status}"
37 )
38 await message.answer(text)
Структура базы данных (PostgreSQL):
1CREATE TABLE users (
2 id BIGINT PRIMARY KEY,
3 name VARCHAR(100),
4 phone VARCHAR(20),
5 address TEXT,
6 balance DECIMAL(10,2) DEFAULT 0,
7 created_at TIMESTAMP DEFAULT NOW()
8);
9
10CREATE TABLE orders (
11 id SERIAL PRIMARY KEY,
12 user_id BIGINT REFERENCES users(id),
13 sum DECIMAL(10,2),
14 status VARCHAR(50),
15 created_at TIMESTAMP DEFAULT NOW()
16);
17
18CREATE TABLE notifications (
19 id SERIAL PRIMARY KEY,
20 user_id BIGINT REFERENCES users(id),
21 message TEXT,
22 is_read BOOLEAN DEFAULT FALSE,
23 created_at TIMESTAMP DEFAULT NOW()
24);
Такая архитектура позволяет хранить любые данные, делать выборки, строить аналитику. Конструкторы так не умеют — они хранят только простые атрибуты.
🔧 Не хотите разбираться в разработке ботов? Доверьте это профессионалу — напишите мне, и я сделаю всё под ключ.