Connecter un PMS avec elloha   v1.10

Introduction

Le but de ce document est de présenter la façon de connecter un PMS aux applications elloha et de spécifier les échanges entre les 2 systèmes.

Les communications entre les systèmes se feront via des messages xml au format OTA.

elloha utilise la version 2012B d’OTA.

Présentation générale

Les opérations principales entre elloha et le PMS sont :

  • L’envoi des types de chambres depuis le PMS vers elloha, à l’initiative du PMS.
  • L’envoi de la liste des chambres depuis elloha vers le PMS, à l’initiative du PMS.
  • L’envoi des stocks depuis le PMS vers elloha, à l’initiative du PMS.
  • La demande de l’état des stocks depuis le PMS vers elloha.
  • La demande des réservations depuis le PMS vers elloha, à l’initiative du PMS.

Historique des versions

Version Date Details Modified by
v1.0 2016-05-08 Création M.ERRECART
v1.01 2016-05-23 Corrections M.ERRECART
v1.1 2016-05-27 Modifications M.ERRECART
v1.2 2016-06-17 Modifications M.ERRECART
v1.3 2019 Ajout d’un webservice + modifications M.ERRECART
v1.4 2019 Version web de la documentation + corrections N.POELEN
v1.5 09-2020 Ajout de la liste des erreurs N.POELEN
v1.6 03-2021 Corrections N.POELEN
v1.7 07-2022 Attribut IsRoom N.POELEN
v1.8 01-2023 Ajout des suppléments (services) N.POELEN
v1.9 01-2023 Ajout des lignes de paiements dans les réservations (activation à la demande) J.DEREGNIAUX
v1.10 07-2023 Ajout de la taxe de séjour dans la liste des chambres N.POELEN

Données communes à tous les types de messages

Tous les messages OTA échangés, de type « requête » (c’est-à-dire le message à l’initiative d’une action, et non pas la réponse), devront contenir les informations suivantes en attribut du tag xml de plus haut niveau:

EchoToken: Identifiant unique généré par l’instance qui a l’initiative de la demande (elloha ou le PMS), la réponse devra contenir le même EchoToken.

TimeStamp: Date et heure de la création du message au format ISO YYY-MM-DDThh:mm:ss (Exemple: 2013-01-20T17:22:50Z)

Target: Test ou Production (valeur par défaut)

Version: 2012B

Attribute Required Values
EchoToken Oui
Version Oui 2012B
Target Oui Production / Test
TimeStamp Oui

Tous les messages OTA de type « requête » devront aussi contenir le bloc xml POS (Point Of Sale). Ce bloc permet d’indiquer la source du message, le partenaire qui réalise la requête.

Element Attribute Req. Values
POS Oui
 Source Oui
  RequestorID Oui
ID Oui Login du partenaire externe
MessagePassword Oui Password du partenaire externe
ID_Context Oui Nom de l’application
   CompanyName Oui elloha/PMS Name

Gestion des types de chambres

Cas 1 :

Le PMS envoie à elloha les types de chambres à créer/modifier/supprimer, à chaque fois que cela est nécessaire.

elloha répond avec les identifiants créés localement pour les chambres en question.

A noter que l’identifiant de l’hôtel interne au PMS devra être fourni à elloha, qui lancera la phase de mise en correspondance en temps voulu.

L’action à réaliser chez elloha dépend de la valeur de l’attribut InvStatusType.

Lorsque la valeur de l’attribut InvStatusType est « Initial », elloha ajoute à la réponse une section InventoryCrossRefs qui associe les identifiants de chambres fournis par le PMS (RequestInvCode) aux identifiants de chambre créés par elloha (ResponseInvCode).

A noter, le champ InvCode correspond à l’identifiant unique elloha de la chambre, et le champ RoomID correspond à l’identifiant unique PMS de la chambre. InvCode est donc à utiliser lorsque le mapping de la chambre côté PMS a été réalisé pour la chambre en question, c’est-à-dire pour les opérations de mise à jour et de suppression de chambres. RoomID est à utiliser pour les opérations de création de chambre, opérations qui renvoient l’identifiant unique elloha à utiliser par la suite dans le champ InvCode.


Le Web Service fourni par elloha est un Web Service en HTTPS (port 443) répondant à des requêtes POST. Le xml OTA de la requête est passé dans le « Body » de la requête POST.

L’url de ce Web Service sera communiquée au PMS par elloha.

diag1

Requête: OTA_HotelInvNotifRQ

Réponse attendue: OTA_HotelInvNotifRS

Structure du message de requête :

Element Attribute Requis Values
OTA_HotelInvNotifRQ
 POS Oui
 SellableProducts Oui
HotelCode Oui Identifiant de l’hôtel dans le PMS
  SellableProduct Oui
InvStatusType Oui Initial/Active/Deactivated
Initial : La chambre doit être crée.
Active : La chambre exist et doit être mise à jour.
Deactivated : La chambre doit être supprimée.
InvNotifType Oui Dans notre cas, systématiquement « New ».
InvCode Identifiant unique elloha de la chambre (renseigné pour les opérations de mise à jour et de suppression).
   Description Non
    Text Non Description de la chambre
