OTA_HotelResNotifRQ
Methode zum Abrufen von Buchungen vom Buchungskanal Kurzurlaub.de.
Siehe auch allgemeinen Informationen zur Reservation API im Entwickler Guide
Buchungen werden mit Status gesendet
| Status | Beschreibung |
|---|---|
| Book | Neue Buchungen, diese Status wird nur einmal beim ersten Senden verwendet, danach werden alle weitere Response zu einer Buchungs-ID immer mit Status Modify gesendet |
| Modify | Buchungsänderungen oder erneuter Abruf einer schon gesendeten Buchung per ResID_Value oder Datumsbereich von/bis |
| Cancel | Stornierungen |
OTA_HotelResNotifRQ - Anfrage per GET - REST-API
jede Methode kann per REST-API mittels GET aufgerufen werden. Aber dies sollte bei Buchungen nur zu Entwicklungs- oder Testzwecken erfolgen
Verwendete Parameter:
AgentDutyCode(optional, sofern IP WhiteList oder HTTP Basic Auth verwendet wird)HotelCode(mandatory)HotelReservationId(mandatory) eine ReservationsId oder kommagetrennte IDsId(alternativ zu HotelReservationId)
Beispiel:
GET /ota/api/HotelResNotif?AgentDutyCode=1&HotelCode=4&HotelReservationId=2129149
oder kommagetrennte ReservationsId`s
GET /ota/api/HotelResNotif?AgentDutyCode=1&HotelCode=4&HotelReservationId=2129149,2129150,2129151
alternativ auch mit Angabe der gesamten ResID_Value (R12345678-A123456-1234 bspw. R2129149-A20540-4) möglich.
OTA_HotelResNotifRQ - Anfrage per POST
OTA_HotelResNotifRQ Request (RQ) und Response (RS) am Beispiel des Testhotels
@AgentDutyCode(Agent-ID): 1RequestorID@ID(Hotel-ID): 4HotelReservationID@ResID_Value(ReservationId): 12345678 oder lange Version R12345678-A1234567-1234
Beispiel OTA_HotelResNotifRQ (Request)
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" Target="Production" Version="1">
<POS>
<Source AgentDutyCode="1">
<RequestorID ID="4" Type="4"/>
</Source>
</POS>
<HotelReservations>
<HotelReservation>
<ResGlobalInfo>
<HotelReservationIDs>
<HotelReservationID ResID_Value="R1513719-A1234567-1234"/>
</HotelReservationIDs>
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRQ>
OTA_HotelResNotifRS - Versionen der Response
in der älteren Version der OTA_HotelResNotifRS, welche noch von Partner verwendet wird, wurden Extra-Nächte nicht als RoomStays sondern als Serviceleistung ausgewiesen.
Hier wird die OTA-V2 (neue Version ab 10.2021) beschrieben als neue Version der Übermittlung von Buchungsdaten mit ausgewiesenen RoomStays
- Zimmerkosten per RoomStay (Angebotspreis pro Person wird in Zimmerkosten pro Nacht umgerechnet)
- Extra-Nächte als RoomStay ausgewiesen (Preis pro Person/Nacht für eine oder mehrere Verlängerungsnächte wird in Zimmerkosten pro Nacht umgerechnet)
Hinweise:
in der Antwort sollte immer ein <Success/>enthalten sein,
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EchoToken="1394da4bfc4daf820437a33cb87de833" PrimaryLangID="de"
TimeStamp="2021-10-28T12:52:38+02:00" Target="Production" Version="1.000">
<Success/>
<HotelReservations>
<HotelReservation LastModifyDateTime="2021-06-21T15:38:33+00:00">
<ResGlobalInfo>
<ResStatus>Modify</ResStatus>
<BookingChannel Primary="1" Type="7">
<CompanyName>Kurzurlaub.de Testagent WBE</CompanyName>
</BookingChannel>
<HotelReservationIDs>
<HotelReservationID ResID_Value="R1513719-190772-4" ResID_Date="2021-06-21T15:38:33+00:00" />
</HotelReservationIDs>
<Total AmountAfterTax="427.40" DecimalPlaces="2" CurrencyCode="EUR"/>
<TimeSpan Start="2021-10-05" End="2021-10-11"/>
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<PersonName>
<NamePrefix>Herr</NamePrefix>
<GivenName>Andreas</GivenName>
<Surname>Günther</Surname>
</PersonName>
<Telephone PhoneNumber="0385 1666555111111112" PhoneTechType="1"/>
<Address>
<CompanyName/>
<AddressLine>JS10</AddressLine>
<CityName>Schwerin</CityName>
<PostalCode>19053</PostalCode>
<CountryName Code="DEU">Deutschland</CountryName>
</Address>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGlobalInfo>
<Comments>
<Comment>
<Text><![CDATA[
Test
Gebuchtes Angebot:
- Offer-ID: 190772
- Offer-Name: Testarrangement schönes Schwerin - bitte nicht buchen 2
- RatePlanCode: BAR-190772
- RatePlanId: 190772
- Reservation-ID: 1513719
- Reservation-Code: 45VQK
- Reservation-Number: R1513719-AP190772-9432 / P88
Gebuchte Extras:
2 x Flasche Rotwein / 2 x 5.90 Euro [Per use] = 11.80 Euro total
4 x Testleistung Hukepack [10 Minuten] / 4 x 3.90 Euro [Per person] = 15.60 Euro total
]]></Text>
</Comment>
</Comments>
<RoomStays>
<RoomStay IndexNumber="1">
<RoomTypes>
<RoomType RoomTypeCode="5306">
<RoomDescription Name="Doppelzimmer (20m²)"/>
</RoomType>
</RoomTypes>
<Base AmountAfterTax="200.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="400.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<BasicPropertyInfo HotelCode="4"/>
<ResGuestRPHs>
<ResGuestRPH RPH="0"/>
</ResGuestRPHs>
<RatePlans>
<RatePlan RatePlanCode="BAR-190772" RatePlanID="190772">
<RatePlanDescription>
<Text>Testarrangement! Bitte dieses schöne Arrangement nicht buchen !!!</Text>
</RatePlanDescription>
</RatePlan>
</RatePlans>
<RoomRates>
<RoomRate RoomTypeCode="5306" RatePlanCode="BAR-190772" RatePlanID="190772" NumberOfUnits="2">
<Rates>
<Rate EffectiveDate="2021-10-05" ExpireDate="2021-10-08" UnitMultiplier="3">
<Base AmountAfterTax="46.67" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="140.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<RateDescription>
<Text>Offer rate (3 overnight stays)</Text>
</RateDescription>
</Rate>
<Rate EffectiveDate="2021-10-08" ExpireDate="2021-10-11" UnitMultiplier="3">
<Base AmountAfterTax="20.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="60.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<RateDescription>
<Text>Extra night rate (3 x Verlängerungsnacht inkl. Frühstück für 2
Doppelzimmer a 2 Personen / Keine Kinder)
</Text>
</RateDescription>
</Rate>
</Rates>
</RoomRate>
</RoomRates>
<GuestCounts IsPerRoom="0">
<GuestCount AgeQualifyingCode="10" Count="4"/>
<GuestCount AgeQualifyingCode="8" Count="0"/>
</GuestCounts>
</RoomStay>
</RoomStays>
<ResGuests>
<ResGuest ResGuestRPH="1">
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<PersonName>
<NamePrefix>Herr</NamePrefix>
<GivenName>Andreas</GivenName>
<Surname>Günther</Surname>
</PersonName>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
<ResGuest ResGuestRPH="2">
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<PersonName>
<NamePrefix>Frau</NamePrefix>
<GivenName>Mama</GivenName>
<Surname>Günther</Surname>
</PersonName>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
<ResGuest ResGuestRPH="3">
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<PersonName>
<NamePrefix>Herr</NamePrefix>
<GivenName>Max</GivenName>
<Surname>Günther</Surname>
</PersonName>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
<ResGuest ResGuestRPH="4">
<Profiles>
<ProfileInfo>
<Profile>
<Customer>
<PersonName>
<NamePrefix>Frau</NamePrefix>
<GivenName>Gerda</GivenName>
<Surname>Günther</Surname>
</PersonName>
</Customer>
</Profile>
</ProfileInfo>
</Profiles>
</ResGuest>
</ResGuests>
<Services>
<Service ID="2289821" ServiceRPH="1" ServiceInventoryCode="10153" ServicePricingType="Per use"
Quantity="2">
<Price NumberOfUnits="2">
<Base AmountAfterTax="5.90" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="11.80" DecimalPlaces="2" CurrencyCode="EUR"/>
</Price>
<ServiceDetails>
<Comments>
<Comment>
<Text>Flasche Rotwein</Text>
</Comment>
</Comments>
</ServiceDetails>
</Service>
<Service ID="2289822" ServiceRPH="2" ServiceInventoryCode="10154" ServicePricingType="Per person"
Quantity="4">
<Price NumberOfUnits="4">
<Base AmountAfterTax="3.90" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="15.60" DecimalPlaces="2" CurrencyCode="EUR"/>
</Price>
<ServiceDetails>
<Comments>
<Comment>
<Text>Testleistung Hukepack</Text>
</Comment>
</Comments>
</ServiceDetails>
</Service>
</Services>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRS>
Besonderheiten - Anzahl Zimmer, Übernachtungen und Verlängerungsnächte
Als Beispiel mit 2 gebuchten Zimmern beachten Sie bitte diese News zu UnitMultiplier / NumberOfUnits
@UnitMultiplier: Anzahl Übernachtungen / Number of nights
bezieht sich auf den Zeitraum des RoomStays (@EffectiveDate - @ExpireDate)
Beispiel 1
<Rate EffectiveDate="2022-01-26" ExpireDate="2022-01-28" UnitMultiplier="2">
Base@AmountAfterTax: Preis pro Zimmer / pro Nacht
<Rate EffectiveDate="2022-01-26" ExpireDate="2022-01-28" UnitMultiplier="2">
<Base AmountAfterTax="140.00" DecimalPlaces="2" CurrencyCode="EUR" />
<Total AmountAfterTax="280.00" DecimalPlaces="2" CurrencyCode="EUR" />
</Rate>
@NumberOfUnits: Anzahl der gebuchten Zimmer oder 1, wenn der Agent separate RoomStays für jedes gebuchte Zimmer verwendet (wenn Sie diese 2 gebuchten Zimmer als 2 separate RoomStays-Blöcke benötigen), normalerweise wird ein RoomStay mit der Anzahl der gebuchten Zimmer in diesen (bspw. @NumberOfUnits = 2) gesendet.
Beispiel 2
- 1 gebuchtes Zimmer, aber mit Verlängerungsnächten, daher haben wir 2 RoomStays Blöcke für
- Angebotspreis (2 x Übernachtungen)
- Verlängerungsnacht (2 x)
<RoomRates>
<RoomRate RoomTypeCode="22740" RatePlanCode="TEST-BAR-2N" RatePlanID="131729" NumberOfUnits="1">
<Rates>
<Rate EffectiveDate="2022-01-26" ExpireDate="2022-01-28" UnitMultiplier="2">
<Base AmountAfterTax="140.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="280.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<RateDescription>
<Text>Offer rate (2 overnight stays)</Text>
</RateDescription>
</Rate>
<Rate EffectiveDate="2022-01-28" ExpireDate="2022-01-30" UnitMultiplier="2">
<Base AmountAfterTax="178.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="356.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<RateDescription>
<Text>Extra night rate (2 x Verlängerungsnacht Verlängerungsnacht incl. Frühstück für 1 Doppelzimmer a 2 Personen / Keine Kinder)</Text>
</RateDescription>
</Rate>
</Rates>
</RoomRate>
</RoomRates>
Anzahl der Gäste je Zimmer und Verteilung der Gäste
Die Anzahl der Gäste je Zimmer und Verteilung der Gäste auf die gebuchten Zimmer erfolgt immer nach dem Prinzip der Berechnung auf Basis der Standard-Zimmerbelegung. Für jeden Zimmeryp gibt es eine Standard-Zimmerbelegung bspw.
- Doppelzimmer mit 2 Personen + Kinder
- Einzelzimmer mit 1 Persons + Kinder
Es wird bei Doppelzimmern nicht mit einer abweichenden Belegeung (bspw. Einzelbelegung) gerechnet.
GuestCounts@IsPerRoom: Attribut ist immer 0
Alle Gäste werden also nicht pro Zimmer sondern insgesamt verteilt, daher ist bei einem gebuchten Doppelzimmer die Anzahl (Count="2") = 2 Personen im DZ,
bei 2 gebuchten Doppelzimmern die Anzahl (Count="4") , also 2 x je 2 Personen in den 2 Doppelzimmern.
<GuestCounts IsPerRoom="0">
<GuestCount AgeQualifyingCode="10" Count="4"/>
<GuestCount AgeQualifyingCode="8" Count="0"/>
</GuestCounts>
Alternative Kosten Attribute
Alternativ und zustätzlich zum Gesamtbetrag @AmountAfterTax auch mit separaten Gesamtkosten Attributen möglich für folgende Bereiche möglich
@RoomStaysAmountAfterTax(Gesamtbetrag der Zimmerkosten / RoomStays)@ServicesAmountAfterTax(Gesamtbetrag der Serviceleistungen)@CouponAmountAfterTax(Gesamtbetrag Wertgutschein)
Beispiel:
<Total
AmountAfterTax="427.40" DecimalPlaces="2" CurrencyCode="EUR"
RoomStaysAmountAfterTax="400.00"
ServicesAmountAfterTax="27.40"
CouponAmountAfterTax="0.00"
/>
Gebuchte Zusatzleistungen - Services und ServicePricingType
Im Block Services werden alle gebuchten Zusatzleistungen / Services als Liste gesendet.
Service@ID(Unique ID der gebuchten Zusatzleistung)Service@ServiceRPH(Fortlaufende Nummer)Service@ServiceInventoryCode(Unique ID der Zusatzleistung des Hotels bei Kurzurlaub.de)Service@ServicePricingType(PreisTyp siehe Liste der ServicePricingTypes)Service@Quantity(Anzahl der gebuchten Services 1-n)Price@NumberOfUnits(identisch zu Quantity)
Beispiel für Services
<Services>
<Service ID="2289821" ServiceRPH="1" ServiceInventoryCode="10153" ServicePricingType="Per use" Quantity="2">
<Price NumberOfUnits="2">
<Base AmountAfterTax="5.90" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="11.80" DecimalPlaces="2" CurrencyCode="EUR"/>
</Price>
<ServiceDetails>
<Comments>
<Comment>
<Text>Flasche Wasser</Text>
</Comment>
</Comments>
</ServiceDetails>
</Service>
<Service ID="2289822" ServiceRPH="2" ServiceInventoryCode="10154" ServicePricingType="Per person" Quantity="4">
<Price NumberOfUnits="4">
<Base AmountAfterTax="3.90" DecimalPlaces="2" CurrencyCode="EUR"/>
<Total AmountAfterTax="15.60" DecimalPlaces="2" CurrencyCode="EUR"/>
</Price>
<ServiceDetails>
<Comments>
<Comment>
<Text>Testleistung einmalig pro Person</Text>
</Comment>
</Comments>
</ServiceDetails>
</Service>
</Services>
Übersicht der ServicePricingTypes
Wir senden die folgenden Werte für das Attribut ServicePricingType.
Der Standardwert (default value) falls etwas nicht zugeordnet wreden kann ist Per use.
Per room(pro Zimmer)Per room per night(pro Zimmer/Nacht)Per stay(pro Aufenthalt)Per person(pro Person)Per person per night(pro Person/Nacht)Per night(pro Nacht bspw. Extrabett)Per use(pro Stück oder auch Standardwert)
Sonderformen
Per day(pro Tag bspw. Ausleihe Fahrrad)Per minute(pro Minute)Per hour(pro Stunde)
Fehlermeldungen
Wenn schwere Fehler bspw. in der Authentifizierung auftreten, senden wird diese in einer OTA_ErrorRS
Response mit @ErrorCode und @ErrorMessage
Hier eine Liste gängiger Fehler
| ErrorCode | ErrorMessage |
|---|---|
| 210 | HotelNotLinked - Hotel (HotelCode 1234) linked to another channel manager (your AgentDutyCode is 123) |
| 211 | HotelNotActivated - Hotel not found (HotelCode 1234 / AgentDutyCode 123) |
| 104 | InternalError - Empty HotelCode (HotelId) in accepted params (agentdutycode, hotelcode, ...) |
| 550 | CustomError - forbidden to read HotelReservation for ReservationId 12345678 (HotelId 1234) |
| 550 | CustomError - HotelReservation for ReservationId 12345678 not found |
Beispiel OTA_ErrorRS (Response)
<OTA_ErrorRS xmlns="http://www.opentravel.org/OTA/2003/05"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
EchoToken="29419a3b53ee97680b01c40f377eb98f"
PrimaryLangID="de"
TimeStamp="2022-02-03T15:18:47+01:00"
Target="Production"
Version="1.000"
ErrorCode="550"
ErrorMessage="CustomError - forbidden to read HotelReservation for ReservationId 2109075 (HotelId 6069 vs 4)"
/>
Alternative abgefangene Fehler (<Errors> oder <Warnings>) werden innerhalb der Antwort ohne das <Success/> gesendet,
bspw. ReservationId wurde nicht gefunden oder Datumsperioden sind falsch angegeben.
Beispiel OTA_HotelResNotifRS (Response) mit einer Reservierung und einem abgefangenen Fehler
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" EchoToken="6dbce5c77f9a5be84fae246f97dd02c7" PrimaryLangID="de" TimeStamp="2022-02-03T16:35:43+01:00" Target="Production" Version="1.000">
<!-- some Error occurred, but we send some answer -->
<Errors>
<Error Code="550" Type="5">forbidden to read HotelReservation for ReservationId 2129150 (HotelId 6504 vs 4)</Error>
</Errors>
<HotelReservations>
<HotelReservation LastModifyDateTime="2022-01-31T11:51:58+01:00">
<ResGlobalInfo>
<ResStatus>Modify</ResStatus>
<BookingChannel Primary="1" Type="7">
<CompanyName>Kurzurlaub.de Testagent WBE</CompanyName>
</BookingChannel>
<HotelReservationIDs>
<HotelReservationID ResID_Value="R2129149-20540-4" ResID_Date="2022-01-31T11:02:30+01:00"/>
</HotelReservationIDs>
<Total AmountAfterTax="1990.00" DecimalPlaces="2" CurrencyCode="EUR"/>
<TimeSpan Start="2022-02-18" End="2022-02-20"/>
...
</OTA_HotelResNotifRS>
Stornierung von Buchungen
Wenn Buchungen sotorniert werden, senden wird diesen Status <ResStatus>Cancel</ResStatus>
mit einem Datum der Stornierung im Attribut CancellationDate.
Beispiel Cancel und CancellationDate
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelResNotifRS xmlns="http://www.opentravel.org/OTA/2003/05" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" EchoToken="6dbce5c77f9a5be84fae246f97dd02c7" PrimaryLangID="de" TimeStamp="2022-05-01T11:43:35+02:00" Target="Production" Version="2.000">
<HotelReservations>
<HotelReservation LastModifyDateTime="2022-05-01T11:43:35+02:00">
<ResGlobalInfo>
<ResStatus>Cancel</ResStatus>
<BookingChannel Primary="1" Type="7">
<CompanyName>Kurzurlaub.de Testagent WBE</CompanyName>
</BookingChannel>
<HotelReservationIDs>
<HotelReservationID ResID_Value="R2129149-20540-4" ResID_Date="2022-01-31T11:02:30+01:00" CancellationDate="2022-05-01T11:43:35+02:00"/>
</HotelReservationIDs>
...
</ResGlobalInfo>
</HotelReservation>
</HotelReservations>
</OTA_HotelResNotifRS>