Multi-Channel Hotel Search System

Job ID: 40385554

Budget: $30 – $250 USD

The system must include a full Admin Panel to manage markups, currencies, exchange rates, providers, and manual hotel contract rates without requiring any code changes.

The goal is to build a centralized Hotel Search & Pricing Engine server that acts as the core system for multiple channels:

WhatsApp via Respond.io (AI Agent)

OTA website (web platform)

Future mobile application


This server does not handle bookings or payments.
Its only responsibility is real-time hotel search, multi-provider price comparison, markup calculation, currency conversion, and structured responses per channel.


---

Single API Entry Point

POST /searchHotels

All channels use this single endpoint.


---

Unified Request Format

{ "source": "respond", "city": "Dubai", "hotel_name": "", "check_in": "2026-05-10", "check_out": "2026-05-12", "adults": 2, "children": 0, "room_type": "suite", "meal": "breakfast", "view": "sea" }


---

Internal Server Logic

1. Multi-Provider Search

The server sends requests to multiple hotel suppliers such as:

Hotelbeds

Additional providers (expandable later)



---

2. Response Aggregation

The system collects results including:

Same hotel from different providers

Different room types

Different prices per provider



---

3. Room Matching Engine

Rooms are matched based on:

Hotel name

Room type

Meal plan

View (sea, city, etc.)

Room size

Amenities



---

4. Cheapest Option Selection

For identical room criteria, the system selects the lowest net price.


---

Markup System

Markup depends on both source and provider.

By Source

Source Markup

respond 15%
ota 25%


By Provider

Provider Markup

Hotelbeds 10%



---

Currency System

Each channel has its own display currency:

Source Currency

respond SAR
ota USD


Exchange rates are stored in an admin panel.

Example:

From To Rate

USD SAR 3.75



---

Processing Order

Final price calculation must follow this order:

Net Price
→ Provider Markup
→ Source Markup
→ Currency Conversion
→ Final Price


---

Room Notes Field

All room attributes from suppliers are normalized into a single field:

notes

Examples:

Sea View

Balcony

45m²

High floor



---

Response Format

1. Respond (WhatsApp / AI)

{ "hotel": "Hilton Dubai", "room": "Sea View Suite", "meal": "Breakfast", "view": "Sea View", "price": 431.25, "currency": "SAR", "notes": "45m, balcony, free wifi" }


---

2. OTA Website

{ "hotel_name": "Hilton Dubai", "images": [], "description": "", "distance": "500m from city center", "amenities": [], "rooms": [ { "room": "Sea View Suite", "meal": "Breakfast", "view": "Sea", "price": 115, "currency": "USD" } ] }


---

Respond.io Integration Logic

1. AI Agent collects user input:



City

Check-in / Check-out

Guests

Room type

Meal plan

View preference


2. Sends HTTP request to backend server


3. Receives JSON response


4. Converts response into natural language



No pricing logic exists inside Respond.io.


---

OTA Website Integration

Uses same API

Uses same backend logic

Different UI rendering:

Images

Hotel page

Amenities

Multiple room options




---

Room Package Generation Logic

The backend must generate multiple pricing packages per room, not a single price.

Required packages:

Room Only

Bed & Breakfast

Half Board (if available)

Sea View room

Sea View + Breakfast

Premium upgrades (if available)



---

Processing Logic

1. Receive base room from supplier API


2. Extract attributes (meal, view, features)


3. Generate combinations of available upgrades


4. Calculate price per option:

Base price

Upgrade cost

Markup



5. Return multiple pricing options




---

Expected Response Format

{ "options": [ { "type": "Room Only", "price": 100, "currency": "USD" }, { "type": "Bed & Breakfast", "price": 120, "currency": "USD" }, { "type": "Sea View + Breakfast", "price": 150, "currency": "USD" } ] }

Respond.io only displays these options and does not calculate pricing.
OTA website uses the same structure for display.


---

Manual Hotel Contract Rates

The system must support manual hotel rates through the admin panel.

Table: manual_hotel_rates

hotel_name

room_type

meal

view

check_in

check_out

net_price

currency



---

Logic

When /searchHotels is executed:

1. Fetch provider prices


2. Fetch manual_hotel_rates


3. Treat manual rates as a provider named "manual"


4. Compare all results together


5. Select cheapest option



Manual rates must follow the same pipeline: Net Price → Provider Markup → Source Markup → Currency Conversion


---

Developer Requirements

1. Build /searchHotels API


2. Integrate Hotelbeds


3. Build Room Matching Engine


4. Build Price Comparison Engine


5. Build Markup Engine (flexible per source and provider)


6. Build Currency Conversion Engine


7. Implement response formatting per source


8. Generate unified notes field


9. Support adding new providers easily


10. Build Admin Panel for:



Markups

Currencies

Exchange rates


11. Implement room package generation logic


12. Implement manual hotel pricing system




---

System Rules

No price storage (real-time API only)

Stateless backend

Centralized logic

Single API usable by all channels without modification



---

Architecture Summary

A centralized Hotel Search and Pricing Engine that acts as the core pricing and availability system for multiple distribution channels, with unified comparison logic, dynamic markup system, currency conversion, and manual contract rate integration.