Language Non
   GuestRoom Oui
    Occupancy Oui
MaxOccupancy Oui
    Room Non
RoomID Non Identifiant unique PMS de la chambre (renseigné pour l’opération de création).
Quantity Non Stock total du type de chambre en question. Valeur à renseigner dans le cas d’un ‘create’. Si non renseigné, la valeur par défaut est 1.
    Description Non
     Text Non Nom de la chambre
Language Non

Exemple de requête de création de 2 chambres :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvNotifRQ xmlns="http://www.opentravel.org/OTA/2012B" EchoToken="#ECHO_TOKEN#" TimeStamp="2015-05-09T21:32:52+02:00">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#">
        <CompanyName>#COMPANY_NAME#</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <SellableProducts HotelCode="#HOTEL_ID#">
    <SellableProduct InvStatusType="Initial" InvNotifType="New" InvCode="#ROOM_ID_PMS_1#">
      <Description>
        <Text Language="FR">Description de la chambre</Text>
      </Description>
      <GuestRoom>
        <Occupancy MaxOccupancy="#MAX_OCCUPANCY#" />
        <Room RoomID="#ROOM_ID_PMS_1#" Quantity="5" />
        <Description>
          <Text Language="FR">Nom de la chambre</Text>
        </Description>
      </GuestRoom>
    </SellableProduct>
    <SellableProduct InvStatusType="Initial" InvNotifType="New" InvCode="#ROOM_ID_PMS_2#">
      <Description>
        <Text Language="FR">Description de la chambre</Text>
      </Description>
      <GuestRoom>
        <Occupancy MaxOccupancy="#MAX_OCCUPANCY#" />
        <Room RoomID="#ROOM_ID_PMS_2#" Quantity="2" />
        <Description>
          <Text Language="FR">Nom de la chambre</Text>
        </Description>
      </GuestRoom>
    </SellableProduct>
  </SellableProducts>
</OTA_HotelInvNotifRQ>

            

Exemple de requête de modification d’une chambre :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvNotifRQ xmlns="http://www.opentravel.org/OTA/2012B" EchoToken="#ECHO_TOKEN#" TimeStamp="2015-05-09T21:32:52+02:00">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#">
        <CompanyName>#COMPANY_NAME#</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <SellableProducts HotelCode="#HOTEL_ID#">
    <SellableProduct InvStatusType="Active" InvNotifType="New" InvCode="#ROOM_ID_PMS_1#">
      <Description>
        <Text Language="FR">Description de la chambre</Text>
      </Description>
      <GuestRoom>
        <Occupancy MaxOccupancy="#MAX_OCCUPANCY#"/>
        <Room RoomID="#ROOM_ID_PMS_1#"/>
        <Description>
          <Text Language="FR">Nom de la chambre</Text>
        </Description>
      </GuestRoom>
    </SellableProduct>
  </SellableProducts>
</OTA_HotelInvNotifRQ>

            

Exemple de requête de suppression d’une chambre :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvNotifRQ xmlns="http://www.opentravel.org/OTA/2012B" EchoToken="#ECHO_TOKEN#" TimeStamp="2015-05-09T21:32:52+02:00">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#">
        <CompanyName>#COMPANY_NAME#</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <SellableProducts HotelCode="#HOTEL_ID#">
    <SellableProduct InvStatusType="Deactivated" InvNotifType="New" InvCode="#ROOM_ID_PMS_1#">
      <Description>
        <Text Language="FR">Description de la chambre</Text>
      </Description>
      <GuestRoom>
        <Occupancy MaxOccupancy="#MAX_OCCUPANCY#"/>
        <Room RoomID="#ROOM_ID_PMS_1#"/>
        <Description>
          <Text Language="FR">Nom de la chambre</Text>
        </Description>
      </GuestRoom>
    </SellableProduct>
  </SellableProducts>
</OTA_HotelInvNotifRQ>

            

Structure du message de réponse :

Element Attribute Requis Values
OTA_HotelInvNotifRS
 Success Non
 InventoryCrossRefs Non
  InventoryCrossRef Non
RequestInvCode Non Identifiant de la chambre au sein du PMS.
ResponseInvCode Non Identifiant de la chambre crée au sein de elloha.

Exemple de réponse à une demande de création de chambres :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvNotifRS EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
  <InventoryCrossRefs>
    <InventoryCrossRef RequestInvCode="#ROOM_ID_PMS_1#" ResponseInvCode="#ROOM_ID_ELLOHA_1#"/>
    <InventoryCrossRef RequestInvCode="#ROOM_ID_PMS_2#" ResponseInvCode="#ROOM_ID_ELLOHA_2#"/>
  </InventoryCrossRefs>
</OTA_HotelInvNotifRS>

            

Exemple de réponse à une demande de modification/suppression de chambres :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvNotifRS EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
</OTA_HotelInvNotifRS>

            

Structure des messages d’erreur :

Element Attribute Requis Values
OTA_HotelInvNotifRS
 Errors Oui
  Error Oui Message d’erreur
Code Oui

