Utilisation des webhooks d'événements de réservation
Procédure pour transmettre des données de réservation à un système externe lors de la création, la modification, l'annulation ou la restauration de réservations.
Table des matières
Les webhooks permettent à Sirvoy de communiquer automatiquement avec d'autres outils, par exemple pour indiquer à un système d'entrée sans clé quand créer un code de chambre ou pour envoyer des détails de facturation à votre logiciel de comptabilité.
Avec un webhook, Sirvoy envoie les détails de réservation au format JSON (un format standard pour le partage de données entre applications) à une adresse Web (URL) que vous choisissez. Un rappel est effectué chaque fois que des données sont transmises à cette URL.
D'autres programmes peuvent recevoir les détails envoyés à l'URL et utiliser ces données pour des tâches automatisées.
Note : les webhooks ne sont disponibles que dans Sirvoy Pro. Vous pouvez ajouter jusqu'à dix webhooks par compte. La configuration et la gestion des webhooks nécessitent des connaissances techniques. Envisagez donc de consulter un développeur Web.
Création d'un nouveau webhook d'événement de réservation
- Allez dans Paramètres > Compte Sirvoy
- Sous Webhook d'événement de réservation, cliquez sur Ajouter
- Saisissez l'URL de rappel
- Donnez un nom au webhook
- Cliquez sur Enregistrer
Sirvoy enverra maintenant un rappel à cette URL chaque fois qu'une réservation sera créée, modifiée, annulée ou restaurée.
Comment fonctionnent les rappels et ce qui est requis
-
Gestion des réponses : le serveur recevant le rappel doit répondre avec un code d'état
200 OK, indiquant que « Tout a fonctionné ». En cas d'absence de réponse, Sirvoy tentera de renvoyer le rappel jusqu'à 10 fois, augmentant progressivement l'intervalle entre chaque tentative, avant de s'arrêter complètement. Si les rappels continuent d'échouer, nous vous informerons par courriel et retirerons le webhook après un dernier avis. -
HTTPS et TLS : votre URL de webhook doit être sécurisée (commencer par
https://) et utiliser la version TLS 1.2 ou supérieure. TLS (Transport Layer Security) chiffre les données pour qu'elles ne puissent être lues par personne pendant leur transmission. Si votre certificat HTTPS n'est pas valide, Sirvoy ne transmettra aucune donnée. -
Vérifications de santé : Sirvoy vérifie occasionnellement si votre URL est active en envoyant une requête
HTTP GETsimple (une façon de demander à votre serveur « Êtes-vous là ? » sans transmettre de données). Votre serveur doit répondre avec un code200 OK(« Tout a fonctionné ») pour que ces vérifications réussissent. -
Ordre des événements : un webhook est envoyé pour chaque événement de réservation, mais les événements peuvent arriver dans le désordre. Par exemple, une modification peut arriver avant l'événement de réservation original. Utilisez l'horodatage
generatedAtdans chaque message pour les organiser dans le bon ordre.
Empêcher votre pare-feu de bloquer les rappels
Si votre système utilise un pare-feu (logiciel ou matériel bloquant le trafic Internet indésirable), il est peut-être nécessaire d'ajouter en liste blanche certaines adresses IP. Ajouter en liste blanche signifie autoriser le trafic provenant de sources spécifiques tout en bloquant les autres.
Ajoutez ces adresses IP en liste blanche :
34.243.166.60
52.18.11.99
63.34.80.48
54.194.0.85
2a05:d018:e34:5300::/56Les rappels sont envoyés depuis des serveurs qui prennent en charge à la fois IPv4 (l'ancien standard d'adressage Internet) et IPv6 (le plus récent).
Exemples de rappels JSON
Ces exemples illustrent le type de données que Sirvoy transmet à votre URL de webhook ainsi que leur format.
Ils sont utiles pour les développeurs ou toute personne construisant un système destiné à recevoir et traiter les données de réservation de Sirvoy.
Le premier exemple présente un rappel de base pour une nouvelle réservation. Le second inclut plus de détails, tels que les factures et les paiements, pour montrer ce qui est inclus lorsque des données financières sont concernées.
Exemple : nouveau rappel de réservation
"version": "2.0",
"generatedAt": "2024-05-31T12:11:53.639+00:00",
"event": "new",
"propertyId": 1,
"bookingId": 26006,
"channelBookingId": null,
"bookingDate": "2024-05-31T12:09:16+00:00",
"arrivalDate": "2024-06-01",
"departureDate": "2024-06-04",
"cancelled": false,
"eta": "10:00",
"totalAdults": 4,
"guest": {
"firstName": "John",
"lastName": "Doe",
"businessName": "Acme",
"address": "Fancy street",
"postcode": "11-111",
"city": "York",
"state": "NY",
"country": "US",
"phone": "+16033336666",
"email": "guest@email.com",
"passportNo": "XX11122223333",
"language": "en",
"message": "Additional comment added by guest"
},
"guestReference": "2103001",
"internalComment": null,
"couponCode": null,
"bookingSource": "Front desk",
"bookingIsCheckedIn": false,
"bookingIsCheckedOut": false,
"bookingIsConfirmed": true,
"customFields": [
{
"name": "Custom text field name",
"value": "text added by guest"
},
{
"name": "Custom checkbox unchecked",
"value": false
},
{
"name": "Custom checkbox checked",
"value": true
}
],
"rooms": [
{
"RoomTypeName": "Basic room",
"RoomTypeDescription": "Basic room",
"RoomName": "101",
"RoomId": 2,
"arrivalDate": "2024-06-01",
"departureDate": "2024-06-04",
"adults": 2,
"quantity": 3,
"price": 100,
"roomTotal": 300,
"guestName": null,
"comment": null,
"ledgerAccount": null
},
{
"RoomTypeName": "Fancy room",
"RoomTypeDescription": "Fancy room",
"RoomName": "182",
"RoomId": 83,
"arrivalDate": "2024-06-01",
"departureDate": "2024-06-04",
"adults": 2,
"quantity": 3,
"price": 100,
"roomTotal": 300,
"guestName": null,
"comment": null,
"ledgerAccount": null
}
],
"additionalItems": [
{
"description": "Breakfast",
"specificDate": null,
"quantity": 12,
"price": 20,
"itemTotal": 240,
"ledgerAccount": null
}
],
"bookedCategory": null,
"currency": "EUR",
"totalPrice": 840,
"totalSurcharges": 84,
"totalPriceIncludingSurcharges": 924,
"payments": [],
"invoices": []
}Exemple : nouveau rappel de réservation avec des données financières
{
"version": "2.0",
"generatedAt": "2024-05-31T12:15:23.895+00:00",
"event": "modified",
"propertyId": 1,
"bookingId": 26006,
"channelBookingId": null,
"bookingDate": "2024-05-31T12:09:16+00:00",
"arrivalDate": "2024-06-01",
"departureDate": "2024-06-04",
"cancelled": false,
"eta": "10:00",
"totalAdults": 4,
"guest": {
"firstName": "John",
"lastName": "Doe",
"businessName": "Acme",
"address": "Fancy street",
"postcode": "11-111",
"city": "York",
"state": "NY",
"country": "US",
"phone": "+16033336666",
"email": "guest@email.com",
"passportNo": "XX11122223333",
"language": "en",
"message": "Additional comment added by guest"
},
"guestReference": "2103001",
"internalComment": null,
"couponCode": null,
"bookingSource": "Front desk",
"bookingIsCheckedIn": false,
"bookingIsCheckedOut": false,
"bookingIsConfirmed": true,
"customFields": [
{
"name": "Custom text field name",
"value": "text added by guest"
},
{
"name": "Custom checkbox unchecked",
"value": false
},
{
"name": "Custom checkbox checked",
"value": true
}
],
"rooms": [
{
"RoomTypeName": "Basic room",
"RoomTypeDescription": "Basic room",
"RoomName": "101",
"RoomId": 2,
"arrivalDate": "2024-06-01",
"departureDate": "2024-06-04",
"adults": 2,
"quantity": 3,
"price": 100,
"roomTotal": 300,
"guestName": null,
"comment": null,
"ledgerAccount": null
},
{
"RoomTypeName": "Fancy room",
"RoomTypeDescription": "Fancy room",
"RoomName": "182",
"RoomId": 83,
"arrivalDate": "2024-06-01",
"departureDate": "2024-06-04",
"adults": 2,
"quantity": 3,
"price": 100,
"roomTotal": 300,
"guestName": null,
"comment": null,
"ledgerAccount": null
}
],
"additionalItems": [
{
"description": "Breakfast",
"specificDate": null,
"quantity": 12,
"price": 20,
"itemTotal": 240,
"ledgerAccount": null
}
],
"bookedCategory": null,
"currency": "EUR",
"totalPrice": 840,
"totalSurcharges": 84,
"totalPriceIncludingSurcharges": 924,
"payments": [],
"invoices": [
{
"invoiceNumber": "41002",
"invoiceDate": "2024-06-01",
"dueDate": "2024-06-01",
"receiver": "Acme",
"address": [
"John Doe",
"Fancy street",
"York, NY 11-111",
"United States"
],
"roundingAmount": 0,
"invoiceTotal": 924,
"originInvoice": null,
"invoiceRows": [
{
"quantity": 3,
"price": 100,
"rowTotal": 300,
"ledgerAccount": "100",
"rowText": "Basic room",
"vatRate": 0,
"vatAmount": 0,
"bookingId": 26006
},
{
"quantity": 3,
"price": 100,
"rowTotal": 300,
"ledgerAccount": "100",
"rowText": "Fancy room",
"vatRate": 0,
"vatAmount": 0,
"bookingId": 26006
},
{
"quantity": 12,
"price": 20,
"rowTotal": 240,
"ledgerAccount": "200",
"rowText": "Breakfast",
"vatRate": 0,
"vatAmount": 0,
"bookingId": 26006
},
{
"quantity": 1,
"price": 84,
"rowTotal": 84,
"ledgerAccount": "300",
"rowText": "surcharge",
"vatRate": 0,
"vatAmount": 0,
"bookingId": 26006
}
],
"payments": [
{
"paymentId": 28,
"createdAt": "2024-05-31T12:15:09+00:00",
"valueDate": "2024-06-01",
"amount": 924,
"ledgerAccount": "3606",
"paymentReference": null,
"comment": null
}
]
}
]
}