Отель устанавливает цену на каждый тариф, категорию номера, тип места и дату. Например:
В поиске предоставляются данные на год вперед от текущей даты. Забронировать можно от 1 до 365 ночей.
Передаются те цены, которые отельер настроит в своём личном кабинете. Мы передаем цены, не зная брутто это или нетто. Наценки и скидки создаются на стороне канала.
В методе search/api/properties/room-stays/search можно указать фильтры:
По наличию питания — поле mealPreference.mealType. В запросе можно передать следующие значения:
All — отображение минимального по стоимости варианта проживания по каждому объекту размещения.
MealOnly — отображение минимального по стоимости варианта проживания с включенным в стоимость тарифа питанием по каждому объекту размещения. Если в объекте размещения отсутствует такой вариант проживания, этот объект размещения не выводится.
MealPriority — отображение минимального по стоимости варианта проживания с включенным в стоимость тарифа питанием по каждому объекту размещения. Если в объекте размещения отсутствуют такие варианты проживания, этот объект размещения также выводится в ответе.
По типу питания — поле mealPreference.mealsIncluded. В запросе можно передать значения возможных вариантов питания, которые доступны в ответе метода content/v1/meal-plans, а также в ответе методов content/v1/properties — отображение всей информации о доступных объектах размещения и content/v1/properties{propertyId} — отображение информации по конкретному объекту размещения.
Результат поиска показывает минимальные по стоимости варианты проживания с включенным в стоимость тарифа конкретными типом питания по каждому объекту размещения. Например, если в запросе указать только значения «BreakFast», в ответе можно получить минимальные по стоимости варианты проживания с включенным в стоимость тарифа питанием только типа «BreakFast». При этом в ответе будут отсутствовать варианты «AllInlusive» или «HalfBoard».
Фильтр по типу питания можно использовать только при наличии питания типа «MealOnly» или «MealPriority».
По минимальной и максимальной стоимости проживания — поля pricePreference.minPrice и pricePreference.maxPrice.
Эти поля являются необязательными. Если передать значения полей в API, результат поиска покажет варианты проживания с минимальной ценой по всем доступным средствам размещения по выбранным фильтрам.
В агрегационном поиске отображаются варианты проживания с минимальной ценой в рамках апартаментов, которые находятся по разным адресам. Чтобы все апартаменты отображались в агрегационном поиске, необходимо:
в настройках указать тип объекта размещения — «Апартаменты»;
выбрать режим для квартир и апартаментов, который подключается через службу поддержки TravelLine;
в категориях номеров каждого средства размещения указать свой адрес: город, улица, литера, строение, корпус.
Если у нескольких категорий номеров указан один адрес, считается, что эти категории номеров размещаются в одном здании и в агрегационном поиске по таким категориям номеров отобразится один вариант проживания с минимальной ценой.
В теле ответа на создание и чтение брони содержатся поля:
НДС проживания — booking.roomstays[].ratePlan VAT;
НДС услуг — booking.roomstays[].services[] VAT.
Поле taxAmount содержит сумму налогов и сборов, которую оплачивает гость при заезде согласно законодательству РФ (НДС не содержит). Например:
Федеральный закон № 214-ФЗ от 29 июля 2017 года;
Закон Краснодарского края № 3690-КЗ от 27.11.2017.
Для одного RoomStay доступно только одно питание. В системе TravelLine отель может добавить в тариф только одну услугу с типом питания. Поэтому mealPlanCode является строковым типом данных.
Обратите внимание на поля «arrivalDate» и «departureDate» — в них должны быть указаны даты в будущем:
В результатах поиска возвращаются поля:
roomStays.fullPlacementsName;
roomStays.roomType.placements.
В placements перечислены не конкретные места, а типы условий для размещения гостей. В ответе видно, что два взрослых размещаются на основных местах, ребенок в возрасте 2 года на основном месте, а ребенок в возрасте 5 лет на дополнительном месте.
Дети могут размещаться на взрослых местах — это происходит, если нет специальных условий для размещения детей или нет свободных детских мест. В таких случаях дети размещаются по цене взрослого размещения.
Расшифровки дополнительных мест нет. Поэтому нельзя узнать — диван это или, например, детская кроватка.
В результатах поиска вариантов размещений доступность зависит от выбранного отельером блока доступности в каждом тарифном плане. Подробности читайте в статье «Как работать с разными блоками доступности номеров». Тарифы передаются в каналы продаж только по одному блоку доступности.
В каналы продаж передаютсяправила отмены бронирований, настроенные в личном кабинете TravelLine. Сумма штрафа может быть разной в зависимости от даты отмены, если у средства размещения настроены различные условия отмены.
В результатах поиска возвращаются следующие поля:
roomStays.cancellationPolicy.freeCancellationPossible;
roomStays.cancellationPolicy.freeCancellationDeadline;
roomStays.cancellationPolicy.penaltyAmount.
В зависимости от полученных значений в полях правила отмены интерпретируются так.
Бронирование является невозвратным, при этом штраф за отмену на текущую дату составляет 4000 (в последующие даты размер штрафа может быть другим), при получении следующих значений:
freeCancellationPossible = false;
freeCancellationDeadline = null;
penaltyAmount = 4000.
Отмена бронирования бесплатна до 30.09.2023 12:00. После этого времени штраф за отмену составит 4000 (в последующие даты размер штрафа может быть другим), при получении следующих значений:
freeCancellationPossible = true;
freeCancellationDeadline = 2023-09-30T12:00;
penaltyAmount = 4000.
Штраф за отмену не взимается при отмене в любую дату, при получении следующих значений:
freeCancellationPossible = true;
freeCancellationDeadline = null;
penaltyAmount = null.
Поиск вариантов проживаний по конкретному средству размещения:
90 pt — 866 ms;
95 pt — 1050 ms.
Поиск вариантов проживания с минимальной ценой по всем доступным средствам размещения:
90 pt — 1111 ms;
95 pt — 1728 ms.