Exemple de message d’erreur :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvNotifRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" EchoToken="#ECHO_TOKEN#" TimeStamp="2013-12-01T10:50:18.7731255+01:00" Target="Production" Version="2012" xmlns="http://www.opentravel.org/OTA/2012B">
  <Errors>
    <Error Code="err4">This password is incorrect</Error>
  </Errors>
</OTA_HotelInvNotifRS>

            


Cas 2 :

Le PMS demande à elloha les types de chambres associée à un identifiant d’hébergement.

elloha répond avec les identifiants des chambres.

À noter que l’identifiant de l’hôtel interne à elloha devra être fourni au PMS.

Le Web Service fourni par elloha est un Web Service en HTTPS (port 443) répondant à des requêtes POST. Le xml OTA de la requête est passé dans le « Body » de la requête POST.

L’url de ce Web Service sera communiquée au PMS par elloha.

diag2

Requête: OTA_HotelAvailRQ

Réponse attendue: OTA_HotelAvailRS

Structure du message de requête :

Element Attribute Requis Values
OTA_HotelAvailRQ
 POS Oui
 AvailRequestSegments Oui
  AvailRequestSegment Oui
AvailReqType Oui Toujours « Room » dans notre cas
   HotelSearchCriteria Oui
    Criterion Oui
     HotelRef Oui
HotelCode Oui Identifiant de l’hébergement

Exemple de requête d’une demande de liste chambres :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelAvailRQ xmlns="http://www.opentravel.org/OTA/2012B" Version="1.0" TimeStamp="2005-08-01T09:30:47+02:00" EchoToken="#ECHOTOKEN#">
  <POS>
    <Source>
      <RequestorID ID="#USER#" MessagePassword="#PASS#">
        <CompanyName>#COMPANY#</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <AvailRequestSegments>
    <AvailRequestSegment AvailReqType="Room">
      <HotelSearchCriteria>
        <Criterion>
          <HotelRef HotelCode="#HOTELCODE#"/>
        </Criterion>
      </HotelSearchCriteria>
    </AvailRequestSegment>
  </AvailRequestSegments>
</OTA_HotelAvailRQ>

            

Structure du message de réponse :

Element Attribute Requis Values
OTA_HotelAvailRS
 Success Non
 RoomStays Non
  RoomStay Non
   RoomTypes
    RoomType
RoomTypeCode Non Identifiant de la chambre au sein de elloha.
IsRoom Non Indique s’il s’agit d’une chambre ou d’une option.
IsTouristTax Non Indique s’il s’agit de la taxe de séjour.
     RoomDescription
Name Non Libellé de la chambre au sein de elloha.

Exemple de réponse à une demande de création de chambres :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelAvailRS xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" EchoToken="#ECHOTOKEN#" Version="2012B" TimeStamp="2019-03-05T15:17:36.6613608+01:00" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success />
  <RoomStays>
    <RoomStay>
      <RoomTypes>
        <RoomType RoomTypeCode="#ROOM_ID_1#">
          <RoomDescription Name="#ROOM_NAME_1#" />
        </RoomType>
      </RoomTypes>
    </RoomStay>
    <RoomStay>
      <RoomTypes>
        <RoomType RoomTypeCode="#ROOM_ID_2#">
          <RoomDescription Name="#ROOM_NAME_2#" />
        </RoomType>
      </RoomTypes>
    </RoomStay>
  </RoomStays>
</OTA_HotelAvailRS>


            

Structure des messages d’erreur :

Element Attribute Requis Values
OTA_HotelAvailRS
 Errors Oui
  Error Oui Message d’erreur
Code Oui

Exemple de message d’erreur :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelAvailRS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" EchoToken="#ECHO_TOKEN#" TimeStamp="2013-12-01T10:50:18.7731255+01:00" Target="Production" Version="2012" xmlns="http://www.opentravel.org/OTA/2012B">
  <Errors>
    <Error Code="err4">This password is incorrect</Error>
  </Errors>
</OTA_HotelAvailRS>
 


            

Gestion des stocks

Le PMS notifie elloha de l’état des stocks disponibles pour un type de chambre donné dans un hôtel donné à chaque fois que cela est nécessaire.

Le PMS demande à elloha l’état des stocks pour un type de chambre donné dans un hôtel donné, si besoin.

Cas 1 :

Le PMS notifie elloha de l’état des stocks disponibles pour un type de chambre donné dans un hôtel donné.

diag3

Le Web Service fourni par elloha est un Web Service en HTTPS (port 443) répondant à des requêtes POST. Le xml OTA de la requête est passé dans le « Body » de la requête POST.

L’url de ce Web Service sera communiquée au PMS par elloha.

Les identifiants utilisés pour identifier l’hôtel et la chambre sont les identifiants internes au PMS.

Requête: OTA_HotelInvCountNotifRQ

Réponse attendue: OTA_HotelInvCountNotifRS

Structure du message de requête :

Element Attribute Req. Values
OTA_HotelInvCountNotifRQ
 POS Oui
 Inventories Oui
ChainCode Non
HotelCode Oui
  Inventory Oui
   StatusApplicationControl Oui
InvCode Oui Identifiant de chambre
Start Oui Date au format yyyy-mm-dd
End Oui Date au format yyyy-mm-dd
   InvCounts Non InvCounts ou OffSell, pas les 2
    InvCount Oui
