Интеграция 1С-Битрикс с системой бронирования Wubook
Wubook — итальянская PMS с channel manager. Из российских отельных систем отличается тем, что активно работает с европейскими объектами, но встречается и у российских независимых отелей, особенно тех, кто работает с Booking.com и Airbnb через единый channel manager. Задача интеграции с Битрикс — дублировать движок онлайн-бронирования Wubook на сайте, не отказываясь от PMS, и синхронизировать данные в обе стороны.
Wubook API: два слоя
Wubook предоставляет два API:
-
XML-RPC API (legacy, но всё ещё работает) — метод-ориентированный, авторизация через
lkey(ключ сессии). -
Zak API (REST) — более современный, JSON, базовый URL
https://wubook.net/api/zak/. Для новых интеграций рекомендуется именно он.
Получение сессионного ключа для XML-RPC:
$client = new \PhpXmlRpc\Client('https://wubook.net/xrws/');
$msg = new \PhpXmlRpc\Request('wired.acquire_token', [
new \PhpXmlRpc\Value(WUBOOK_USER),
new \PhpXmlRpc\Value(WUBOOK_PASS),
new \PhpXmlRpc\Value(WUBOOK_PROVIDER_KEY),
]);
$response = $client->send($msg);
$token = $response->value()->scalarval();
Для Zak API авторизация через Authorization: Bearer {access_token}, токен получается через OAuth 2.0.
Синхронизация доступности через Wubook
Метод Zak API GET /properties/{id}/rooms возвращает типы номеров. Метод GET /properties/{id}/availability — доступность по диапазону.
Структура ответа по доступности включает rooms (массив типов) и для каждого — массив дат с полем avail (количество свободных). Записываем в bl_wubook_availability по той же схеме, что и для других PMS:
foreach ($availData['rooms'] as $roomType) {
foreach ($roomType['dates'] as $dateEntry) {
WubookAvailabilityTable::addOrUpdate([
'ROOM_TYPE_ID' => $roomType['id'],
'DATE' => new \Bitrix\Main\Type\Date($dateEntry['date']),
'QTY' => (int)$dateEntry['avail'],
]);
}
}
Создание брони через Zak API
POST /properties/{id}/reservations:
$payload = [
'checkin' => $dateFrom,
'checkout' => $dateTo,
'rooms' => [['id' => $wubookRoomId, 'amount' => 1]],
'customer' => [
'name' => $guestName,
'email' => $guestEmail,
'phone' => $guestPhone,
],
'amount' => $totalAmount,
'currency' => 'RUB',
'channel' => 'WEB',
'notes' => 'Заказ #' . $orderId . ' с сайта',
];
$result = $zakClient->post('/properties/' . WUBOOK_PROPERTY_ID . '/reservations', $payload);
Wubook возвращает reservation_id (числовой) и reservation_code (строковый, для отображения гостю). Оба сохраняем в заказ Битрикс.
Channel Manager и конфликты доступности
Wubook распределяет номера между каналами (Booking.com, Airbnb, direct). Если channel manager занял номер на Booking.com, Wubook автоматически снижает доступность. Поэтому синхронизация доступности критична: 15-минутный агент может опоздать.
Решение — webhook-уведомления от Wubook при изменении доступности. Wubook поддерживает push-уведомления (notifications) через POST /properties/{id}/notifications/subscribe. При получении уведомления availability_changed мгновенно инвалидируем кэш и делаем точечный запрос доступности по затронутым датам и типам номеров.
Отмена бронирований
DELETE /properties/{id}/reservations/{reservation_id} или PUT со статусом cancelled. Wubook немедленно освобождает слот для других каналов.
В Битрикс: обработчик статуса заказа при переходе в «Отменён» вызывает метод отмены через API. При сетевой ошибке — сохраняем задание на повтор в bl_wubook_pending_ops и обрабатываем агентом.
Сроки
| Этап | Срок |
|---|---|
| Настройка Zak API + OAuth | 1 день |
| Синхронизация номеров и доступности | 2–3 дня |
| Создание и отмена броней | 2 дня |
| Webhook-подписка и обработчик | 2 дня |
| Тестирование с реальным объектом | 2 дня |
| Итого | 9–12 дней |







