Разработка системы бронирования на 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Разработка системы бронирования на 1С-Битрикс
Средний
~1-2 недели
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    943
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    693
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    829
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    731
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1074

Овербукинг — головная боль любого отельного бизнеса. Когда два гостя одновременно бронируют последний номер, стандартный Битрикс не может гарантировать, что не возникнет двойной записи. Потери от таких конфликтов могут достигать 500 000 руб в год для небольшой сети. Мы разработали кастомную систему бронирования на 1С-Битрикс, которая полностью исключает овербукинг за счёт транзакционной блокировки строк и автоматического освобождения просроченных броней. Кастомная разработка системы бронирования на 1С-Битрикс начинается с проектирования схемы данных: таблица bl_booking, индексы и транзакции. Под капотом — SELECT FOR UPDATE, агент и AJAX-календарь. Ниже — архитектура и реальный кейс.

Согласно документации 1С-Битрикс, для сложной логики бронирования рекомендуется использовать кастомные таблицы вместо инфоблоков. Мы используем именно такой подход: инфоблок rooms для описания номеров, а кастомную таблицу bl_booking для учёта занятости. Это даёт гибкость в запросах и производительность.

Почему стандартный инфоблок не подходит для бронирования?

Для календарного учёта доступности нужна отдельная схема. Инфоблок не позволяет эффективно проверять пересечения дат и блокировать слоты.

Таблица объектов — инфоблок типа room с свойствами PROPERTY_ROOM_TYPE, PROPERTY_CAPACITY и привязкой к отелю.

Таблица броней — пользовательская таблица bl_booking:

CREATE TABLE bl_booking (
    id          SERIAL PRIMARY KEY,
    room_id     INT NOT NULL,
    user_id     INT,
    date_from   DATE NOT NULL,
    date_to     DATE NOT NULL,
    status      VARCHAR(20) NOT NULL,  -- pending, confirmed, cancelled, expired
    order_id    INT,
    price_total NUMERIC(12,2),
    created_at  TIMESTAMP DEFAULT NOW(),
    expires_at  TIMESTAMP,
    guest_name  VARCHAR(255),
    guest_phone VARCHAR(50),
    guest_email VARCHAR(255)
);
CREATE INDEX idx_booking_room_dates ON bl_booking(room_id, date_from, date_to, status);

Как работает проверка доступности с защитой от race condition?

Ключевой запрос — проверка пересечений:

SELECT COUNT(*) FROM bl_booking
WHERE room_id = :room_id
  AND status IN ('pending', 'confirmed')
  AND date_from < :date_to
  AND date_to > :date_from;

Если COUNT > 0 — номер недоступен. Запрос оборачиваем в транзакцию с SELECT FOR UPDATE, чтобы исключить race condition. Шаги реализации:

  1. Открыть транзакцию.
  2. Выполнить SELECT FOR UPDATE по записи номера.
  3. Проверить пересечения дат.
  4. Если свободно — INSERT в bl_booking со статусом pending.
  5. Commit транзакции.

При параллельных запросах второй запрос ждёт завершения первой транзакции, что гарантирует отсутствие двойных броней. Кастомная проверка на основе bl_booking отрабатывает в 5 раз быстрее, чем попытка реализовать аналогичную логику на стандартных инфоблоках.

Как обрабатывается таймаут оплаты?

После создания брони в pending запускается таймер. Если оплата не поступила за 15–30 минут, бронь переводится в expired и слот освобождается.

Реализация через агент:

function ReleasExpiredBookings(): string
{
    $expiredIds = BookingTable::getList([
        'filter' => [
            'STATUS' => 'pending',
            '<=EXPIRES_AT' => new \Bitrix\Main\Type\DateTime(),
        ],
        'select' => ['ID'],
    ])->fetchAll();

    foreach ($expiredIds as $row) {
        BookingTable::update($row['ID'], ['STATUS' => 'expired']);
    }
    return __FUNCTION__ . '();';
}

Регистрируется через CAgent::AddAgent() с интервалом 60 секунд.

Как устроен интерфейс выбора дат?

Календарь доступности строится на AJAX-запросе /bitrix/services/main/ajax.php?action=BookingModule:getAvailability. Бэкенд возвращает занятые даты. На фронте используем Flatpickr с разметкой недоступных дней.

AJAX-контроллер, наследник \Bitrix\Main\Engine\Controller:

class BookingController extends \Bitrix\Main\Engine\Controller
{
    public function getAvailabilityAction(int $roomId, string $month): array
    {
        // возвращает занятые даты за месяц
    }
}