Count Oui
CountType Oui 1 (Inventaire total), 13 (Vendu), 14 (Disponible). 14 doit être utilisé pour PMS Connect Light.
ActionType Oui ‘Allocation’ (précise la valeur absolue) ou ‘Adjustment’ (ajout/soustraction de l’inventaire courant)
   OffSell Non InvCounts ou OffSell, pas les 2
OffSellValue Oui 0 (La chambre est disponible à la vente), 1 (la chambre est fermée à la vente)

Exemple de requête qui fixe la valeur d’un stock :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvCountNotifRQ Target="Production" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#" ID_Context="ELLOHA">
        <CompanyName>COMPANY</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <Inventories ChainCode="#CHAIN_CODE#" HotelCode="#HOTEL_CODE#">
    <Inventory>
      <StatusApplicationControl InvCode="#ROOM_ID#" Start="2013-04-08" End="2013-04-08"/>
      <InvCounts>
        <InvCount Count="1" CountType="14" ActionType="Allocation"/>
      </InvCounts>
    </Inventory>
  </Inventories>
</OTA_HotelInvCountNotifRQ>

            

Exemple de requête qui demande la diminution d’un stock :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvCountNotifRQ Target="Production" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#" ID_Context="ELLOHA">
        <CompanyName>COMPANY</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <Inventories ChainCode="#CHAIN_CODE#" HotelCode="#HOTEL_CODE#">
    <Inventory>
      <StatusApplicationControl InvCode="#ROOM_ID#" Start="2013-04-08" End="2013-04-08"/>
      <InvCounts>
        <InvCount Count="-1" CountType="14" ActionType="Adjustment"/>
      </InvCounts>
    </Inventory>
  </Inventories>
</OTA_HotelInvCountNotifRQ>


            

Exemple de requête qui ferme un type de chambre à la vente :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvCountNotifRQ Target="Production" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#" ID_Context="ELLOHA">
        <CompanyName>COMPANY</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <Inventories ChainCode="#CHAIN_CODE#" HotelCode="#HOTEL_CODE#">
    <Inventory>
      <StatusApplicationControl InvCode="#ROOM_ID#" Start="2013-04-09" End="2013-04-19"/>
      <OffSell OffSellValue="1"/>
    </Inventory>
  </Inventories>
</OTA_HotelInvCountNotifRQ>


            

Structure du message de réponse :

Element Req. Values
OTA_HotelInvCountNotifRS
 Success Oui

Exemple de réponse :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvCountNotifRS Target="Production" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
</OTA_HotelInvCountNotifRS>

            

Structure des messages d’erreur :

Element Req. Values
OTA_HotelInvCountNotifRS
 Errors Oui
  Error Oui Error Label

Exemple de message d’erreur :

            Copier

<?xml version="1.0" encoding="UTF-8" ?>
<OTA_HotelInvCountNotifRS Target="Production" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Errors>
    <Error> Fatal error x478548</Error>
  </Errors>
</OTA_HotelInvCountNotifRS>


            


Cas 2 :

Le PMS demande à elloha l’état des stocks pour un type de chambre donné dans un hôtel donné.

diag4

Le Web Service fourni par elloha est un Web Service en HTTPS (port 443) répondant à des requêtes POST. Le xml OTA de la requête est passé dans le « Body » de la requête POST.

L’url de ce Web Service sera communiquée au PMS par elloha.

Requête: OTA_HotelInvCountRQ

Réponse attendue: OTA_HotelInvCountRS

Structure du message de requête :

Element Attribute Requis Values
OTA_HotelInvCountRQ
 POS Oui
 HotelInvCountRequests Oui
  HotelInvCountRequest Oui
   HotelRef Oui
ChainCode Non
HotelCode Oui Identifiant de l’hôtel
   DateRange Non
Start Non Date au format yyyy-mm-dd
End Non Date au format yyyy-mm-dd
   RoomTypeCandidates Non
    RoomTypeCandidate
RoomID Oui Identifiant de la chambre

Exemple de requête qui demande l’état d’un stock pour un type de chambre donné :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvCountRQ EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="LOGIN" MessagePassword="PASS">
        <CompanyName>COMPANY</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <HotelInvCountRequests>
    <HotelInvCountRequest>
      <HotelRef ChainCode="#CHAIN_CODE#" HotelCode="#HOTEL_ID#" />
      <DateRange Start="#START_DATE#" End="#END_DATE#" />
      <RoomTypeCandidates>
        <RoomTypeCandidate RoomID="#ROOM_ID#" />
      </RoomTypeCandidates>
    </HotelInvCountRequest>
  </HotelInvCountRequests>
</OTA_HotelInvCountRQ>

            

Structure du message de réponse :

Element Attribute Requis Values
OTA_HotelInvCountRS
 Success Oui
 Inventories
ChainCode Non
HotelCode Oui Identifiant de l’hôtel.
  Inventory Oui
   StatusApplicationControl Oui
InvCode Oui Identifiant du type de chambre
Start Oui Date au format yyyy-mm-dd
End Oui Date au format yyyy-mm-dd
   InvCounts Oui
    InvCount Oui
