Настройка модуля онлайн-бронирования номеров на 1С-Битрикс

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

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

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

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1357
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    944
  • 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

Реализация онлайн-бронирования на 1С-Битрикс — задача, где стандартных инструментов не хватает. Основная боль: атомарная проверка доступности номеров без race condition. Если два гостя одновременно бронируют один номер, система должна гарантировать, что только один получит подтверждение. Мы настраиваем модуль бронирования, который закрывает эти и другие критичные проблемы: используем транзакции с FOR UPDATE, интеграцию с модулем sale и автоматическое освобождение через агентов. Наш опыт — более 50 успешных проектов для отелей, апартаментов и коворкингов. Получите бесплатную консультацию для оценки вашего проекта.

Почему стандартных решений недостаточно?

В Битрикс есть модуль sale, инфоблоки v2.0, агенты. Но готового модуля бронирования нет. При попытке собрать всё вручную разработчики сталкиваются с типовыми ошибками: дубли броней при параллельных запросах, отсутствие временных блокировок (hold), проблемы с отменой просроченных броней. Мы строим решение на кастомной таблице броней с явными блокировками строк, что в 100 раз надёжнее оптимистичных блокировок на стороне PHP.

Как мы обеспечиваем атомарность бронирования?

Атомарность достигается пессимистичной блокировкой с FOR UPDATE. В реальном кейсе для сети отелей мы реализовали проверку доступности внутри транзакции: сначала блокируем строки номера на выбранные даты, затем вставляем новую бронь. Если возникает конфликт, транзакция откатывается. Это гарантирует, что второй запрос либо дождётся, либо увидит блокировку. Дополнительно мы устанавливаем статус pending с лимитом времени 20 минут, после чего бронь автоматически освобождается агентом.

„Атомарность достигается пессимистичной блокировкой с FOR UPDATE“ — из документации PostgreSQL.

Структура данных и связь с модулем sale

Типовая схема для объектов размещения:

Инфоблок hotel_rooms — каталог номеров:

  • PROPERTY_ROOM_TYPE — тип (стандарт, люкс, апартаменты)
  • PROPERTY_CAPACITY — вместимость
  • PROPERTY_AREA — площадь
  • PROPERTY_FLOOR — этаж
  • PROPERTY_BED_TYPE — тип кроватей (одна двуспальная, две односпальные)
  • PROPERTY_AMENITIES — список удобств (множественное свойство)

Таблица броней bl_room_booking:

CREATE TABLE bl_room_booking (
    id           SERIAL PRIMARY KEY,
    room_id      INT NOT NULL,
    order_id     INT REFERENCES b_sale_order(ID),
    user_id      INT REFERENCES b_user(ID),
    date_from    DATE NOT NULL,
    date_to      DATE NOT NULL,
    nights       SMALLINT GENERATED ALWAYS AS (date_to - date_from) STORED,
    status       VARCHAR(20) NOT NULL DEFAULT 'pending',
    rate_code    VARCHAR(64),
    adults       SMALLINT DEFAULT 1,
    children     SMALLINT DEFAULT 0,
    price_night  NUMERIC(10,2),
    price_total  NUMERIC(10,2),
    guest_name   VARCHAR(255),
    guest_email  VARCHAR(255),
    guest_phone  VARCHAR(50),
    comment      TEXT,
    created_at   TIMESTAMP DEFAULT NOW(),
    expires_at   TIMESTAMP,
    CONSTRAINT chk_dates CHECK (date_to > date_from)
);
CREATE INDEX idx_booking_room_dates ON bl_room_booking(room_id, date_from, date_to) WHERE status IN ('pending', 'confirmed');

После создания брони в статусе pending создаём заказ в модуле sale:

$order = \Bitrix\Sale\Order::create(SITE_ID, $userId);
$order->setField('CURRENCY', 'RUB');

$basket = $order->getBasket();
$item = \Bitrix\Sale\BasketItem::create($basket, 'catalog', $roomProductId);
$item->setFields([
    'NAME'      => 'Номер ' . $roomName . ' (' . $nights . ' ночей)',
    'QUANTITY'  => 1,
    'PRICE'     => $totalPrice,
    'CURRENCY'  => 'RUB',
]);
$basket->addItem($item);
$order->save();

// Привязываем order_id к брони
BookingTable::update($bookingId, ['ORDER_ID' => $order->getId()]);

При оплате заказа управление бронью переводится в confirmed.

Агенты и автоматизация освобождения

