Овербукінг через ручне перенесення бронювань — класичний сценарій втрати виручки для готелю. За нашою статистикою, до 15% бронювань втрачаються через затримки або помилки при подвійному введенні. Менеджер приймає заявку через сайт на Бітрікс, вручну заносить бронювання в Bnovo, потім вручну оновлює доступність номерів назад на сайт. Два джерела правди — два місця для помилок. Ми стикалися з цим десятки разів. Наше завдання — зробити так, щоб система бронювання та CMS спілкувалися безпосередньо, без участі людини. Це не тільки прискорює процес у 3 рази, але й повністю виключає ризик овербукінгу. Економія часу адміністратора досягає 70%, а витрати на обробку одного бронювання знижуються в 2–3 рази.
Bnovo — російська PMS-система з власним channel manager і REST API. Авторизація — API-ключ готелю в заголовку X-Api-Key. Основні сутності: rooms, reservations, rates, availability. Пряма інтеграція через API у 3 рази швидша за готові модулі — не потрібно чекати оновлень від вендора. Ми гарантуємо відсутність овербукінгу та стабільну синхронізацію.
Як інтеграція 1С-Бітрікс з Bnovo вирішує проблему ручного введення?
Архітектура інтеграції
Bnovo надає REST API (https://online.bnovo.ru/api/v1/). Напрямки потоків даних:
- Bnovo → Бітрікс: синхронізація доступності номерів і тарифів — щоб віджет на сайті показував актуальне завантаження.
- Бітрікс → 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 REST API.
Чому прямий обхід через REST API кращий за готові модулі?
Готові модулі з Маркетплейсу часто не покривають специфіку готелю: унікальні тарифи, складні правила скасування, інтеграція з касою. Прямий REST API дає повний контроль. Наша команда має 8+ років досвіду в розробці на Бітрікс і реалізувала 50+ інтеграцій з PMS-системами. Ми пишемо код під ваш сценарій, а не підлаштовуємо бізнес під модуль.
Тарифи та сезонні ціни
Bnovo зберігає тарифи (rates) — набір правил ціноутворення. Метод GET /api/v1/rates повертає список з умовами: мінімальна кількість ночей, обмеження за датами, тип харчування. Синхронізуємо тарифи в таблицю bl_bnovo_rates раз на годину — вони змінюються рідко.
На формі бронювання на сайті тарифи підвантажуються AJAX-викликом: користувач вибирає дати, сайт запитує актуальні тарифи з цінами через GET /api/v1/rates/prices?room_id=X&date_from=...&date_to=... і відображає варіанти розміщення.
Як налаштувати інтеграцію за 6 кроків
- Отримати API-ключ Bnovo через особистий кабінет.
- Створити таблицю
bl_bnovo_availabilityу БД. - Налаштувати агент Бітрікс для синхронізації доступності (період 10 хвилин).
- Реалізувати обробник події
OnSalePaymentEntitySavedдля передачі броней. - Налаштувати webhook-сповіщення в Bnovo (резервації, скасування, оновлення доступності).
- Протестувати синхронізацію на тестовому сайті та провести навантажувальне тестування.
Що входить у роботу з інтеграції?
| Результат | Опис |
|---|---|
| Аналітика та проєктування | Опис потоків даних, вибір схеми синхронізації |
| API-клієнт для Bnovo | PHP-бібліотека з підтримкою кешування та повторних спроб |
| Синхронізація доступності | Агент Бітрікс з періодом 10 хвилин, таблиця bl_bnovo_availability |
| Передача броней | Обробник події OnSalePaymentEntitySaved |
| Webhook-обробник | Прийом і перевірка підписаних сповіщень |
| Синхронізація тарифів | Періодичний агент (раз на годину) |
| Тестування | Навантажувальне тестування, перевірка коректності даних |
| Документація | Схема синхронізації, інструкція з моніторингу |
Терміни реалізації
| Етап | Термін |
|---|---|
| Налаштування API-клієнта та аутентифікації | 1 день |
| Синхронізація доступності (агент + таблиця) | 2 дні |
| Передача броней в Bnovo при оплаті | 2 дні |
| Обробник webhooks з Bnovo | 1–2 дні |
| Синхронізація тарифів | 1 день |
| Тестування та налагодження | 2 дні |
| Разом | 9–11 днів |
Вартість розраховується індивідуально. Оцінимо ваш проєкт після знайомства з архітектурою поточного сайту. Отримайте демо-доступ до інтеграції або замовте пілотний проєкт. Зв'яжіться з нами для консультації. Гарантуємо стабільну роботу синхронізації: всі критичні канали моніторимо спільно з вашою командою.