Count Oui
CountType Oui 1 (Inventaire total), 13 (Vendu), 14 (Disponible). 14 doit être utilisé pour PMS Connect Light.

Exemple de réponse :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelInvCountRS EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
  <Inventories ChainCode="#CHAIN_CODE" HotelCode="#HOTEL_ID#">
    <Inventory>
      <StatusApplicationControl InvCode="#ROOM_ID#" Start="#START_DATE#" End="#END_DATE#"/>
      <InvCounts>
        <InvCount Count="5" CountType="14"/>
      </InvCounts>
    </Inventory>
</OTA_HotelInvCountRS>


            

Structure des messages d’erreur :

Element Requis Values
OTA_HotelInvCountRS
 Errors Oui
  Error Oui Error Label

Exemple de message d’erreur :

            Copier

<?xml version="1.0" encoding="UTF-8" ?>
<OTA_HotelInvCountRS Target="Production" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Errors>
    <Error> Fatal error x478548</Error>
  </Errors>
</OTA_HotelInvCountRS>

            

Gestion des réservations

Cas 1 :

Le PMS demande à elloha les réservations effectuées entre 2 valeurs date/heure, ou les réservations non acquittées. Les informations de réservations renvoyées sont les suivantes :

  • Les informations de séjour : identifiant de l’hôtel, identifiant de la chambre, dates de séjour.
  • Les informations de tarifs : montant TTC pour chaque chambre ainsi que pour le dossier de réservation global, identifiant et nom du rate plan utilisé.
  • Les informations du client principal : Identification, coordonnées et commentaires du client principal.

elloha renvoie les réservations créées, modifiées, ou supprimées dans l’intervalle de temps spécifié, ou qui n’ont pas été acquittées, suivant le type de demande.

elloha fournit au PMS un identifiant unique de réservation, que le PMS doit stocker afin de gérer les éventuelles opérations de modification et d’annulation future.

Le PMS se charge de réaliser la modification du stock pour la chambre concernée en fonction des informations de la réservation.

En fonction de la fréquence de récupération des réservations à partir du PM, il est possible que plusieurs actions aient été prises en compte sur un même dossier entre 2 demandes de récupération des réservations. elloha envoie toujours le dossier dans l’état actuel au moment de la demande. Le stockage de l’identifiant unique de réservation elloha par le PMS est indispensable pour gérer ces cas.

Le Web Service fourni par elloha est un Web Service en HTTPS (port 443) répondant à des requêtes POST. L’xml OTA de la requête est passé dans le « Body » de la requête POST.

L’url de ce Web Service sera communiquée au PMS par elloha.

diag5

Requête: OTA_ReadRQ

Réponse attendue: OTA_RetrieveRS

Structure du message de requête :

Element Attribute Req. Values
OTA_HotelReadRQ
 POS Oui
 ReadRequests Oui
  HotelReadRequest Oui
HotelCode Oui Identifiant de l’hôtel
   SelectionCriteria Oui
SelectionType Non Dans notre cas, systématiquement « Undelivered »
Start Non Date au format yyyy-mm-dd
End Non Date au format yyyy-mm-dd

Exemple de requête entre 2 dates :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_ReadRQ EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="LOGIN" MessagePassword="PASS">
        <CompanyName>COMPANY</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <ReadRequests>
    <HotelReadRequest HotelCode="#HOTEL_ID#">
      <SelectionCriteria Start="#START_DATE#" End="#END_DATE#"/>
    </HotelReadRequest>
  </ReadRequests>
</OTA_ReadRQ>

            

Exemple de requête de réservation non acquittées :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_ReadRQ EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="LOGIN" MessagePassword="PASS">
        <CompanyName>COMPANY</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <ReadRequests>
    <HotelReadRequest HotelCode="#HOTEL_ID#">
      <SelectionCriteria SelectionType="Undelivered"/>
    </HotelReadRequest>
  </ReadRequests>
</OTA_ReadRQ>

            

Structure du message de réponse :

Element Attribute Req. Values
OTA_HotelRetrieveRS
 Success Oui
 ReservationList Oui
  HotelReservation Oui
CreateDateTime Oui
ResStatus Oui Book, Modify ou Cancel
   UniqueID Oui
ID Oui Identifiant externe de l’hotel
   RoomStays Non
    RoomStay Non
     RoomTypes Non
      RoomType Non
RoomTypeCode Non Identifiant de la chambre.
NumberOfUnits Non Nombre d'unité réservées pour ce type de chambre.
     RatePlans
      RatePlan Non
RatePlanCode Non Identifiant du rate plan.
       RatePlanDescription Nom du rate plan
     GuestCounts Non
      GuestCount Non
AgeQualifyingCode Non Code indiquant le type des personnes. 10 : Adultes, 8 : enfants, 7 : bébés.
Count Non Nombre de personnes du type concerné.
     TimeSpan Non Date du séjour.
Start Non Date au format yyyy-mm-dd
End Non Date au format yyyy-mm-dd
     Total
AmountAfterTax Montant TTC pour la chambre
CurrencyCode Code ISO de la devise
     BasicPropertyInfo Non
