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.

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.

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é.

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é.

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.

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 | |
Non | |||
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.

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. |