Durch das Hinzufügen eines Webhooks für ein Buchungsevent hat das Hotel die Möglichkeit, Buchungsdetails im JSON-Format über eine URL zu erhalten.

Beachte: Es sind hierfür einige Grundkenntnisse über die Verwendung eines Webhooks erforderlich. Wende dich an deinen Webentwickler, wenn du Hilfe benötigst.

Ein Webhook sendet einen Callback an eine bestimmte URL und wird jedes Mal ausgelöst, wenn eine Buchung erstellt, geändert oder storniert wird.

Die Webhook-Funktion für Buchungsevents wird ausgelöst von:

  • dem Sirvoy-Buchungsformular
  • dem Buchungsüberprüfungsformular
  • Channel-Buchungen

Du kannst sie unter Einstellungen -> Dein Konto -> Buchungsevent Webhook aktivieren.

Der empfangende Server muss mit dem Antwortcode 200 OK antworten, ansonsten wird der Rückruf alle 30 Minuten bis zu 3 Mal wiederholt. Wir unterstützen nur HTTPS mit der TLS Version 1.2 und höher. Damit kann Datenschutz und Vertraulichkeit gewährleistet werden. Außerdem muss das HTTPS-Zertifikat gültig sein, damit Daten gesendet werden können. Die Buchungsdaten werden als POST mit dem JSON als dem Request Body versendet.

Stelle außerdem sicher, dass dein Server auf eine HTTP-GET-Anfrage mit 200 OK antwortet. Diese Anfrage wird von Zeit zu Zeit verwendet, um sicherzustellen, dass dein Endpunkt aktiv ist. Es werden jedoch niemals Daten mit einem HTTP-GET an dich geschickt.

Die Webhook-Callbacks werden von den untenstehenden IP-Bereichen aus getätigt. Wenn du den Datenverkehr zu deinem Server einschränken möchtest, müssen alle der folgenden Bereiche in deiner Firewall zugelassen sein:

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

Die Server, die die Callbacks durchführen, sind Dual-Stack-Server mit IPv4- und IPv6-Konnektivität. Wenn du sowohl IPv4 als auch IPv6 Adressen zu deiner Domain hinzufügst, wird der Rückruf zu dem Server getätigt, der als Erster antwortet.

Nachfolgend findest du einige Beispiele für die im JSON-Format generierten Daten, wenn eine neue Buchung erstellt wird:

{
   "version":"1.0",
   "callbackId":2464764,
   "generatedTime":"2021-09-08T11:41:06+00:00",
   "event":"new",
   "propertyId":1,
   "bookingId":26006,
   "channelBookingId":null,
   "bookingDate":"2021-09-08T11:37:42+00:00",
   "arrivalDate":"2021-09-08",
   "departureDate":"2021-09-10",
   "cancelled":false,
   "eta":null,
   "totalAdults":2,
   "guest":{
      "firstName":"John",
      "lastName":"Doe",
      "businessName":"Acme Corporation",
      "address":"123 Main St",
      "postcode":"17101",
      "city":"AnyTown",
      "state":"DE",
      "country":"US",
      "phone":"+17184547453",
      "email":"john.doe@mailservice.us",
      "passportNo":null,
      "language":"en",
      "message":"Your hotel looks nice :)"
   },
   "guestReference":null,
   "internalComment":null,
   "couponCode":null,
   "bookingSource":"Front desk",
   "bookingIsCheckedIn":false,
   "bookingIsCheckedOut":false,
   "bookingIsConfirmed": false,
   "bookingIsProvisional":false,
   "bookingProvisionalId":null,
   "customFields":[
      {
         "name":"Custom field",
         "value":"custom field text filled by guest"
      },
      {
         "name":"Checkbox",
         "value":true
      },
      {
         "name":"new checkbox",
         "value":false
      }
   ],
   "rooms":[
      {
         "RoomTypeName":"Basic room",
         "RoomTypeDescription":"As basic as it gets, with a small window included.",
         "RoomName":"110",
         "RoomId": 52,
         "arrivalDate":"2021-09-08",
         "departureDate":"2021-09-10",
         "adults":2,
         "quantity":2,
         "price":100,
         "roomTotal":200,
         "guestName":null,
         "comment":null,
         "ledgerAccount":null
      }
   ],
   "additionalItems":[
      {
         "description":"Cleaning Fee",
         "specificDate":null,
         "quantity":1,
         "price":0,
         "itemTotal":0,
         "ledgerAccount":null
      }
   ],
   "bookedCategory":null,
   "currency":"EUR",
   "totalPrice":200,
   "totalSurcharges":20,
   "totalPriceIncludingSurcharges":220,
   "payments":[],
   "invoices":[]
}

