Разработка сайта коворкинга на 1С-Битрикс
Коворкинг зарабатывает на заполняемости. Пустующее рабочее место в 14:00 — это потерянная выручка, которую уже не вернуть. Сайт коворкинга должен продавать время: показать пространства, дать выбрать свободный слот, принять оплату и выдать QR-код для прохода — всё без участия администратора. На 1С-Битрикс это связка модуля sale, Highload-блоков для бронирования и интеграции со СКУД.
Каталог пространств
Инфоблок «Пространства» с разделами по типам:
- Hot desk — любое свободное место в общей зоне
- Fixed desk — закреплённое рабочее место
- Переговорная — комната на 4-12 человек
- Private office — отдельный кабинет на команду
- Event-зал — для мероприятий и воркшопов
Свойства элемента:
- Вместимость (число): количество рабочих мест
- Площадь (число): м²
- Оснащение (множественный список): монитор, маркерная доска, проектор, видеоконференцсвязь, принтер, кофемашина
- Этаж (список): привязка к плану здания
- Фото (множественное файловое): галерея с разных ракурсов
- 3D-тур (строка): ссылка на embed Matterport
- Минимальное время бронирования (число): в часах (1 для переговорной, 8 для private office)
На карточке пространства — слайдер фотографий, таблица оснащения, кнопка «Забронировать» с переходом к календарю занятости.
Тарифы и абонементы
Тарифная сетка коворкинга сложнее, чем кажется. Один и тот же hot desk может продаваться почасово (разовый визит), подневно или по абонементу на месяц. Переговорная — только почасово. Private office — помесячно.
Реализация через товары модуля sale с торговыми предложениями (SKU):
Товар «Hot desk» имеет торговые предложения:
- 1 час
- 1 день (8 часов)
- 10 дней/месяц
- Безлимит/месяц
Товар «Переговорная "Байкал"» имеет предложения:
- 1 час
- 3 часа
- Полный день
Каждое торговое предложение имеет свою цену в каталоге. Абонементы (10 дней, безлимит) оформляются как подписки: после оплаты пользователю присваивается группа «Абонемент Hot Desk 10» с датой окончания. Агент (CAgent) ежедневно проверяет истекшие абонементы и перемещает пользователей в группу «Без абонемента».
Виртуальный тур
Встраивается Matterport 3D-тур через iframe на отдельной странице и в карточках пространств. Для каждого этажа — свой тур с точками интереса (hotspots): наведение на рабочее место показывает его номер, оснащение и кнопку бронирования.
Альтернатива Matterport — панорамные фото 360°, собранные в Pannellum.js (open-source). Обходится дешевле, но без эффекта «хождения» по пространству.
Community-раздел
Инфоблок «Резиденты» — карточки компаний и фрилансеров, работающих в коворкинге (с согласия). Свойства: логотип, название, сфера деятельности, сайт. Показывает живое сообщество и помогает нетворкингу.
Инфоблок «Мероприятия» — предстоящие митапы, воркшопы, нетворкинг-завтраки. Интеграция с формой регистрации: при записи создаётся элемент Highload-блока «Регистрации на мероприятия» с подтверждением по email.
Бронирование с календарём занятости и СКУД: deep-dive
Бронирование — ядро сайта коворкинга. Стандартные модули Битрикс (корзина, оформление заказа) заточены под товарный e-commerce, а здесь нужно продавать временные слоты с визуализацией занятости. Потребуется кастомная разработка поверх модуля sale.
Highload-блок бронирований
Центральная сущность — Highload-блок «Бронирования» (BookingTable):
| Поле | Тип | Назначение |
|---|---|---|
| UF_SPACE_ID | Привязка | Пространство из инфоблока |
| UF_USER_ID | Число | Кто забронировал |
| UF_DATE | Дата | Дата бронирования |
| UF_TIME_FROM | Строка | Время начала (HH:MM) |
| UF_TIME_TO | Строка | Время окончания (HH:MM) |
| UF_ORDER_ID | Число | ID заказа в модуле sale |
| UF_STATUS | Список | Ожидает оплаты / оплачено / отменено / завершено |
| UF_QR_TOKEN | Строка | Уникальный токен для QR-кода |
| UF_CHECKIN | Дата/время | Фактическое время входа через СКУД |
| UF_CHECKOUT | Дата/время | Фактическое время выхода |
Индексы: составной индекс по UF_SPACE_ID + UF_DATE + UF_STATUS для быстрой выборки занятости.
Календарь занятости
Фронтенд-компонент показывает календарь на неделю вперёд. Для переговорных и hot desk — почасовая сетка (с 8:00 до 22:00, 14 слотов по часу). Для private office — подневная (свободен/занят на каждый день).
Данные загружаются одним AJAX-запросом: контроллер D7 выбирает все бронирования для данного пространства за запрошенный период со статусами «Оплачено» и «Ожидает оплаты». На клиенте слоты раскрашиваются: зелёный — свободен, красный — занят, жёлтый — ожидает оплаты (зарезервирован на 15 минут).
Пользователь кликает по свободным слотам (можно выделить несколько подряд), нажимает «Забронировать». Если авторизован и есть действующий абонемент, покрывающий этот тип бронирования, — бронь создаётся мгновенно со статусом «Оплачено». Если абонемента нет — формируется заказ в модуле sale, пользователь переходит к оплате (Юкасса, CloudPayments).
Защита от конфликтов
При одновременном бронировании одного слота двумя пользователями используется оптимистичная блокировка: перед созданием записи контроллер проверяет отсутствие пересечений и использует транзакцию БД. Если слот уже занят — возвращается ошибка, и фронтенд обновляет календарь.
Дополнительно: слоты со статусом «Ожидает оплаты» автоматически отменяются через 15 минут агентом. Это предотвращает блокировку популярных переговорных неоплаченными бронями.
Интеграция со СКУД
После успешной оплаты система генерирует уникальный UF_QR_TOKEN (UUID v4) и отправляет QR-код на email и в личный кабинет. При сканировании QR на считывателе СКУД:
- Считыватель отправляет HTTP-запрос на endpoint
/api/skud/verify/ - Контроллер проверяет токен: существует, статус «Оплачено», текущее время попадает в интервал
UF_TIME_FROM – UF_TIME_TOс допуском ±15 минут - При успешной проверке возвращает
{"access": true}, СКУД открывает турникет/дверь - Записывается
UF_CHECKIN— фактическое время входа
Протокол зависит от модели СКУД. Для систем на базе ZKTeco или Sigur — REST API. Для Болид «Орион» — интеграция через промежуточный сервер на Python, который транслирует HTTP-запросы в протокол Орион.
Для абонементов «Безлимит» QR-код генерируется один раз на весь период действия и привязывается не к конкретному бронированию, а к пользователю.
Личный кабинет арендатора
Вкладки:
- Мои бронирования — предстоящие и прошлые, QR-коды для активных
- Абонемент — тип, остаток дней/посещений, дата окончания, продление
- История — фактические посещения (чекин/чекаут из СКУД), счета
- Избранное — часто бронируемые пространства для быстрого доступа
Сроки реализации
| Этап | Содержание | Срок |
|---|---|---|
| Аналитика | Каталог пространств, тарифная матрица, требования к СКУД | 5–7 дней |
| Проектирование | Прототипы, ER-схема Highload, сценарии бронирования | 7–10 дней |
| Дизайн | Макеты (каталог, календарь, ЛК), мобильный адаптив | 10–12 дней |
| Каталог и тарифы | Инфоблоки, товары sale, торговые предложения |
7–10 дней |
| Система бронирования | Highload, календарь, оплата, защита от конфликтов | 14–18 дней |
| СКУД-интеграция | API endpoint, генерация QR, тестирование с оборудованием | 7–10 дней |
| ЛК и community | Личный кабинет, резиденты, мероприятия | 7–10 дней |
| Тестирование и запуск | Нагрузочное тестирование, пуско-наладка СКУД | 5–7 дней |
Общий срок — 9–12 недель. Интеграция со СКУД зависит от модели оборудования: если система поддерживает REST API из коробки, укладываемся в 7 дней. Если нужен промежуточный сервер — до 10 дней. Оборудование должно быть смонтировано и настроено до начала этапа интеграции.







