Kun varaustapahtumalle on lisätty webhook, varaustiedot lähetetään JSON-muodossa URL-osoitteeseen aina, kun varaus luodaan, sitä muokataan, se perutaan tai palautetaan voimassa olevaksi.

Tärkeimmät tiedot

  • Vaadittava tekninen tietämys: Webhookien määrittäminen ja hallinta vaatii teknistä osaamista. Ota tarvittaessa yhteyttä web-kehittäjään.
  • Aktivointi: Aktivoi varaustapahtuman webhook valikosta Asetukset -> Sirvoy-tili -> Varaustapahtuman webhook.
  • Webhookien enimmäisraja: Jokaista Sirvoy-tiliä kohden voi olla vain yksi aktiivinen webhook.
  • Callback-toiminnon laukaisimet:  Varaustapahtuman webhook lähettää callback-kutsun määritettyyn URL-osoitteeseen aina, kun varaus luodaan, sitä muutetaan, se perutaan tai palautetaan voimassa olevaksi.

Tekniset vaatimukset:

  • Vastauskoodi: Vastaanottavan palvelimen on vastattava tilakoodilla ”200 OK”. Jos näin ei käy, kutsua yritetään uudelleen kymmenen kertaa eksponentiaalisella tarkistusalgoritmilla korkeintaan kymmenen kertaa, jonka jälkeen kutsu hylätään
  • HTTPS ja TLS: Tuemme tietosuojan ja luottamuksellisuuden takaamiseksi vain HTTPS:ää, joka käyttää TLS:n versiota 1.2 tai tätä uudempaa. Varmista, että HTTPS-varmenteesi on voimassa, tai muuten tietoja ei lähetetä.,
  • Palvelimen kuntotarkistukset: Palvelimen on vastattava HTTP GET -pyyntöihin koodilla ”200 OK” kuntotarkastuksia varten. HTTP GET-menetelmällä ei lähetetä tietoja. Sillä tarkistetaan vain päätepisteesi aktiivisuus.

Varausilmoitusten ja Webhook-virheiden hallinta

Lähetämme ilmoituksen jokaisesta varauspäivityksestä. Tapahtumat saatetaan toimittaa epäjärjestyksessä. Luo tarkka aikajana tapahtumista käyttämällä ”GenerateDat”-aikaleimaa. Jokainen ilmoitus sisältää täydellisen JSON-esityksen varauksesta kyseisenä ajankohtana.

Jos päätepisteesi alkaa toimia virheellisesti eikä palauta onnistumista ilmaisevia tilakoodeja kutsujamme vastaan, ilmoitamme sinulle sähköpostitse. Jos virheellinen toiminta jatkuu, webhook poistetaan lopullisen ilmoituksen jälkeen.

Käytöstä poistuvat kentät

Versio 2.0 julkaistaan 10.6.2024. Versio on taaksepäin yhteensopiva. Seuraavat kentät poistetaan kuitenkin 1.9.2024 jälkeen. Kehotamme lopettamaan niiden käytön:

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

Sallittujen IP-osoitteiden lisääminen

Varmista onnistuneet Webhookien callback-kutsut sallimalla seuraavien IP-osoitteiden päästä läpi palomuuristasi:

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

Callback-kutsuja suorittavat palvelimet ovat kaksoispinoja, jotka tukevat sekä IPv4:ää että IPv6:tta. Jos lisäät verkkotunnukseesi sekä IPv4- että IPv6-osoitteet, callback-kutsu osoitetaan ensimmäiselle palvelimelle, joka vastaa.

JSON-muotoisia esimerkkejä

Esimerkkejä uusien varausten JSON-rakenteesta:

{
	"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
}

 

Esimerkki JSON-rakenteesta käteiskuitin luomiseksi ja maksun soveltamiseksi laskuun:

{
	"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
}

 

Jos sinulla on kysyttävää tai tarvitset lisäapua, ota yhteyttä tukitiimiimme.