HotelCode Non Identifiant de l’hôtel.
     ResGuestRPHs Non
      ResGuestRPH Non
RPH Non Référence vers le client défini dans le bloc ResGuests/ResGuest.
     ServicesRPHs Non
      ServiceRPH Non
RPH Non Référence vers le supplément défini dans le bloc Services/Service.
   Services Non Liste des suppléments.
    Service Non
ServiceInventoryCode Oui Nom du supplément.
Inclusive Oui Indique si le supplément est inclus ou non avec la prestation.
ServiceRPH Oui Numéro du supplément.
Quantity Oui Quantité du supplément.
ID Oui 1: petit-déjeuné, 2: demi-pension, 3: pension complète, 4 ou plus pour tous suppléments non-inclus dans la prestation.
     Price Non Présent uniquement pour les suppléments non-inclus dans la prestation.
      Total Non
AmountAfterTax Non Montant total du supplément.
      RateDescription Non
       Text Non Résumé textuel de la réservation du supplément.
     ServiceDetails Oui
      TimeSpan Oui
Start Oui Date de début du supplément.
End Oui Date de fin du supplément.
   ResGuests Non
    ResGuest Non
ResGuestRPH Non Identifiant du client, servant de référence pour le bloc ResGuestRPHs/ResGuestRPH.
     Profiles Non
      ProfilesInfo Non
       Profile Non
        Customer Non
         PersonName Non
          NamePrefix Non Civilité
          GivenName Non Prénom
          Surname Non Nom de famille
         Telephone Non
PhoneNumber Non Numéro de téléphone
         Email Non Email
         CompanyName Non Raison sociale (si renseignée)
         IntraCommunityTVA Non Numéro de TVA intracommunautaire (si renseigné)
         Address Non
          AddressLine Non Adresse
          CityName Non Ville
          PostalCode Non Code postal
          CountryName Non Libelé du pays
Code Non Code du Pays
   ResGlobalInfo Non
    Total Non
AmountAfterTax Non Montant TTC pour le dossier de réservation.
CurrencyCode Non Code ISO de la devise
    HotelReservationIDs Oui
ResID_Value Oui Identifiant unique de la réservation
ResID_Value Non Identifiant externe de la réservation
    TPA_Extensions Non Beta - activation à la demande
     Payments Non Enumération des paiements effectués pour cette réservation
TotalAmountReceived Oui Total TTC réglé pour cette réservation
BalanceDueAmount Oui Montant TTC restant à régler
      Payment Non Detail du paiement
       Amount Oui Montant TTC du paiement
       CurrencyCode Oui Code ISO de la devise
       PaymentType Oui Mode de réglement
       PaymentTypeId Oui Identifiant elloha du mode de réglement
       RoomTypeCode Non Identifiant de la chambre ou du produit au sein de elloha.
       ServiceInventoryCode Non Identifiant de la prestation/service au sein de elloha.
       Description Non Description de la chambre, du produit ou du service auquel se rattache le réglement
       PaymentId Non Identifiant de la carte cadeau utiliséé
    Comments Non
     Comment Non
Name Non Type de commentaire. Ici systématiquement « Client request ».
      Text Non Text du commentaire.