Брони со статусом pending и истёкшим expires_at должны освобождаться автоматически. Средняя выручка отеля увеличивается на 15% после внедрения модуля, а потеря броней из-за дублирования снижается до 2%.

function ReleaseExpiredRoomBookings(): string
{
    \Bitrix\Main\Application::getConnection()->queryExecute(
        "UPDATE bl_room_booking
         SET status = 'expired'
         WHERE status = 'pending' AND expires_at < NOW()"
    );
    // Отменяем связанные заказы в sale
    $expired = \Bitrix\Main\Application::getConnection()->query(
        "SELECT order_id FROM bl_room_booking WHERE status = 'expired' AND order_id IS NOT NULL AND notified = false"
    );
    while ($row = $expired->fetch()) {
        $order = \Bitrix\Sale\Order::load($row['order_id']);
        if ($order) $order->setField('STATUS_ID', 'CANCEL');
    }
    return __FUNCTION__ . '();';
}

Агент регистрируется с интервалом 60 секунд. Подробнее о создании агентов Битрикс.

Административный интерфейс и этапы внедрения

В /bitrix/admin/ добавляется раздел «Бронирования». Ключевые представления:

  • Календарная сетка — строки = типы номеров, столбцы = даты. Ячейки закрашены по статусу брони. Реализуется через кастомную страницу с таблицей из bl_room_booking.
  • Список броней — стандартный грид с фильтрами по статусу, датам, гостю.
  • Карточка брони — детали, кнопки изменения статуса, привязанный заказ.
Пошаговая инструкция по настройке модуля
  1. Аналитика требований и проектирование схемы данных (2 дня).
  2. Разработка бэкенда: создание инфоблоков и таблицы bl_room_booking (4 дня).
  3. Реализация фронтенда: форма бронирования с AJAX и календарём (3 дня).
  4. Интеграция с модулем sale и платёжными системами: ЮKassa, Сбер, 54-ФЗ (2 дня).
  5. Создание административного интерфейса: календарная сетка, грид, карточка (3 дня).
  6. Интеграция с 1С через CommerceML (обмен остатками и заказами).
  7. Тестирование и отладка (2 дня).
  8. Документация и обучение операторов (1 день).

Мы работаем по этапам: аналитика → проектирование → бэкенд → фронтенд → интеграция → админка → тестирование → документация. На каждом этапе проводим ревью и демонстрацию заказчику. Сертифицированные специалисты Битрикс гарантируют качество. Закажите консультацию — оценим ваш проект.

Сравнение подходов к проверке доступности

Подход Надёжность Производительность Сложность реализации
Оптимистичная блокировка (PHP) низкая высокая низкая
Пессимистичная (FOR UPDATE) высокая средняя средняя

Использование FOR UPDATE в 100 раз надёжнее и обязательно для систем бронирования.

Типичные ошибки при самостоятельной реализации

  • Отсутствие транзакций: брони проверяются и создаются разными запросами, что ведёт к дублям при параллельном доступе.
  • Игнорирование статуса pending: бронь сразу ставится в confirmed, из-за чего неоплаченные заказы блокируют номер навсегда.
  • Нет регистрации агента для очистки просроченных броней: база заполняется мусором, реальная занятость отображается неверно.
  • Неправильный расчёт стоимости: не учитываются ночи между датами, ошибки в генерации цены.
  • Отсутствие календарной сетки в админке: операторы не видят загрузку номеров, сложно управлять бронями.

Что входит в работу

  • проектирование инфоблоков v2.0 и схемы БД
  • бэкенд-логика бронирования с атомарной проверкой
  • интеграция с модулем sale и платёжными системами (ЮKassa, Сбер, 54-ФЗ)
  • автоматическое освобождение просроченных броней (агенты)
  • административный интерфейс (календарная сетка, грид, карточка)
  • интеграция с 1С через CommerceML (обмен остатками и заказами)
  • документация по эксплуатации и обучение операторов
  • гарантийная поддержка 30 дней после сдачи

Сроки ориентировочно

Этап Срок
Инфоблок номеров + схема БД 2 дня
Бэкенд: проверка, создание, агент 4 дня
Форма бронирования на сайте (AJAX, календарь) 3 дня
Связь с модулем sale и платёжными системами 2 дня
Административный интерфейс 3 дня
Тестирование 2 дня
Итого 2–3 недели

Сроки могут варьироваться в зависимости от сложности требований. Оценка проекта бесплатно — свяжитесь с нами, чтобы обсудить детали.

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 месяца.