Уявіть: ваш готельний бізнес втрачає до 30% бронювань через застарілий сайт, який не оновлює доступність у реальному часі. Або ваш агрегатор готелів не може обробити 1000 запитів на секунду в пік сезону. Ми стикалися з проєктами, де overselling сягав 15% через race conditions, а час пошуку перевищував 5 секунд. Усі ці проблеми вирішуються на етапі архітектури. Наша команда розробляє платформи бронювання, які вирішують ці проблеми з першого релізу. Нижче — технічний розбір ключових модулів.
Як побудувати модель даних для номерного фонду?
Hotel
└── RoomType (Стандарт, Делюкс, Сьют)
├── Атрибути (площа, вид, місткість, зручності)
└── Inventory (кількість номерів даного типу)
└── Rate Plans (Невозвратний, Гнучкий, Сніданок включений)
└── Availability × Date × Price
Управління доступністю: для кожного типу номера та кожної дати зберігається quota (доступна кількість) та price. При бронюванні quota зменшується на 1 — атомарно, без race conditions.
CREATE TABLE room_availability (
room_type_id, date DATE, rate_plan_id,
available_count INT NOT NULL DEFAULT 0,
price_per_night DECIMAL(10,2),
PRIMARY KEY (room_type_id, date, rate_plan_id)
);
-- Атомарне бронювання з перевіркою залишку
UPDATE room_availability
SET available_count = available_count - 1
WHERE room_type_id = $1 AND date = ANY($dates)
AND rate_plan_id = $2 AND available_count > 0;
Чому атомарні операції критичні для бронювання?
Без них два користувачі можуть одночасно забронювати останній номер — класичний lost update. Атомарний UPDATE перевіряє залишок і зменшує лічильник за одну операцію. Цей підхід у 10 разів швидший за песимістичні блокування рядків.
Динамічне ціноутворення: як RMS коригує тарифи?
Revenue Management System (RMS) автоматично змінює ціни на основі чотирьох факторів:
- Заповнюваність (occupancy): якщо номери швидко закінчуються — ціна вгору.
- Випереджаючий попит: багато пошуків на дату → ціна вгору.
- Сезонність та події (конференції, свята).
- Ціни конкурентів (rate parity monitoring).
Проста реалізація — cron-задача раз на годину, що перераховує тарифи за правилами. Більш просунута — використання ML-моделі, яка враховує історичні дані та прогнозує попит. Наприклад, на одному з проєктів впровадження RMS збільшило середній чек на 20% і скоротило ручну роботу з коригування цін на 80%.
Пошук з фільтрами: SQL для «готелі в Одесі»
SELECT h.*, rt.*, ra.price_per_night
FROM hotels h
JOIN room_types rt ON rt.hotel_id = h.id
JOIN room_availability ra ON ra.room_type_id = rt.id
WHERE h.city = 'Одеса'
AND ra.date BETWEEN '2025-08-02' AND '2025-08-04'
AND rt.max_occupancy >= 2
GROUP BY h.id, rt.id
HAVING MIN(ra.available_count) > 0
ORDER BY SUM(ra.price_per_night) ASC;
Запит повертає доступні готелі на всі ночі, відсортовані за ціною. Для високого навантаження використовуємо Elasticsearch або Meilisearch з інкрементальною індексацією. Час відповіді API при такому підході не перевищує 100 мс навіть при 10 000 запитів на секунду.
Інтеграція з Channel Manager та PMS
Готелі використовують PMS (Property Management System: Opera, Fidelio, SHELTER). Синхронізація доступності та цін — обов’язкова вимога.
-
OTA-інтеграція: стандарт OTA XML для двостороннього зв’язку з GDS та OTA-каналами.
-
Channel Manager: проміжний шар (SiteMinex, Effortless) агрегує дані та розподіляє по каналах через єдиний API.
-
Прямий PMS API: для великих готелів — пряма інтеграція через REST або SOAP API конкретної PMS.
| Спосіб інтеграції |
Коли застосовувати |
Складність |
| OTA XML |
Для масової дистрибуції |
Середня |
| Channel Manager |
Кілька каналів, бюджет обмежений |
Низька |
| Прямий PMS API |
Один великий замовник |
Висока |
Отримайте консультацію з вибору оптимальної інтеграції — наші інженери допоможуть знизити операційні витрати на 40%.
Політика відміни та оплати
Тарифні плани мають різні політики: Невозвратний (знижка 10–20%), Гнучкий (відміна за 24–48 годин — повне повернення), Часткове повернення.
Два режими оплати: Pay now (через Stripe/ЮKassa) та Pay at hotel (гарантія картою з capture_method: manual). Підтримуються локальні платіжні системи.
Типові помилки при розробці платформ бронювання
- Відсутність атомарності при оновленні availability — призводить до overselling. Ми бачили випадки, коли готелі втрачали до 15% бронювань через race conditions.
- Слабка нормалізація даних — повільні запити при фільтрації. Час пошуку може перевищувати 10 секунд.
- Ігнорування rate parity — готелі втрачають довіру партнерів, що знижує конверсію на 25%.
- Синхронна оплата блокує UI, користувачі йдуть — конверсія падає на 30%.
Що входить у роботу
- Технічне завдання та архітектура
- Модель даних під ваш бізнес
- Розробка фронтенду та бекенду
- Інтеграція з обраними PMS/Channel Manager
- Розгортання на сервері (Docker, CI/CD)
- Документація та навчання адміністраторів
- Технічна підтримка 3 місяці
Процес роботи
- Аналітика: вивчаємо бізнес-логіку, пишемо ТЗ.
- Проєктування: модель даних, API-специфікація, UI/UX-макети.
- Розробка: ітерації по 2 тижні, демо після кожного спринту.
- Тестування: навантажувальне тестування (до 10 000 RPS), інтеграційні тести.
- Деплой: на ваш сервер або хмару (AWS/Selectel) з моніторингом.
- Підтримка: виправлення багів, оновлення залежностей.
Строки орієнтовно
| Етап |
Строк |
| MVP (пошук, бронювання, оплата, ОК) |
4–5 місяців |
| Повна платформа + Channel Manager + динаміка + мобільний додаток |
8–14 місяців |
Вартість розраховується індивідуально, залежить від кількості інтеграцій та складності інтерфейсу. Оцінимо ваш проєкт за 1–2 робочі дні — зв'яжіться з нами для розрахунку.
Наш досвід: 10+ років у веб-розробці, понад 50 проєктів у сфері туризму та гостинності. Багато рішень працюють під навантаженням 50 000 відвідувачів на добу.
Ми розробляємо маркетплейси та мультивендорні платформи, де бізнес-логіка зав'язана на три сторони: покупець, продавець та платформа. Помилка в розрахунку комісії на 1000 замовлень на день — це фінансові розбіжності, які неможливо розібрати без окремого reconciliation-процесу. Навіть при середньому навантаженні 500 замовлень на добу неправильна модель виплат призводить до втрати до 15% виручки платформи. Ми вирішили цю проблему для 50+ проектів — від нішевих B2B до горизонтальних retail-маркетплейсів. Процес розробки маркетплейсів вимагає детального опрацювання архітектури розрахунків та ізоляції даних.
Як побудувати надійну мультивендорну платформу?
Як уникнути розбіжностей у розрахунках комісій
Розрахунок комісії — найкритичніша частина, де помилки коштують грошей. Правило перше: ніколи не зберігати комісію як похідну, завжди як факт. У момент створення замовлення фіксуємо: суму замовлення, відсоток комісії платформи в цей момент, абсолютне значення комісії, суму до виплати продавцю. Якщо ви зміните ставку — історичні замовлення залишаться з колишніми цифрами.
Моделі комісій (використовуємо одну з або комбінуємо):
| Модель |
Принцип |
Типовий сценарій |
| Фіксований відсоток |
5% з кожного продажу |
Прості торгові майданчики |
| Диференційований за категоріями |
Електроніка 3%, одяг 8% |
Маркетплейси з різними маржами |
| Tiered за оборотом |
До 100k — 10%, від 100k — 7% |
B2B-платформи з об'ємними знижками |
| Змішаний |
% + фіксована сума за транзакцію |
Високоризикові або дорогі товари |
Ми використовуємо Stripe Connect як базовий стандарт. Режим Destination charges дає платформі контроль над виплатами, включаючи утримання при спорах. Onboarding продавця проходить через Stripe Identity: KYC/AML перевірка обов'язкова, поки продавець не верифікований — виплати заморожені. Продуманий UX цього процесу критичний для конверсії продавців — у наших проектах ми досягли конверсії 80% при реєстрації.
Escrow та холдування — приклад реалізації
Гроші з покупця списуються одразу, продавцю переказуються із затримкою 7–14 днів після підтвердження отримання. Це захист від шахрайства та можливість утримання при спорах. Реалізується через capture_method: manual у Stripe та ручний capture після завершення угоди. В одному з проектів така механіка скоротила кількість chargeback'ів на 40% за перші півроку роботи.
Чому архітектура мультиарендності критична для ізоляції даних
Перший крок — вибір архітектури мультиарендності. У shared-schema режимі всі продавці в одних таблицях з vendor_id. Ми обов'язково впроваджуємо Row Level Security на рівні PostgreSQL та глобальні scopes в ORM (Laravel, Rails, Django). Це гарантує, що продавець не побачить чужих замовлень навіть при помилці розробника. Для enterprise-проектів з жорсткими вимогами GDPR використовуємо окремі схеми PostgreSQL — ізоляція строгіша, але cross-vendor аналітика складніша.
Як реалізувати складські залишки без race condition
Два покупці одночасно додають останній товар у кошик. Хто його купить? Застосовуємо optimistic locking при створенні замовлення:
UPDATE inventory
SET reserved = reserved + 1
WHERE product_id = ? AND (quantity - reserved) >= 1
Атомарна операція — другий запит поверне 0 зачеплених рядків та отримає помилку «товар закінчився». Типова схема для високонавантажених маркетплейсів.
Який підхід до каталогу товарів обрати: unified чи per-vendor?
Порівняння підходів до каталогу товарів:
| Аспект |
Unified-каталог (Amazon-like) |
Per-vendor-каталог (Avito-like) |
| Єдина картка товару |
Так, product → offers |
Ні, кожен продавець свою |
| SEO |
Оптимізується за карткою |
Дублікати, але швидший запуск |
| UX покупця |
Вищий (порівняння цін) |
Нижчий (багато дублів) |
| Складність розробки |
Висока (модерація атрибутів) |
Середня |
| Конверсія покупки |
На 25% вища |
Нижча |
Для нішевого B2B маркетплейсу ми частіше обираємо per-vendor — швидше запускається. Для горизонтального retail з сотнями продавців — unified-каталог дає кращий UX.
Пайплайн модерації: автоматика та ручна верифікація
Маркетплейс несе відповідальність за контент продавців. Типові проблеми: підроблені товари, заборонені категорії, маніпуляція цінами, фейкові відгуки. Вибудовуємо трирівневий пайплайн:
- Автоматичні перевірки при публікації: обов'язкові поля, відповідність категорії, стоп-лист слів, дублікати через хеш зображення.
- AI-класифікація (Amazon Rekognition або Vertex AI Vision) — детекція забороненого контенту та визначення категорії.
- Черга ручної перевірки для flagged товарів.
Статусна машина: draft → pending_review → active / rejected → suspended. Кожен перехід — подія з причиною та модератором. Продавець отримує сповіщення з конкретною причиною відмови, а не «порушення правил». Верифікація відгуків обов'язкова — тільки після підтвердженого замовлення. Автоматичний детектор флагує різке зростання відгуків від акаунтів з нульовою історією.
Пошук та рекомендації
Пошук по маркетплейсу з різними продавцями та сотнями тисяч товарів — це Elasticsearch або OpenSearch, не SQL LIKE. Векторний пошук для семантики, фасетна фільтрація через агрегації. Персоналізована стрічка на основі колаборативної фільтрації. A/B тестування алгоритмів ранжування обов'язкове — інтуїція тут поганий порадник.
Процес роботи
Маркетплейс — ітеративна розробка. MVP: реєстрація продавців, каталог товарів, кошик та checkout через Stripe Connect, базова модерація. Після запуску — дані про реальне використання визначають пріоритети наступних ітерацій.
Типовий порядок:
- MVP (3–4 місяці)
- Аналітика та зворотний зв'язок
- Перший розширений реліз (2–3 місяці)
- Масштабування та оптимізація
Терміни та вартість
- MVP маркетплейсу (каталог, checkout, базові профілі продавців): 3–5 місяців.
- Повнофункціональний маркетплейс з модерацією, розширеною аналітикою, мобільним додатком: 8–18 місяців.
- Додавання маркетплейс-функціональності до існуючого e-commerce: 2–5 місяців.
Вартість розробки розраховується індивідуально після аудиту вимог. Точну оцінку надамо на безкоштовному передпроектному обстеженні.
Що входить в роботу
- Проектна документація: архітектура, схеми даних, API-специфікації (OpenAPI).
- Доступи до репозиторію, CI/CD, документації з розгортання.
- Навчання команди замовника роботі з платформою.
- Технічна підтримка протягом першого місяця після запуску.
Ми гарантуємо коректність фінансових розрахунків та конфіденційність даних. Архітектурні принципи, на яких ми ґрунтуємося, підтверджені досвідом 10+ років та 50+ успішних проектів. Зв'яжіться з нами для попередньої оцінки вашого маркетплейсу — отримайте консультацію з архітектури та розрахунку виплат. Замовте аудит поточної платформи — виявимо вузькі місця та запропонуємо оптимізацію.