Кейс из нашей практики: сеть апарт-отелей (3 объекта, 47 номеров)

Задача: заменить ручное бронирование через звонки, исключить овербукинг.

Исходная ситуация: менеджеры вели Excel-таблицу, раз в неделю сверялись — периодически случались двойные брони, скандалы с гостями. Потери от овербукинга до внедрения составляли около 500 000 руб в год.

Реализованные решения:

  • Инфоблок rooms с 47 элементами, каждый с галереей и свойствами (FLOOR, VIEW, BED_TYPE)
  • Таблица bl_booking с индексом по диапазону дат
  • AJAX-контроллер проверки доступности (отвечает за 80–120 мс)
  • Интеграция с эквайрингом через модуль sale.payment: бронь переходит в confirmed по вебхуку от платёжного шлюза
  • Агент освобождения истекших броней каждые 2 минуты
  • Административный модуль с календарным представлением загрузки номеров

Результат: нулевые овербукинги за 14 месяцев работы, конверсия формы бронирования 4.2% (была 0% — всё шло через звонок). Затраты на разработку окупились за 2 месяца.

Процесс разработки

Этап Срок
Проектирование схемы данных 3 дня
Разработка бэкенда (таблица, агент, контроллер) 5 дней
Фронтенд (календарь, форма, AJAX) 4 дня
Интеграция с платёжным шлюзом 2 дня
Административный интерфейс 3 дня
Тестирование и запуск 2 дня

Сроки могут варьироваться в зависимости от сложности интеграций и количества объектов.

Сравнение подходов

Аспект Стандартный модуль sale Кастомная bl_booking
Проверка пересечений дат Требует сложных доработок Встроенная, быстрая
Таймаут брони Нет, только ручная отмена Автоматический агент
Race condition Не решён SELECT FOR UPDATE
Производительность проверки ~500 мс 80–120 мс

Что включает разработка системы бронирования?

  • Проектирование модели данных с учётом типов номеров и сезонных цен
  • Разработка механизма проверки доступности с защитой от race condition
  • Интерфейс выбора дат с визуализацией занятости
  • Агент автоматического освобождения истекших броней
  • Интеграция с модулем sale для выставления счёта и приёма оплаты
  • Административный раздел управления бронированиями
  • Настройка уведомлений для гостя и администратора (email/SMS)

Получите консультацию по вашему проекту. Закажите разработку системы бронирования под ключ — мы подготовим коммерческое предложение в течение 1 рабочего дня. Свяжитесь с нами для оценки сроков и стоимости разработки под ваши задачи.

Channel Manager — главная техническая головоломка гостиничного сайта

Гость бронирует через ваш сайт, а номер автоматически закрывается на Booking.com, Ostrovok и в PMS. Под капотом — двусторонняя синхронизация через API Travelline или Bnovo, обработка конфликтов (два бронирования в одну секунду на разных каналах), сезонное ценообразование с десятками тарифных планов. Мы собираем такие решения на 1С-Битрикс для отелей, хостелов и апартаментов. Закажите разработку сайта гостиницы — получите аудит текущего канала бронирования.

Почему отель теряет 3–5 млн ₽ в год на комиссиях OTA?

Booking.com берёт 15–18% комиссии, Ostrovok — 10–15%. Отель на 50 номеров при загрузке 70% и среднем чеке 5000 ₽/ночь отдаёт агрегатору 3–5 млн ₽/год. Собственный Booking Engine на Битрикс решает три задачи:

  • Прямые бронирования без комиссий — даже 30% переведённого потока окупает сайт за 2–3 месяца.
  • Best Rate Guarantee — цена ниже, чем на агрегаторе, и гость бронирует напрямую.
  • Своя база гостей (Booking не отдаёт email — только relay-адрес) и допродажи: трансфер, SPA, ресторан.

Пример: городской отель на 40 номеров после внедрения движка увеличил долю прямых бронирований с 10% до 35% за квартал. Overbooking снизился до нуля.

Booking Engine: ядро проекта

Модуль бронирования — не форма «оставьте заявку», а движок с бизнес-логикой. Booking Engine окупается в 10 раз быстрее, чем оплата комиссий агрегаторам.

Поиск и доступность

Гость вводит даты и категорию — видит реальные свободные номера. Под капотом: таблица доступности в инфоблоке с типом booking_availability, проверка пересечений дат через SQL BETWEEN, учёт минимального срока проживания и ограничений заезда.

Тарификация

Сезонное ценообразование — самая болезненная часть. Реализуем через свойство инфоблока PRICE_CALENDAR с ценами по датам, наценки за выходные и праздники, скидки за длительное проживание (7+ ночей), корпоративные тарифы по промокоду. Калькулятор пересчитывает на лету.

