Zum Inhalt

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 IDs
  • Id (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): 1
  • RequestorID@ID (Hotel-ID): 4
  • HotelReservationID@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>