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

Овербукинг из-за ручного переноса броней — классический сценарий потери выручки для отеля. По нашей статистике, до 15% броней теряются из-за опозданий или ошибок при двойном вводе. Менеджер принимает заявку через сайт на Битрикс, вручную заносит бронь в Bnovo, потом вручную обновляет доступность ном
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Интеграция 1С-Битрикс с системой бронирования Bnovo
Средний
~1-2 недели

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

Часто задаваемые вопросы

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

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1415
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    995
  • 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
    734
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    863
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    772
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1134

Овербукинг из-за ручного переноса броней — классический сценарий потери выручки для отеля. По нашей статистике, до 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/). Направления потоков данных:

  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 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 шагов

  1. Получить API-ключ Bnovo через личный кабинет.
  2. Создать таблицу bl_bnovo_availability в БД.
  3. Настроить агента Битрикс для синхронизации доступности (период 10 минут).
  4. Реализовать обработчик события OnSalePaymentEntitySaved для передачи броней.
  5. Настроить webhook-уведомления в Bnovo (резервации, отмены, обновления доступности).
  6. Протестировать синхронизацию на тестовом сайте и провести нагрузочное тестирование.

Что входит в работу по интеграции?

Deliverable Описание
Аналитика и проектирование Описание потоков данных, выбор схемы синхронизации
API-клиент для Bnovo PHP-библиотека с поддержкой кэширования и повторных попыток
Синхронизация доступности Агент Битрикс с периодом 10 минут, таблица bl_bnovo_availability
Передача броней Обработчик события OnSalePaymentEntitySaved
Webhook-обработчик Приём и проверка подписанных уведомлений
Синхронизация тарифов Периодический агент (раз в час)
Тестирование Нагрузочное тестирование, проверка корректности данных
Документация Схема синхронизации, инструкция по мониторингу

Сроки реализации

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

Стоимость рассчитывается индивидуально. Оценим ваш проект после знакомства с архитектурой текущего сайта. Получите демо-доступ к интеграции или закажите пилотный проект. Свяжитесь с нами для консультации. Гарантируем стабильную работу синхронизации: все критичные каналы мониторим совместно с вашей командой.