Når man tilføjer en bookingevent-webhook, sendes reservationsoplysninger i JSON-format til en URL, hver gang en reservation oprettes, ændres, annulleres eller gendannes.
Vigtige detaljer
- Teknisk viden påkrævet: Opsætning og administration af webhooks kræver en vis grad af teknisk ekspertise. Kontakt en webudvikler, hvis det er nødvendigt.
- Aktivering: Aktivér en bookingevent-webhook under Indstillinger -> Sirvoy-konto -> Webhook til bookingbegivenhed.
- Webhook begrænsninger: Man kan kun have én aktiv webhook pr. Sirvoy-konto.
- Webhook udløser tilbagekald: En bookingevent-webhook sender et tilbagekald til en specificeret URL, hver gang en reservation oprettes, ændres, annulleres eller gendannes.
Tekniske krav:
- Responskode: Den modtagende server skal svare med statuskoden `200 OK`. Hvis ikke, vil opkaldet blive forsøgt igen ti gange med eksponentiel back-off op til ti gange, før det kasseres.
- HTTPS og TLS: Vi understøtter kun HTTPS ved hjælp af TLS version 1.2 eller højere for at sikre en høj grad af databeskyttelse og fortrolighed. Sørg for, at dit HTTPS-certifikat er gyldigt, ellers sendes der ikke data.
- Helbredstjek: Din server skal svare på HTTP GET-anmodninger med `200 OK` for at gennemføre helbredstjekket. Der sendes ingen data ved hjælp af HTTP GET, men det sikrer, at dit endpoint er aktivt.
Håndtering af reservationsnotifikationer og webhook-fejl
Vi sender en notifikation ud for hver reservationsopdatering, og det hænder at events leveres uden at være i rækkefølge. Brug “generatedAt”-tidsstemplet til at opbygge en nøjagtig tidslinje for de forskellige events. Hver meddelelse indeholder den fulde JSON-repræsentation af reservationen på det pågældende tidspunkt.
Hvis dit endpoint begynder at fejle og ikke returnerer vellykkede statuskoder ved vores opkald, giver vi dig besked via e-mail. Hvis den fortsætter med at fejle i en uge, vil webhooken blive fjernet efter en sidste meddelelse.
IP Whitelisting
For at sikre vellykkede webhook-tilbagekald skal du tillade følgende IP-intervaller i din firewall:
- 34.243.166.60
- 52.18.11.99
- 63.34.80.48
- 54.194.0.85
- 2a05:d018:e34:5300::/56
Serverne, der foretager tilbagekaldene, er dual-stack med både IPv4- og IPv6-forbindelse. Hvis du tilføjer både IPv4- og IPv6 -adresser til dit domænenavn, vil tilbagekald blive foretaget til den server, der er den første til at svare.
Eksempler på JSON-format
Eksempel på JSON-struktur for nye reservationer:
{
"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 på JSON-struktur ved oprettelse af en kontantkvittering og tilføjelse af en betaling til en faktura:
{
"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
}
]
}
]
}
Hvis du har spørgsmål eller brug for yderligere hjælp, kontakt vores supportteam.