Brug webhooks til reservationshændelser
Sådan sender du reservationsdata til et eksternt system, når reservationer oprettes, ændres, annulleres eller gendannes.
Indholdsoversigt
Webhooks gør det muligt for Sirvoy automatisk at kommunikere med andre værktøjer — for eksempel ved at give et nøglefrit adgangssystem besked om, at det skal oprette en værelseskode, eller ved at sende faktureringsoplysninger til dit regnskabsprogram.
Med en webhook sender Sirvoy reservationsoplysninger i JSON-format (et standardformat apps bruger til at dele data), til en webadresse (URL), som du vælger. En callback sker hver gang data sendes til den URL.
Andre programmer kan modtage de oplysninger, der sendes til URL’en, og bruge dataene til automatiserede opgaver.
Bemærk: Webhooks er kun tilgængelige i Sirvoy Pro. Du kan tilføje op til ti webhooks pr. konto. Opsætning og administration af webhooks kræver teknisk viden, så overvej at rådføre dig med en webudvikler.
Opret en ny webhook til reservationshændelser
- Gå til Indstillinger > Sirvoy-konto
- Klik på Tilføj under Webhook til reservationshændelser
- Indtast Callback-URL’en
- Giv webhooken et navn
- Klik på Gem
Sirvoy sender nu en callback til den URL, hver gang en reservation oprettes, ændres, annulleres eller gendannes.
Sådan fungerer callbacks, og hvad der kræves
-
Håndtering af svar: Serveren, der modtager callbacken, skal svare med statuskoden
200 OK, som betyder “alt fungerede”. Hvis den ikke gør det, forsøger Sirvoy at sende callbacken igen op til 10 gange med stadig længere mellemrum mellem hvert forsøg, før forsøgene stoppes helt. Hvis callbacks fortsat mislykkes, giver vi dig besked via e-mail og fjerner webhooken efter en sidste meddelelse. -
HTTPS og TLS: Din webhook-URL skal være sikker, det vil sige starte med
https://, og bruge TLS version 1.2 eller højere. TLS (Transport Layer Security) krypterer dataene, så ingen kan læse dem, mens de bliver sendt. Hvis dit HTTPS-certifikat ikke er gyldigt, sender Sirvoy ingen data. - Sundhedstjek: Sirvoy kontrollerer indimellem, om din URL er aktiv, ved at sende en simpel
HTTP GET-anmodning, som svarer til, at vi spørger din server: “Er du der?”, men uden at sende data. Din server skal svare med200 OK(“alt fungerede”), for at disse kontroller lykkes. -
Hændelsesrækkefølge: Der sendes en webhook for hver reservationshændelse, men hændelser kan ankomme i forkert rækkefølge — for eksempel kan en ændring ankomme før den oprindelige reservationshændelse. Brug tidsstemplet
generatedAti hver besked til at sætte dem i den rigtige rækkefølge.
Undgå, at din firewall blokerer callbacks
Hvis dit system bruger en firewall, altså software eller hardware, der blokerer uønsket internettrafik, kan det være nødvendigt at whiteliste bestemte IP-adresser. At whiteliste betyder at tillade trafik fra bestemte kilder, mens anden trafik blokeres.
Whitelist disse IP-adresser:
34.243.166.60
52.18.11.99
63.34.80.48
54.194.0.85
2a05:d018:e34:5300::/56Callbacks sendes fra servere, der understøtter både IPv4, som er den ældre standard for internetadresser, og IPv6, som er den nyere standard.
Eksempler på JSON-callbacks
Disse eksempler viser, hvilken type data Sirvoy sender til din webhook-URL, og hvordan dataene er formateret.
De kan hjælpe udviklere eller andre, der bygger et system, som skal modtage og behandle reservationsdata fra Sirvoy.
Det første eksempel viser en standard callback for en ny reservation. Det andet indeholder flere detaljer, for eksempel fakturaer og betalinger, for at vise, hvad der medtages, når økonomiske data er involveret.
Eksempel: Callback for ny reservation
"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": []
}Eksempel: Callback for ny reservation med økonomiske data
{
"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
}
]
}
]
}