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.

Udfasninger

Version 2.0 udkommer den 10. juni 2024 og er bagudkompatibel. Følgende felter vil dog blive fjernet efter 1. september 2024. Hold venligst op med at bruge dem:

  • “callbackId”
  • “generatedTime”
  • “bookingIsProvisional”
  • “bookingProvisionalId”

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": [],
	"--DEPRECATED--": "The fields callbackId, generatedTime, bookingIsProvisional, bookingProvisionalId WILL BE REMOVED after 2024-09-01",
	"callbackId": 1,
	"generatedTime": "2024-05-31T12:11:53+00:00",
	"bookingIsProvisional": false,
	"bookingProvisionalId": null
}

 

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
            	}
        	]
    	}
	],
	"--DEPRECATED--": "The fields callbackId, generatedTime, bookingIsProvisional, bookingProvisionalId WILL BE REMOVED after 2024-09-01",
	"callbackId": 1,
	"generatedTime": "2024-05-31T12:15:23+00:00",
	"bookingIsProvisional": false,
	"bookingProvisionalId": null
}

 

Hvis du har spørgsmål eller brug for yderligere hjælp, kontakt vores supportteam.