Ved å legge til en webhook for bookinghendelser sendes bookingdetaljer i JSON-format til en URL hver gang en booking opprettes, endres, kanselleres eller gjenopprettes.

Viktige detaljer

  • Teknisk kompetanse nødvendig: Å sette opp og administrere webhooks krever teknisk kompetanse. Ta kontakt med en webutvikler om nødvendig.
  • Aktivering: Aktiver vår booking event webhook under Innstillinger -> Sirvoy-konto -> Booking event webhook.
  • Begrensninger for webhooks: Det kan bare brukes én webhook per Sirvoy-konto.
  • Booking event webhook funksjonen trigges fra: En webhook for bookinghendelser sender en callback til en spesifisert URL hver gang en booking opprettes, endres, kanselleres eller gjenopprettes.

Tekniske krav:

  • Responskode: Mottaksserveren må svare med HTTP-koden 200 (OK). Hvis ikke, vil forespørselen bli gjentatt ti ganger med eksponentiell back-off opp til 10 ganger før den avsluttes.
  • HTTPS og TLS: Vi støtter bare HTTPS ved bruk av TLS versjon 1.2 og nyere for å garantere personvern og konfidensialitet. HTTPS-sertifikatet må også være gyldig, ellers blir ingen data sendt.
  • Tilstandskontroll: Serveren din må svare på HTTP GET-forespørsler med `200 OK` for tilstandskontroll. Ingen data vil bli sendt ved bruk av HTTP GET, men det sikrer at endepunktet ditt er aktivt.

Håndtering av varsler om bookinger og mislykkede webhooks

Vi sender ut et varsel for hver oppdatering av bookingen, og hendelser kan leveres i ikke-kronologisk rekkefølge. Bruk «generatedAt»-tidsstempel for å lage en nøyaktig tidslinje over hendelser. Alle varsler kommer til å inneholde en fullstendig JSON-representasjon av bookingen på det aktuelle tidspunktet.

Dersom endepunktet ditt begynner å feile og ikke returnerer vellykkede statuskoder på våre henvendelser, kommer vi til å informere deg om dette via e-post. Hvis det etter en uke fremdeles ikke fungerer, vil webhooken bli fjernet etter at du har fått et siste varsel.

Utfasinger

Versjon 2.0 lanseres 10. juni 2024, og er bakoverkompatibel. Følgende felt vil imidlertid bli fjernet etter 1. september 2024. Vennligst slutt å bruke dem:

  • «callbackId»
  • «generatedTime»
  • «bookingIsProvisional»
  • «bookingProvisionalId»

IP Whitelisting

For å sikre vellykkede webhook-callbacks må du tillate følgende IP-intervaller i brannmuren:

  • 34.243.166.60
  • 52.18.11.99
  • 63.34.80.48
  • 54.194.0.85
  • 2a05:d018:e34:5300::/56

Callbacks utløses fra en server som er dual-stack (dobbel protokollstakk) som kan håndtere både IPv4 og IPv6. Om du legger til både IPv4 og IPv6-adressen til ditt domenenavn, vil en webhook callback bli sendt til serveren som svarer først.

Eksempler på JSON-format

Eksempel på JSON-formatet for nye bookinger:

{
	"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-formatet når du oppretter en kontantfaktura og når en betaling legges 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
}

For spørsmål eller ytterligere hjelp, ta kontakt med vårt supportteam.