Интеграция 1С-Битрикс с системой бронирования Bnovo

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Интеграция 1С-Битрикс с системой бронирования Bnovo
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1173
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • 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
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    745
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Интеграция 1С-Битрикс с системой бронирования Bnovo

Bnovo — российская PMS-система для гостиниц с собственным channel manager и модулем онлайн-бронирования. Проблема без интеграции: менеджер принимает заявку через сайт на Битрикс, вручную заносит бронь в Bnovo, потом вручную обновляет доступность номеров обратно на сайте. Два источника правды — два места для ошибок. Овербукинг при таком подходе — вопрос времени.

Архитектура интеграции

Bnovo предоставляет REST API (https://online.bnovo.ru/api/v1/). Авторизация — API-ключ отеля в заголовке X-Api-Key. Основные сущности: rooms (номера), reservations (брони), rates (тарифы), availability (доступность по датам).

Направления потоков данных:

  1. Bnovo → Битрикс: синхронизация доступности номеров и тарифов — чтобы виджет на сайте показывал актуальную загрузку.
  2. Битрикс → Bnovo: передача новых броней, созданных через сайт.

Промежуточного хранилища избегаем — данные передаём напрямую через API с кэшированием на стороне Битрикс.

Синхронизация доступности

Bnovo отдаёт доступность через GET /api/v1/availability?hotel_id={id}&date_from=YYYY-MM-DD&date_to=YYYY-MM-DD. Ответ содержит массив дат с количеством свободных номеров по каждому типу.

Агент Битрикс запускается каждые 10 минут и обновляет локальный кэш доступности в таблице bl_bnovo_availability:

CREATE TABLE bl_bnovo_availability (
    room_type_id  INT NOT NULL,
    date          DATE NOT NULL,
    qty_available SMALLINT NOT NULL DEFAULT 0,
    synced_at     TIMESTAMP NOT NULL,
    PRIMARY KEY (room_type_id, date)
);

Запрос к этой таблице делает виджет выбора дат на сайте — без обращения к Bnovo API в реальном времени. Это снижает зависимость от доступности внешнего сервиса и ускоряет отклик формы.

Создание брони в Bnovo из Битрикс

После успешной оплаты заказа (событие OnSalePaymentEntitySaved при IS_PAID = Y) обработчик формирует запрос к Bnovo:

$response = $bnovoClient->post('/api/v1/reservations', [
    'hotel_id'   => $this->hotelId,
    'room_id'    => $roomId,
    'date_from'  => $booking->getDateFrom()->format('Y-m-d'),
    'date_to'    => $booking->getDateTo()->format('Y-m-d'),
    'rate_id'    => $booking->getRateId(),
    'guest'      => [
        'name'  => $order->getPropertyValueByCode('NAME'),
        'phone' => $order->getPropertyValueByCode('PHONE'),
        'email' => $order->getPropertyValueByCode('EMAIL'),
    ],
    'amount'     => $payment->getSum(),
    'source'     => 'website',
]);
$bnovoReservationId = $response['reservation']['id'];

reservation_id из ответа сохраняем в UF-поле заказа UF_BNOVO_RESERVATION_ID — это необходимо для последующих операций (отмена, изменение дат).

Webhooks из Bnovo

Bnovo умеет отправлять webhooks при изменении статуса брони, созданной внутри PMS (не через сайт). Настройка — в разделе «Интеграции» личного кабинета Bnovo: указываем URL обработчика на стороне Битрикс.

Обработчик /api/bnovo-webhook.php:

$payload = json_decode(file_get_contents('php://input'), true);
// Проверка подписи: HMAC-SHA256 тела запроса + секретный ключ
$expectedSign = hash_hmac('sha256', file_get_contents('php://input'), BNOVO_WEBHOOK_SECRET);
if (!hash_equals($expectedSign, $_SERVER['HTTP_X_BNOVO_SIGNATURE'] ?? '')) {
    http_response_code(403);
    exit;
}

switch ($payload['event']) {
    case 'reservation.created':
        // Создать заказ в Битрикс или уведомить менеджера
        break;
    case 'reservation.cancelled':
        // Отменить заказ в Битрикс
        BnovoSyncService::cancelOrder($payload['reservation_id']);
        break;
    case 'availability.updated':
        // Сбросить кэш доступности для затронутых дат
        BnovoCache::invalidate($payload['room_type_id'], $payload['dates']);
        break;
}

Тарифы и сезонные цены

Bnovo хранит тарифы (rates) — набор правил ценообразования. Метод GET /api/v1/rates возвращает список с условиями: минимальное количество ночей, ограничения по датам, тип питания. Синхронизируем тарифы в таблицу bl_bnovo_rates раз в час — они меняются редко.

На форме бронирования на сайте тарифы подгружаются AJAX-вызовом: пользователь выбирает даты, сайт запрашивает актуальные тарифы с ценами через GET /api/v1/rates/prices?room_id=X&date_from=...&date_to=... и отображает варианты размещения.

Сроки

Этап Срок
Настройка API-клиента и аутентификации 1 день
Синхронизация доступности (агент + таблица) 2 дня
Передача броней в Bnovo при оплате 2 дня
Обработчик webhooks из Bnovo 1–2 дня
Синхронизация тарифов 1 день
Тестирование и отладка 2 дня
Итого 9–11 дней