Exemple de réponse (une réservation) :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_ResRetrieveRS EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
  <ReservationsList>
    <HotelReservation CreateDateTime="2007-12-09T08:51:45.000+0000" ResStatus="Book">
      <UniqueID ID="#HOTEL_ID#" />
      <RoomStays>
        <RoomStay>
          <RoomTypes>
            <RoomType RoomTypeCode="#ROOM_ID#" NumberOfUnits="1"/>
          </RoomTypes>
          <RatePlans>
            <RatePlan RatePlanCode="#RATEPLAN_ID#">
              <RatePlanDescription>Rate plan name</RatePlanDescription>
            </RatePlan>
          </RatePlans>
          <GuestCounts>
            <GuestCount AgeQualifyingCode="10" Count="2"/>
            <GuestCount AgeQualifyingCode="8" Count="1"/>
            <GuestCount AgeQualifyingCode="7" Count="1"/>
          </GuestCounts>
          <TimeSpan Start="2015-06-12" End="2015-06-14"/>
          <Total AmountAfterTax="#TOTAL_AMOUNT_FOR_THE_ROOM#" CurrencyCode="EUR"/>
          <BasicPropertyInfo HotelCode="#HOTEL_ID#"/>
          <ResGuestRPHs>
            <ResGuestRPH RPH="1"/>
          </ResGuestRPHs>
          <ServicesRPHs>
            <ServiceRPH RPH="1"/>
          </ServicesRPHs>
        </RoomStay>
      </RoomStays>
      <Services>
        <Service ServiceInventoryCode="Location de draps 1 lit" Inclusive="false" ServiceRPH="1" Quantity="3" ID="4">
	      <Price>
		    <Total AmountAfterTax="36.0000"/>
		    <RateDescription>
			  <Text>#HOTEL_NAME#, Location de draps 1 lit, Prix Standard, 3 Adultes (20 ans, 20 ans, 20 ans), du 12/06/2015 au 14/06/2015 (2 nuits).</Text>
		    </RateDescription>
	      </Price>
	      <ServiceDetails>
		    <TimeSpan Start="2015-06-12T00:00:00.0000000" End="2015-06-14T00:00:00.0000000"/>
	      </ServiceDetails>
        </Service>
      </Services>
      <ResGuests>
        <ResGuest ResGuestRPH="1">
          <Profiles>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <NamePrefix>Mr</NamePrefix>
                    <GivenName>FirstName</GivenName>
                    <Surname>Lastname</Surname>
                  </PersonName>
                  <Telephone PhoneNumber="123456789"/>
                  <Email>test@test.com</Email>
                  <Address>
                    <AddressLine>Rue du test</AddressLine>
                    <CityName>Paris</CityName>
                    <PostalCode>75000</PostalCode>
                    <CountryName Code="FR">France</CountryName>
                  </Address>
                </Customer>
              </Profile>
            </ProfileInfo>
          </Profiles>
        </ResGuest>
      </ResGuests>
      <ResGlobalInfo>
        <Total CurrencyCode="EUR" AmountAfterTax="2000.00"/>
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="#BOOKING_ID#" />
        </HotelReservationIDs>
		<TPA_Extensions>
			<Payments TotalAmountReceived="128.7000" BalanceDueAmount="0.0000" CurrencyCode="EUR">
				<Payment>
					<Amount>117.7000</Amount>
					<CurrencyCode>EUR</CurrencyCode>
					<PaymentType>Chèques</PaymentType>
					<PaymentTypeId>adf1474b-a7db-4f9c-b426-5db17cc308eb</PaymentTypeId>
					<RoomTypeCode>31d76f7a-1f9a-4764-8ec0-dc04270c119f</RoomTypeCode>
					<Description>1 X Mobile Home 4 Personnes - 2 adultes</Description>
				</Payment>
				<Payment>
					<Amount>6.0000</Amount>
					<CurrencyCode>EUR</CurrencyCode>
					<PaymentType>Espèces</PaymentType>
					<PaymentTypeId>af3b6c20-02ff-4363-968c-bf0ac45b846a</PaymentTypeId>
					<RoomTypeCode>eac5aa58-2fd2-48b9-a9e5-eeb072a30c18</RoomTypeCode>
					<Description>2 X Coca-Cola 33cl</Description>
				</Payment>
				<Payment>
					<Amount>5.0000</Amount>
					<CurrencyCode>EUR</CurrencyCode>
					<PaymentType>Espèces</PaymentType>
					<PaymentTypeId>af3b6c20-02ff-4363-968c-bf0ac45b846a</PaymentTypeId>
					<ServiceInventoryCode>8f9cf863-b961-44c3-a6d0-7f3526454081</ServiceInventoryCode>
					<Description>Taxe de séjour</Description>
				</Payment>
			</Payments>
		</TPA_Extensions>
      </ResGlobalInfo>
    </HotelReservation>
  </ReservationsList>
</OTA_ResRetrieveRS>

            

Exemple de réponse (une réservation avec commentaires et une annulation) :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_ResRetrieveRS EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
  <ReservationsList>
    <HotelReservation CreateDateTime="2007-12-09T08:51:45.000+0000" ResStatus="Book">
      <UniqueID ID="#HOTEL_ID#" />
      <RoomStays>
        <RoomStay>
          <RoomTypes>
            <RoomType RoomTypeCode="#ROOM_ID#" NumberOfUnits="1"/>
          </RoomTypes>
          <RatePlans>
            <RatePlan RatePlanCode="#RATEPLAN_ID#">
              <RatePlanDescription>Rate plan name</RatePlanDescription>
            </RatePlan>
          </RatePlans>
          <GuestCounts>
            <GuestCount AgeQualifyingCode="10" Count="2"/>
            <GuestCount AgeQualifyingCode="8" Count="1"/>
            <GuestCount AgeQualifyingCode="7" Count="1"/>
          </GuestCounts>
          <TimeSpan Start="2015-06-12" End="2015-06-14"/>
          <Total AmountAfterTax="#TOTAL_AMOUNT_FOR_THE_ROOM#" CurrencyCode="EUR"/>
          <BasicPropertyInfo HotelCode="#HOTEL_ID#"/>
          <ResGuestRPHs>
            <ResGuestRPH RPH="1"/>
          </ResGuestRPHs>
        </RoomStay>
      </RoomStays>
      <ResGuests>
        <ResGuest ResGuestRPH="1">
          <Profiles>
            <ProfileInfo>
              <Profile>
                <Customer>
                  <PersonName>
                    <NamePrefix>Mr</NamePrefix>
                    <GivenName>FirstName</GivenName>
                    <Surname>Lastname</Surname>
                  </PersonName>
                  <Telephone PhoneNumber="123456789"/>
                  <Email>test@test.com</Email>
                  <Address>
                    <AddressLine>Rue du test</AddressLine>
                    <CityName>Paris</CityName>
                    <PostalCode>75000</PostalCode>
                    <CountryName Code="FR">France</CountryName>
                  </Address>
                </Customer>
              </Profile>
            </ProfileInfo>
          </Profiles>
        </ResGuest>
      </ResGuests>
      <ResGlobalInfo>
        <Total CurrencyCode="EUR" AmountAfterTax="2000.00"/>
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="#BOOKING_ID#" />
        </HotelReservationIDs>
        <Comments>
          <Comment Name="Client request">
            <Text>Comments sent by the client</Text>
          </Comment>
        </Comments>
      </ResGlobalInfo>
    </HotelReservation>

    <HotelReservation CreateDateTime="2015-05-09T21:31:52+02:00" ResStatus="Cancel">
      <UniqueID ID="#HOTEL_ID#" />
      <ResGlobalInfo>
        <HotelReservationIDs>
          <HotelReservationID ResID_Value="#BOOKING_ID#" />
        </HotelReservationIDs>
      </ResGlobalInfo>
    </HotelReservation>
  </ReservationsList>

