Тарифы, отправленные через <OTA_HotelRateAmountNotifRQ>
, могут быть изменены с учетом взрослых и детей в дополнение к исходному количеству гостей. Сообщение ExtraGuestCharges
позволяет указать, как должны рассчитываться тарифы для этих дополнительных гостей, а также для каких номеров, тарифных планов и дат пребывания должна взиматься плата.
Требования к мощности
Цены, рассчитанные на основе сообщения ExtraGuestCharges
, действительны только в том случае, если все требования к мощности удовлетворены. Дополнительную информацию см. в разделе «Транзакция (данные о собственности)» .
Запросы
Синтаксис
Сообщение ExtraGuestCharges
использует следующий синтаксис:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges partner="partner_account_name"
id="message_ID"
timestamp="timestamp">
<HotelExtraGuestCharges hotel_id="HotelID" action="[overlay]">
<ExtraGuestCharge>
<RatePlans>
<RatePlan id="PackageID_1"/>
<RatePlan id="PackageID_2"/>
</RatePlans>
<RoomTypes>
<RoomType id="RoomID_1"/>
<RoomType id="RoomID_2"/>
</RoomTypes>
<StayDates>
<DateRange start="YYYY-MM-DD" end="YYYY-MM-DD"
days_of_week="MTWHFSU_or_subset"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="float"/>
<ChildAgeBrackets>
<!-- The following are different ways child charges can be specified.
Use the option that matches your system. -->
<ChildAgeBracket max_age="integer" amount="float"
exclude_from_capacity="[true|false]"/>
<ChildAgeBracket max_age="integer" percentage="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
<ChildAgeBracket max_age="integer" discount_amount="float"
exclude_from_capacity="[true|false]"
counts_as_base_occupant="[never|preferred|always]"/>
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Элементы и атрибуты
Сообщение ExtraGuestCharges
имеет следующие элементы и атрибуты:
Элемент/@Атрибут | События | Тип | Описание |
---|---|---|---|
ExtraGuestCharges | 1 | Complex element | Корневой элемент этого сообщения. |
ExtraGuestCharges / @partner | 1 | string | Партнерский аккаунт для этого сообщения. Это строковое значение представляет собой значение Partner key , указанное на странице настроек учетной записи в Hotel Center. Примечание. Если у вас есть серверная часть, которая предоставляет каналы для нескольких учетных записей, это значение должно соответствовать значению атрибута |
ExtraGuestCharges / @id | 1 | string | Уникальный идентификатор этого сообщения запроса. Это значение возвращается в ответном сообщении. Допустимые символы: az , AZ , 0-9 , _ (подчеркивание) и - (тире). |
ExtraGuestCharges / @timestamp | 1 | DateTime | Дата и время создания этого сообщения. |
ExtraGuestCharges / HotelExtraGuestCharges | 0..n | HotelExtraGuestCharges | Контейнер для сборов за один объект недвижимости. |
ExtraGuestCharges / HotelExtraGuestCharges / @hotel_id | 1 | string | Уникальный идентификатор свойства. Это значение должно соответствовать идентификатору отеля, указанному с помощью <id> в элементе <listing> в фиде списка отелей. Идентификатор отеля также указан в Hotel Center . |
ExtraGuestCharges / HotelExtraGuestCharges / @action | 0..1 | enum | Указывает, как применяется обновление. Поддерживается только overlay , по умолчанию используется наложение. Все предыдущие платежи за этот ресурс снимаются перед применением обновления. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge | 0..99 | ExtraGuestCharge | Единый набор сборов за недвижимость. Это может содержать ограничения на взимание сборов и расчет сборов в зависимости от возраста или категории гостей. Каждый |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets | 1 | AgeBrackets | Контейнер с возрастными категориями для расчета платы по возрасту или категории гостей. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge | 0..1 | AdultCharge | Контейнер для платы за дополнительного взрослого. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / AdultCharge / @amount | 0..1 | float | Положительное десятичное значение, указывающее фиксированную сумму, взимаемую за дополнительного взрослого. Для этой оплаты используется та же валюта, что и для ночных тарифов. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets | 0..1 | ChildAgeBrackets | Контейнер для дополнительных детских сборов. Эти возрастные категории могут охватывать только возрастной диапазон от 0 до 17 лет включительно. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket | 1..99 | ChildAgeBracket | Сбор, взимаемый с детей определенного возраста. Они должны быть упорядочены от самого низкого max_age до самого высокого max_age . Сумма, подлежащая оплате, может быть указана с помощью amount , percentage или discount_amount . Для каждого <ChildAgeBracket> должен быть указан ровно один из этих атрибутов. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @max_age | 1 | integer | Максимальный возраст, за который может взиматься плата, указанная в <ChildAgeBracket> . Минимальный возраст равен нулю, если перед этим не указан другой <ChildAgeBracket> . В противном случае он на один больше максимального возраста предыдущей группы. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @exclude_from_capacity | 1 | boolean | Логическое значение, указывающее, следует ли учитывать ребенка в этой возрастной группе при расчете общей вместимости комнаты и вместимости детей. Эти мощности можно установить с помощью Transaction(Property Data) . Например, младенцы младше определенного возраста могут не учитываться при расчете дееспособности ребенка. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @amount | 0..1 | float | Неотрицательное десятичное значение, определяющее фиксированную сумму, взимаемую за дополнительного ребенка в этой группе. Для этого сбора используется та же валюта, что и для ночных тарифов. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @percentage | 0..1 | float | Десятичное значение от 1 до 99, которое определяет процент от цены для взрослого, который должен взиматься за дополнительного ребенка в этой группе. Для этого сбора используется та же валюта, что и для ночных тарифов. Подробную информацию о том, как рассчитывается цена для взрослых, см. в разделе |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @discount_amount | 0..1 | float | Положительное десятичное значение, указывающее фиксированную сумму скидки от цены для взрослого за дополнительного ребенка в этой группе. Для этого сбора используется та же валюта, что и для ночных тарифов. Как правило, плата за ребенка в этой категории рассчитывается путем вычитания фиксированной суммы из «цены за единицу». Цена за единицу обсуждается более подробно в разделе атрибута |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / AgeBrackets / ChildAgeBrackets / ChildAgeBracket / @counts_as_base_occupant | 0..1 | string | Если указан атрибут Целью здесь является получение «цены за единицу», на основе которой можно рассчитать фактическую плату. Значение этого атрибута должно быть одним из следующих:
|
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes | 0..1 | RoomTypes | Контейнер для списка типов номеров, к которым применяется плата. Плата взимается за каждый указанный <RoomType> . Если <RoomTypes> не указан, плата взимается за все номера в указанном объекте размещения. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType | 1..n | RoomType | Указывает тип номера. Тип номера определяется в элементе <RoomData> в сообщении транзакции (данные о свойстве), и на него можно ссылаться с помощью его значения <RoomID> . (На его значение <RoomID> также ссылается атрибут InvTypeCode в сообщениях OTA_HotelRateAmountNotifRQ.) |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RoomTypes / RoomType / @id | 1 | string | Уникальный идентификатор инвентаря (типа помещения). Это значение сопоставляется с <RoomID> в сообщении транзакции (данные о собственности). Максимально допустимое количество символов — 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans | 0..1 | RatePlans | Контейнер для списка тарифных планов, к которым применяется оплата. Если <RatePlans> не указан, плата применяется ко всем тарифным планам. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan | 1..n | RatePlan | Указывает тарифный план. Тарифный план определяется комбинацией пакета, тарифов и доступности, как определено в сообщениях Transaction (Data Property), OTA_HotelRateAmountNotifRQ и OTA_HotelAvailNotifRQ, а также как указано PackageID. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / RatePlans / RatePlan / @id | 1 | string | Уникальный идентификатор тарифного плана. Это значение сопоставляется со значением PackageID в <PackageData> в сообщении транзакции (данные свойства) и в атрибуте RatePlanCode в <StatusApplicationControl> в сообщениях <OTA_HotelRateAmountNotifRQ> и <OTA_HotelAvailNotifRQ> . Максимально допустимое количество символов — 50. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates | 0..1 | StayDates | Контейнер для одного или нескольких диапазонов дат, определяющих порядок применения платежей. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange | 1..99 | DateRange | Диапазон дат, определяющий даты, когда будет применяться акция. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @start | 0..1 | Date | Дата начала (в зависимости от часового пояса объекта), включая диапазон дат. Эта дата должна быть раньше или совпадать с датой end . Если start не указано, диапазон дат фактически не ограничен с точки зрения даты начала. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @end | 0..1 | Date | Конечная дата (в зависимости от часового пояса объекта), включая диапазон дат. Эта дата должна совпадать с датой start или быть позже нее. Если end не указан, диапазон дат фактически не ограничен с точки зрения даты окончания. |
ExtraGuestCharges / HotelExtraGuestCharges / ExtraGuestCharge / StayDates / DateRange / @days_of_week | 0..1 | string | Дни недели, которые разрешены в диапазоне дат. Если не указано, в диапазоне дат разрешены все дни. Каждый символ в строке указывает день. Например, «MTWHF» указывает, что в диапазоне дат разрешены дни недели. Допустимые символы:
Любая комбинация символов допустима. |
Примеры
Плата за взрослых
Плата за дополнительных взрослых может быть выражена только в фиксированных суммах. В следующем примере показано сообщение ExtraGuestCharges
, в котором указаны расходы для взрослых:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<StayDates />
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Вот соответствующие тарифы:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
<BaseByGuestAmt AmountAfterTax="120.00"
CurrencyCode="USD"
NumberOfGuests="3"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
Когда пользователь ищет в Google четверых взрослых, общая ставка составит 170 = 120 + 50.
120 получается из тарифа <BaseByGuestAmt>
с NumberOfGuests="3"
и 50 — из AdultCharge amount="50"
.
Плата за детей
Плата за детей выражена в возрастных группах до 17 лет и может быть выражена в фиксированных суммах, процентах или скидках.
В следующем примере показано сообщение ExtraGuestCharges
, в котором указаны дочерние расходы:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<AgeBrackets>
<ChildAgeBrackets>
<ChildAgeBracket max_age="3" percentage="10"
counts_as_base_occupant="never" />
<ChildAgeBracket max_age="10" percentage="30"
counts_as_base_occupant="preferred"/>
<ChildAgeBracket max_age="17" discount_amount="10"
counts_as_base_occupant="always" />
</ChildAgeBrackets>
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Вот соответствующие тарифы:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelRateAmountNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"
EchoToken="12345678"
TimeStamp="2020-05-19T20:50:37-05:00"
Version="3.0">
<RateAmountMessages HotelCode="ABC">
<RateAmountMessage>
<StatusApplicationControl Start="2020-05-18"
End="2020-05-23"
InvTypeCode="RoomID_1"
RatePlanCode="PackageID_1"/>
<Rates>
<Rate>
<BaseByGuestAmts>
<BaseByGuestAmt AmountAfterTax="100.00"
CurrencyCode="USD"
NumberOfGuests="1"/>
<BaseByGuestAmt AmountAfterTax="110.00"
CurrencyCode="USD"
NumberOfGuests="2"/>
</BaseByGuestAmts>
</Rate>
</Rates>
</RateAmountMessage>
</RateAmountMessages>
</OTA_HotelRateAmountNotifRQ>
```
1. Suppose you want the total price for 2 adults and 1 child of 2 years
of age.
Children aged 0-3 are never included in the rate's occupancy,
so here you should take the double occupancy rate and divide by 2 to
get the unit price. Then, multiply by the percentage rate and sum
with the rate to get the total price.
`unit price ` = 110 / 2 = 55
`total price` = 110 + 55 * 0.1 = 115.5
1. Suppose you want the total price for 1 adult and 2 children, both of 5
years of age.
Children aged 4-10 are preferably included in the rate's
occupancy. you should start by looking for a 3 adult rate since both
children are preferably included in the rate's occupancy. Since
that doesn't exist you should fall back to the 2 adult rate and then,
take this rate and divide by two to get the unit price. Finally,
multiply by the percentage rate and sum with the scaled rate to
get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + 55 * 0.3 + 55 * 0.3 = 88
1. Suppose you want the total price for 1 adult and 1 child of 17
years of age.
Children aged 11-17 are always included in the rate's occupancy, so,
in this case, take the double occupancy rate and divide by 2 to get
the unit price. Then, deduct it by the discount amount and sum with
the scaled rate to get the total price.
`unit price` = 110 / 2 = 55
`total price` = 55 + (55 - 10) = 100
Ограничения по зарядам
Все типы ограничений являются необязательными, и можно использовать любую их комбинацию.
В следующем примере показано сообщение ExtraGuestCharges
, в котором указаны ограничения:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
В сообщении выше указано, что со взрослых следует взимать плату за любой продукт с типом номера «queen-size» или «king-size» с тарифным планом «бесплатный Wi-Fi» или «горячий завтрак» на даты с 1 сентября 2020 г. по 14 сентября 2020 г. .
Перекрывающиеся сборы
В этом разделе показан пример недопустимого сообщения, в котором указаны разные расходы для одних и тех же комбинаций дат и продуктов.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestCharges timestamp="2001-02-03T04:05:06+00:00" id="1">
<HotelExtraGuestCharges hotel_id="ABC" action="overlay">
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-14"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="50" />
</AgeBrackets>
</ExtraGuestCharge>
<ExtraGuestCharge>
<RoomTypes>
<RoomType id="queen" />
<RoomType id="king" />
</RoomTypes>
<RatePlans>
<RatePlan id="free-wifi" />
<RatePlan id="hot-breakfast" />
</RatePlans>
<StayDates>
<DateRange start="2020-09-01" end="2020-09-05"/>
</StayDates>
<AgeBrackets>
<AdultCharge amount="20" />
</AgeBrackets>
</ExtraGuestCharge>
</HotelExtraGuestCharges>
</ExtraGuestCharges>
Сообщение выше недействительно, поскольку первый <ExtraGuestCharge>
указывает, что с «королевы» и «бесплатного Wi-Fi» с 1 по 14 сентября взимается дополнительная плата в размере 50 для взрослых. Второй <ExtraGuestCharge>
указывает, что любой из «королевы» или «короля» с за любой «бесплатный Wi-Fi» или «горячий завтрак» с 1 по 5 сентября взимается дополнительная плата в размере 20 для взрослых. С 1 по 5 сентября взимается дублирующая плата за «queen-size» и «бесплатный Wi-Fi», а также возникает конфликт между взиманием платы. 20 или 50 за дополнительного взрослого.
Ответы
Синтаксис
Сообщение ExtraGuestChargesResponse
использует следующий синтаксис:
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="timestamp"
id="message_ID"
partner="partner_key">
<!-- Either Success or Issues will be populated. -->
<Success/>
<Issues>
<Issue code="issue_code" status="issue_type">issue_description</Issue>
</Issues>
</ExtraGuestChargesResponse>
Элементы и атрибуты
Сообщение ExtraGuestChargesResponse
имеет следующие элементы и атрибуты:
Элемент/@Атрибут | События | Тип | Описание |
---|---|---|---|
ExtraGuestChargesResponse | 1 | Complex element | Корневой элемент, указывающий успешность или проблемы полученного сообщения запроса ExtraGuestCharges . |
ExtraGuestChargesResponse / @timestamp | 1 | DateTime | Дата и время создания этого сообщения. |
ExtraGuestChargesResponse / @id | 1 | string | Уникальный идентификатор из связанного сообщения ExtraGuestCharges . |
ExtraGuestChargesResponse / @partner | 1 | string | Партнерский аккаунт для этого сообщения. |
ExtraGuestChargesResponse / Success | 0..1 | Success | Указывает, что сообщение ExtraGuestCharges было успешно обработано без предупреждений, ошибок или сбоев. В каждом сообщении присутствует либо |
ExtraGuestChargesResponse / Issues | 0..1 | Issues | Контейнер для одной или нескольких проблем, возникших при обработке сообщения ExtraGuestCharges . В каждом сообщении присутствует либо |
ExtraGuestChargesResponse / Issues / Issue | 1..n | Issue | Описание предупреждения, ошибки или сбоя, возникшего при обработке сообщения ExtraGuestCharges . Подробную информацию об этих проблемах можно найти в разделе «Сообщения об ошибках статуса фида» . |
ExtraGuestChargesResponse / Issues / Issue / @code | 1 | integer | Идентификатор проблемы. |
ExtraGuestChargesResponse / Issues / Issue / @status | 1 | enum | Тип возникшей проблемы. Допустимые значения: |
Примеры
Успех
Ниже приведен ответ на успешно обработанное сообщение ExtraGuestCharges
.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Success/>
</ExtraGuestChargesResponse>
Проблемы
Ниже приведен ответ на сообщение ExtraGuestCharges
, которое не было обработано из-за ошибок.
<?xml version="1.0" encoding="UTF-8"?>
<ExtraGuestChargesResponse timestamp="2020-05-18T16:20:00-04:00"
id="12345678"
partner="partner_key">
<Issues>
<Issue code="1001" status="error">Example</Issue>
</Issues>
</ExtraGuestChargesResponse>