Інтеграція 1С-Бітрікс із системою бронювання Bnovo

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

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

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Інтеграція 1С-Бітрікс з системою бронювання Bnovo

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

Архітектура інтеграції

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

Напрямки потоків даних:

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

Проміжного сховища уникаємо — дані передаємо напряму через API з кешуванням на стороні 1С-Бітрікс.

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

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

Агент 1С-Бітрікс запускається кожні 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 з 1С-Бітрікс

Після успішної оплати замовлення (подія 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 обробника на стороні 1С-Бітрікс.

Обробник /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':
        // Створити замовлення в 1С-Бітрікс або сповістити менеджера
        break;
    case 'reservation.cancelled':
        // Скасувати замовлення в 1С-Бітрікс
        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 днів