Інтеграція 1С-Бітрікс із системою бронювання Wubook
Wubook — італійська PMS із вбудованим channel manager. Серед готельних систем вирізняється активною роботою з європейськими об'єктами, але також зустрічається в незалежних готелів, які продають через Booking.com та Airbnb в єдиному channel manager. Мета інтеграції — продублювати рушій онлайн-бронювання Wubook на сайті 1С-Бітрікс без відмови від 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 (рядковий, для відображення гостю). Обидва зберігаємо в замовленні 1С-Бітрікс.
Channel Manager і конфлікти доступності
Wubook розподіляє номери між каналами (Booking.com, Airbnb, прямий продаж). Якщо 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 негайно звільняє слот для інших каналів.
У 1С-Бітрікс: обробник статусу замовлення при переході в «Скасовано» викликає метод скасування через API. При мережевій помилці — зберігаємо завдання на повтор у bl_wubook_pending_ops і обробляємо агентом.
Терміни
| Етап | Термін |
|---|---|
| Налаштування Zak API + OAuth | 1 день |
| Синхронізація номерів і доступності | 2–3 дні |
| Створення та скасування бронювань | 2 дні |
| Webhook-підписка та обробник | 2 дні |
| Тестування з реальним об'єктом | 2 дні |
| Разом | 9–12 днів |







