The alternative way for the Hotel-Spider system to receive reservations from an online booking system is via the OTA_ReadRQ / OTA_ResRetrieveRS message pair followed by the OTA_NotifReportRQ / OTA_NotifReportRS message pair. Reservations / modifications / cancellations are polled / pulled by the Hotel-Spider system from the online booking system using the OTA_ReadRQ / OTA_ResRetrieveRS request and in a second communication, the Hotel-Spider system pushes the confirmation that the reservation / modification / cancellation has correctly been integrated via the OTA_NotifReportRQ / OTA_NotifReportRS request.
...
Every minute the Hotel-Spider system will poll the online booking system to check if a reservation / modification / cancellation was made / modified / cancelled on the online booking system. When a reservation is available, the entire reservation should be returned to the Hotel-Spider system. As this is a "notif" message, it implies that the third party software client pushes the information to the Hotel-Spider servers.
Endpoints
Two distincts endpoints should be provided when starting the integration. One for the staging / testing and one for the production.
Example request and response
Code Block | ||
---|---|---|
| ||
<OTA_ReadRQ Target="Test" EchoToken="7571639933" TimeStamp="2015-11-12T18:05:39+01:00" Version="1.000"> <POS> <Source> <RequestorID ID="MASTERUSERNAME" MessagePassword="MASTERPASSWORD" /> </Source> </POS> <ReadRequests> <HotelReadRequest> <SelectionCriteria SelectionType="Undelivered" /> </HotelReadRequest> </ReadRequests> </OTA_ReadRQ> |
...
Code Block | ||||
---|---|---|---|---|
| ||||
<OTA_ResRetrieveRS Target="Test" EchoToken="7571639933" TimeStamp="2015-11-12T18:05:39+01:00" Version="1.000"> <ReservationsList> <HotelReservation ResStatus="Reserved" OriginalDeliveryMethodCode="11" RoomStayReservation="1" WalkInIndicator="0" CreateDateTime="2015-11-12T18:06:39+01:00" LastModifyDateTime="2015-11-12T18:06:40+01:00"> <POS> <Source> <RequestorID ID="ONLINEBOOKINGSYSTEMIDENTIFIER" Type="22" /> <BookingChannel Type="7"> <CompanyName>ONLINEBOOKINGSYSTEMNAME</CompanyName> </BookingChannel> </Source> </POS> <RoomStays> <RoomStay IndexNumber="1" RoomStayStatus="Reserved"> <RoomTypes> <RoomType RoomID="00L55bf507c63634" IsRoom="1"> <RoomDescription Name="Double Room with lake view"/> </RoomType> </RoomTypes> <RoomRates> <RoomRate EffectiveDate="2015-11-20" ExpireDate="2015-11-20" RatePlanID="00L55cdbe855ce0b"> <Rates> <Rate> <Base CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="162.00"/> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="162.00"/> </Rate> </Rates> <RoomRateDescription> <Text>Best Available Rate</Text> </RoomRateDescription> </RoomRate> <RoomRate EffectiveDate="2015-11-21" ExpireDate="2015-11-21" RatePlanID="00L55cdbe855ce0b"> <Rates> <Rate> <Base CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="162.00"/> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="162.00"/> </Rate> </Rates> <RoomRateDescription> <Text>Best Available Rate</Text> </RoomRateDescription> </RoomRate> </RoomRates> <GuestCounts> <GuestCount AgeQualifyingCode="10" Count="1"/> </GuestCounts> <TimeSpan Start="2015-11-20" End="2015-11-22" Duration="P2D"/> <CancelPenalties> <CancelPenalty> <Deadline AbsoluteDeadline="2015-11-18T00:00:00+01:00"/> <AmountPercent FeesInclusive="1" Amount="162.00" CurrencyCode="CHF"/> <PenaltyDescription Name="free cancellation 48 hours"/> </CancelPenalty> </CancelPenalties> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="324.00"/> <BasicPropertyInfo HotelCode="HOTELCODE" HotelName="HOTELNAME" CurrencyCode="CHF"/> <ResGuestRPHs>1</ResGuestRPHs> </RoomStay> <RoomStay IndexNumber="2" RoomStayStatus="Reserved"> <RoomTypes> <RoomType RoomID="00L55bf507c63634" IsRoom="1"> <RoomDescription Name="Double Room with lake view"/> </RoomType> </RoomTypes> <RoomRates> <RoomRate EffectiveDate="2015-11-20" ExpireDate="2015-11-20" RatePlanID="00L55cdbe855ce0b"> <Rates> <Rate> <Base CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="143.00"/> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="143.00"/> </Rate> </Rates> <RoomRateDescription> <Text>Best Available Rate</Text> </RoomRateDescription> </RoomRate> <RoomRate EffectiveDate="2015-11-21" ExpireDate="2015-11-21" RatePlanID="00L55cdbe855ce0b"> <Rates> <Rate> <Base CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="143.00"/> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="143.00"/> </Rate> </Rates> <RoomRateDescription> <Text>Best Available Rate</Text> </RoomRateDescription> </RoomRate> </RoomRates> <GuestCounts> <GuestCount AgeQualifyingCode="10" Count="1"/> </GuestCounts> <TimeSpan Start="2015-11-20" End="2015-11-22" Duration="P2D"/> <CancelPenalties> <CancelPenalty> <Deadline AbsoluteDeadline="2015-11-18T00:00:00+01:00"/> <AmountPercent FeesInclusive="1" Amount="162.00" CurrencyCode="CHF"/> <PenaltyDescription Name="free cancellation 48 hours"/> </CancelPenalty> </CancelPenalties> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="286.00"/> <BasicPropertyInfo HotelCode="HOTELCODE" HotelName="HOTELNAME" CurrencyCode="CHF"/> <ResGuestRPHs>2</ResGuestRPHs> </RoomStay> </RoomStays> <ResGuests> <ResGuest ResGuestRPH="1"> <Profiles> <ProfileInfo> <Profile ProfileType="1"> <Customer MaritalStatus="Unknown" Gender="Unknown"> <PersonName> <GivenName>James</GivenName> <Surname>Bond</Surname> </PersonName> <Email>jamesbond@secretmail.ch</Email> <Address> <StreetNmbr>2</StreetNmbr> <AddressLine>Bahnhofstrasse</AddressLine> <CityName>Zurich</CityName> <PostalCode>1000</PostalCode> <County>Zurich</County> <StateProv>Zurich</StateProv> <CountryName Code="CH">Switzerland</CountryName> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> <ResGuest ResGuestRPH="2"> <Profiles> <ProfileInfo> <Profile ProfileType="1"> <Customer MaritalStatus="Unknown" Gender="Unknown"> <PersonName> <GivenName>Money</GivenName> <Surname>Penny</Surname> </PersonName> <Email>moneypenny@secretmail.ch</Email> <Address> <StreetNmbr>2</StreetNmbr> <AddressLine>Bahnhofstrasse</AddressLine> <CityName>Zurich</CityName> <PostalCode>1000</PostalCode> <County>Zurich</County> <StateProv>Zurich</StateProv> <CountryName Code="CH">Switzerland</CountryName> </Address> </Customer> </Profile> </ProfileInfo> </Profiles> </ResGuest> </ResGuests> <ResGlobalInfo> <GuestCounts> <GuestCount AgeQualifyingCode="10" Count="2"/> </GuestCounts> <TimeSpan Start="2015-11-20" End="2015-11-22" Duration="P2D"/> <Comments> <Comment> <Text>They are on a secret mission</Text> </Comment> </Comments> <Guarantee GuaranteeType="CC/DC/Voucher"> <GuaranteesAccepted> <GuaranteeAccepted> <PaymentCard CardCode="MC" ExpireDate="0717"> <CardHolderName>Gareth Mallory</CardHolderName> <CardNumber Mask="xxxxxxxxxxxx1111">4111111111111111</CardNumber> </PaymentCard> </GuaranteeAccepted> </GuaranteesAccepted> </Guarantee> <Total CurrencyCode="CHF" AmountBeforeTax="0.00" AmountAfterTax="324.00"/> <HotelReservationIDs> <HotelReservationID ResID_Source="ONLINEBOOKINGSYSTEMID" ResID_SourceContext="ONLINEBOOKINGSYSTEMNAME" ResID_Type="14" ResID_Value="ABCD-668591"/> </HotelReservationIDs> <Profiles> <ProfileInfo> <Profile ProfileType="1"> <Customer MaritalStatus="Unknown" Gender="Unknown"> <PersonName> <GivenName>Gareth</GivenName> <Surname>Mallory</Surname> </PersonName> <Email>garethmallory@secretmail.ch</Email> <Address> <StreetNmbr>2</StreetNmbr> <AddressLine>Bahnhofplatz</AddressLine> <CityName>Winterthur</CityName> <PostalCode>4104</PostalCode> <County>Winterthur</County> <StateProv>Winterthur</StateProv> <CountryName Code="CH">Switzerland</CountryName> </Address> </Customer> </Profile> </ProfileInfo> <ProfileInfo> <Profile ProfileType="4"> <CompanyInfo> <CompanyName>Her Majesty's secret services</CompanyName> <Email>quartermaster@secretmail.ch</Email> <AddressInfo> <StreetNmbr>2</StreetNmbr> <AddressLine>Bahnhofplatz</AddressLine> <CityName>Winterthur</CityName> <PostalCode>4104</PostalCode> <County>Winterthur</County> <StateProv>Winterthur</StateProv> <CountryName Code="CH">Switzerland</CountryName> </AddressInfo> </CompanyInfo> </Profile> </ProfileInfo> </Profiles> <BasicPropertyInfo HotelCode="00L55bf2f4e6c708" HotelName="Hôtel du Port" CurrencyCode="CHF"/> </ResGlobalInfo> </HotelReservation> </ReservationsList> </OTA_ResRetrieveRS> |
Request structure
OTA_ReadRQ
Parent: None (Root element)
...
Name | Mandatory | Description |
---|---|---|
Type | Yes | Possible values are:
|
ID | Yes | The reservation number as assigned by the online booking system and communicated to the end customer/guest |
Child elements: None
ReadRequests
...
Name | Mandatory | Description |
---|---|---|
HotelCode | No | The ID of the hotel as defined on the online booking system |
Child elements: SelectionCriteria
...
Name | Mandatory | Description |
---|---|---|
DateType | No | Possible values are:
|
ResStatus | No | Possible values are:
|
SelectionType | No | Possible values are:
|
Start | No | The format will respect the ISO 8601 2015-11-16T22:23:48+00:00 |
End | No | The format will respect the ISO 8601 2015-11-16T22:23:48+00:00 |
Child elements: None
Response structure
OTA_ResRetrieveRS
Parent: None (Root element)
...
Price for the room night + services
...
Price for the room nights + services
...