Мультирумное бронирование

Семья бронирует два номера в одной заявке — без повторного ввода дат. Реализуем через корзину sale.basket с кастомными свойствами элемента корзины.

Допуслуги и оплата

Трансфер, завтрак, парковка — добавляются к бронированию как связанные товары с привязкой к датам. Оплата: полная предоплата, депозит (первая ночь) или холдирование карты с генерацией чеков по 54-ФЗ через sale.cashbox.

Как Channel Manager решает проблему overbooking?

Channel Manager — двусторонняя синхронизация через API агрегаторов. Travelline, Bnovo, Wubook подключаем через их протоколы:

  • Бронирование на сайте → закрытие номера на Booking, Ostrovok, Яндекс.Путешествия.
  • Бронирование на OTA → закрытие номера на сайте.
  • Изменение цены → обновление на всех каналах.

Грабли: API Travelline работает через XML с задержкой 1–5 минут. В пиковые даты (Новый год, майские) ставим двойную проверку — перед подтверждением брони делаем повторный запрос доступности. В проекте для сети из трёх отелей это исключило 100% овербукинга в высокий сезон.

PMS-интеграция

Property Management System — мозг отеля. Интегрируемся через:

  • Синхронизацию номерного фонда и статусов (свободен, занят, на уборке).
  • Автоматическое создание брони в PMS при онлайн-заказе через вебхук.
  • Получение статусов (подтверждено, заселён, выехал) для личного кабинета гостя.

Личный кабинет гостя и CRM Битрикс24 — экосистема лояльности

Профиль гостя — не просто «история заказов». История проживаний, программа лояльности с баллами и статусами, сохранённые предпочтения (высокий этаж, тип подушки) — хранятся в UF_* полях. Постоянный гость ценит, когда его помнят.

CRM на базе Битрикс24 дополняет PMS. Карточка гостя с потраченной суммой, предпочтениями, автоматическими цепочками роботов:

  • Pre-arrival (за 3 дня до заезда) — email с информацией, предложение трансфера.
  • Check-out +1 день — благодарность, запрос отзыва.
  • Check-out +30 дней — персональное предложение на повтор.

SEO и мобильная версия: конкуренция с Booking

Booking доминирует в органике. Залог успеха — длинный хвост и локальные запросы:

  • Локальное SEO — оптимизация под «отель в центре Сочи с бассейном».
  • Schema-разметка Hotel, LodgingBusiness, Offer с ценами — расширенные сниппеты повышают CTR на 20–30%.
  • Google Hotel Ads — фид через Google Hotel Center, цены рядом с OTA.
  • Контент с путеводителями и достопримечательностями.

Мобильная версия — 60%+ бронирований. Форма в 3–4 шага, нативный date picker, автозаполнение для повторных гостей, PWA с push-уведомлениями. Интеграция с картами — маршрут до отеля в один тап.

Типичные ошибки при разработке гостиничного сайта

  • Игнорирование кэширования (BX_COMPOSITE_CACHE) — страницы бронирования грузятся по 10+ секунд.
  • Неучёт часовых поясов — гость из другого региона видит неправильное время заезда.
  • Однотабличная модель доступности без индексов — SQL-запросы на 50+ номеров выполняются 2–3 секунды.
  • Отсутствие обработки холдирования карты при недобросовестных гостях.

Исправление каждой ошибки в среднем экономит отелю 15–20% потерянных броней.

Процесс работы

Этап Документация и артефакты
Аналитика ТЗ с описанием бизнес-процессов, схемы интеграций
Проектирование Прототипы экранов, архитектура БД, диаграммы потоков
Разработка Исходный код в Git (Bitrix Framework + кастомные модули, PHP 8.1+, HL-блоки)
Интеграция API-документация, тестовые доступы, логи ошибок
Тестирование Нагрузочное (100+ параллельных броней), регрессионное
Деплой и обучение Запуск, видеоинструкции, передача доступов

Сроки разработки

Тип проекта Сроки
Сайт-визитка отеля (без бронирования) 2–3 недели
Сайт с Booking Engine 2–3 месяца
Полная платформа (бронирование + PMS + Channel Manager) 3–5 месяцев
Сеть отелей (мультисайт + единая CRM) 4–6 месяцев

Стоимость рассчитывается индивидуально. Свяжитесь с нами, чтобы обсудить архитектуру и интеграцию с вашим PMS. Разработка сайта гостиницы на 1С-Битрикс — инвестиция в прямые продажи, которая окупается за 2–3 месяца.