So kann es aussehen, nachdem ein Kassenbeleg erstellt und eine Zahlung auf einer Rechnung verschoben wurde (Zahlungen und Rechnungen einer Buchung werden auch in den Rückruf aufgenommen). Jede andere Änderung führt ebenfalls zu einem Webhook-Callback mit den Daten. So sieht der Webhook für das Buchungsevent in diesem Beispiel jetzt aus:

{
   "version":"1.0",
   "callbackId":2464765,
   "generatedTime":"2021-09-08T11:45:01+00:00",
   "event":"modified",
   "propertyId":1,
   "bookingId":26006,
   "channelBookingId":null,
   "bookingDate":"2021-09-08T11:37:42+00:00",
   "arrivalDate":"2021-09-08",
   "departureDate":"2021-09-10",
   "cancelled":false,
   "eta":null,
   "totalAdults":2,
   "guest":{
      "firstName":"John",
      "lastName":"Doe",
      "businessName":"Acme Corporation",
      "address":"123 Main St",
      "postcode":"17101",
      "city":"AnyTown",
      "state":"DE",
      "country":"US",
      "phone":"+17184547453",
      "email":"john.doe@mailservice.us",
      "passportNo":null,
      "language":"en",
      "message":"Your hotel looks nice :)"
   },
   "guestReference":null,
   "internalComment":null,
   "couponCode":null,
   "bookingSource":"Front desk",
   "bookingIsCheckedIn":false,
   "bookingIsCheckedOut":false,
   "bookingIsConfirmed": false,
   "bookingIsProvisional":false,
   "bookingProvisionalId":null,
   "customFields":[
      {
         "name":"Custom field",
         "value":"custom field text filled by guest"
      },
      {
         "name":"Checkbox",
         "value":true
      },
      {
         "name":"new checkbox",
         "value":false
      }
   ],
   "rooms":[
      {
         "RoomTypeName":"Basic room",
         "RoomTypeDescription":"As basic as it gets, with a small window included.",
         "RoomName":"110",
         "RoomId": 52,
         "arrivalDate":"2021-09-08",
         "departureDate":"2021-09-10",
         "adults":2,
         "quantity":2,
         "price":100,
         "roomTotal":200,
         "guestName":null,
         "comment":null,
         "ledgerAccount":null
      }
   ],
   "additionalItems":[
      {
         "description":"Cleaning Fee",
         "specificDate":null,
         "quantity":1,
         "price":0,
         "itemTotal":0,
         "ledgerAccount":null
      }
   ],
   "bookedCategory":null,
   "currency":"EUR",
   "totalPrice":200,
   "totalSurcharges":20,
   "totalPriceIncludingSurcharges":220,
   "payments":[],
   "invoices":[
      {
         "invoiceNumber":"41001",
         "invoiceDate":"2021-09-08",
         "dueDate":"2021-09-08",
         "receiver":"Acme Corporation",
         "address":[
            "John Doe",
            "123 Main St",
            "AnyTown, DE 17101",
            "United States"
         ],
         "roundingAmount":0,
         "invoiceTotal":220,
         "originInvoice":null,
         "invoiceRows":[
            {
               "quantity":2,
               "price":100,
               "rowTotal":200,
               "ledgerAccount":"3010",
               "rowText":"Basic room",
               "vatRate":0,
               "vatAmount":0,
               "bookingId": 26005
            },
            {
               "quantity":1,
               "price":20,
               "rowTotal":20,
               "ledgerAccount":"sur1",
               "rowText":"10",
               "vatRate":0,
               "vatAmount":0
            }
         ],
         "payments":[
            {
               "paymentId": 26,
               "createdAt": "2023-10-12T20:43:08+00:00",
               "valueDate": "2023-10-13",
               "amount":220,
               "ledgerAccount":" ",
               "paymentReference":null,
               "comment":null
            }
         ]
      }
   ]
}