🚀 Быстрый старт (5 минут)
- Войдите в CRM:
https://beauty.magboot.ru
- Добавьте залы (например: «Парикмахерский зал», «Ногтевой сервис»)
- Добавьте мастеров и назначьте им уровни
- Добавьте услуги и привяжите к залам
- Готово — клиенты могут записываться через бота!
🏛 Залы и мастера
Как добавить новый зал:
- «Услуги» → «Добавить услугу»
- В поле «Зал» выберите «✏️ Новый зал...»
- Введите название (например: «Массажный зал»)
- Сохраните — зал автоматически появится во всех списках
Уровни мастеров:
- 🔵 Мастер — начинающий специалист
- 🟢 Мастер с опытом — опытный специалист
- 🟣 Топ Мастер — эксперт высшего уровня
- 👑 Мастер универсал — владеет всеми техниками
💰 Личные цены мастеров
Каждый мастер может иметь свою цену на услугу:
- «Сотрудники» → выберите мастера → «Редактировать»
- В разделе «Услуги» нажмите на цену
- Укажите личную цену мастера
- Клиенты увидят:
~~3500₽~~ 4200₽ (личная цена мастера)
📱 Работа с ботом
Клиенты записываются через Telegram-бота:
- Клиент находит бота в Telegram
- Нажимает «📅 Записаться»
- Вводит имя и телефон
- Выбирает услугу → дату → время
- Выбирает мастера (видит уровень и цену)
- Подтверждает запись
Админ получает уведомление в боте «Уведомления»
🏗 Архитектура
CRM (beauty.magboot.ru)
├── Frontend: React + Vite
├── Backend: Node.js + Express
└── База: PostgreSQL
Витрина (crmgrand.ru)
└── React SPA (публичный доступ)
MAX-бот (Telegram)
└── Node.js + @maxhub/max-bot-api
API: http://localhost:3001
🔌 Публичные эндпоинты API
Услуги (без токена):
GET /api/services/public?salon_code=xxx
Возвращает список услуг с залами и ценами
Мастера (без токена):
GET /api/masters?salon_code=xxx
Возвращает мастеров с уровнями
Профиль мастера (без токена):
GET /api/masters/:id?salon_code=xxx
Возвращает профиль с личными ценами
🚀 Установка
1. Клонировать и установить:
git clone [repo]
cd CRM-Beauty
npm install
2. Настроить .env:
DATABASE_URL=postgresql://user:pass@localhost/db
PORT=3001
JWT_SECRET=your-secret
3. Запустить:
npm run dev
📡 Интеграция с ботом
Бот использует публичные эндпоинты без токена:
// Загрузка мастеров
const masters = await axios.get(
`${API_URL}/masters?salon_code=${salonCode}`
);
// Загрузка профиля с ценами
const profile = await axios.get(
`${API_URL}/masters/${id}?salon_code=${salonCode}`
);