</OTA_ResRetrieveRS>


            

Structure des messages d’erreur :

Element Requis Values
OTA_HotelRetrieveRS
 Errors Oui
  Error Oui Error label

Exemple de message d’erreur :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelRetrieveRS Target="#Target#" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Errors>
    <Error> Fatal error x478548</Error>
  </Errors>
</OTA_HotelRetrieveRS >


            

Cas 2 :

Le PMS acquitte la bonne réception d’une réservation. Cette réservation ne sera plus renvoyée par le WS lors d’une demande des réservations non acquittées, tant qu’elle ne subit pas de nouvelle modification. Elle sera par contre encore renvoyée par le WS lors d’une demande de réservations entre 2 dates.

Le Web Service fourni par elloha est un Web Service en HTTPS (port 443) répondant à des requêtes POST. L’xml OTA de la requête est passé dans le « Body » de la requête POST.

L’url de ce Web Service sera communiquée au PMS par elloha.

diag6

Requête: OTA_HotelResNotifRQ

Réponse attendue: OTA_HotelResNotifRS

Structure du message de requête :

Element Attribute Requis Values
OTA_HotelResNotifRQ
 POS Oui
 HotelReservations Oui
  HotelReservation Oui
ResStatus Oui Dans notre cas, uniquement “Commit”.
LastModifyDateTime Oui Spécifie une date afin d’acquiter toutes les actions sur un dossier antérieures à cette date.
   UniqueID Oui
ID Oui Identifiant de la réservation à acquitter.
   RoomStays Oui
    RoomStay Oui
     BasicPropertyInfo Oui
HotelCode Oui Identifiant de l’hôtel.

Exemple de requête d'acquittement de réservation :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelResNotifRQ EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <POS>
    <Source>
      <RequestorID ID="#LOGIN#" MessagePassword="#PASS#">
        <CompanyName>#COMPANY_NAME#</CompanyName>
      </RequestorID>
    </Source>
  </POS>
  <HotelReservations>
    <HotelReservation ResStatus="Commit" LastModifyDateTime="2015-05-09T21:32:52+02:00">
      <UniqueID ID="#BOOKING_ID#" />
      <RoomStays>
        <RoomStay>
          <BasicPropertyInfo HotelCode="#HOTEL_ID#"/>
        </RoomStay>
      </RoomStays>
    </HotelReservation>
  </HotelReservations>
</OTA_HotelResNotifRQ>

            

Structure du message de réponse :

Element Attribute Requis Values
OTA_HotelResNotifRS
 Success Oui

Exemple de réponse (une réservation) :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelResNotifRS EchoToken="#ECHO_TOKEN#" Target="#Target#" TimeStamp="2012-12-21T12:12:12" Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Success/>
</OTA_HotelResNotifRS>

            

Structure des messages d’erreur :

Element Requis Values
OTA_HotelResNotifRS
 Errors Oui
  Error Oui Error Label

Exemple de message d’erreur :

            Copier

<?xml version="1.0" encoding="utf-8" ?>
<OTA_HotelResNotifRS Target="#Target#" TimeSpan="2012-12-21T12:12:12" EchoTocken="#ECHO_TOKEN#"  Version="2012B" xmlns="http://www.opentravel.org/OTA/2012B">
  <Errors>
    <Error> Fatal error x478548</Error>
  </Errors>
</OTA_HotelResNotifRS >

            

Liste des erreurs

Code Description
err1 Login is missing
err2 Password is missing
err3 This login is incorrect
err4 This password is incorrect
err5 This account has no products
err6 RequestorID is missing
err7 Malformed request
err20 No hotel found with this code
err21 This InvCode is incorrect
err22 Start date is incorrect
err23 End date is incorrect
err24 This CountType is incorrect
err25 This hotel doesn't contain this object
err26 The new stock is higher than the full capacity
err27 The number of guests must not exceed the maximum capacity of the inventory
err28 Pms is not allowed for this property
err30 Please provide at least 1 hotel search criterion.
err31 Start date format is not valid. The format must be: yyyy-MM-dd
err32 End date format is not valid. The format must be: yyyy-MM-dd
err33 End date sould be after the Start date.
err34 Please provide at least 1 RoomStayCandidate.
err35 Please provide at least 1 GuestCount.
err36 AgeQualifyingCode must be 8(Child) or 10(Adult).
err37 Age value is not valid.
err40 No booking id specified.
err41 No booking with specified id.
errx Other errors.