Usa webhooks de evento de reserva
Cómo enviar datos de una reserva a un sistema externo cuando se crean, modifican, cancelan o restauran reservas.
En este artículo
Los webhooks permiten que Sirvoy se comunique automáticamente con otras herramientas, para por ejemplo informar a un sistema de entrada sin llave cuándo crear un código de habitación, o enviar detalles de facturación a tu software de contabilidad.
Con un webhook, Sirvoy envía detalles de reserva en formato JSON (una forma estándar para que las aplicaciones compartan datos) a una dirección web (URL) que tu elijes. Un callback es cuando se envían datos a esa URL.
Otros programas pueden recibir los detalles enviados a la URL y utilizar los datos para tareas automatizadas.
Nota: Los webhooks están disponibles solo en Sirvoy Pro. Puedes agregar hasta diez webhooks por cuenta. Configurar y gestionar webhooks requiere conocimientos técnicos, así que considera consultar a un desarrollador web.
Crear un nuevo webhook de evento de reserva
- Ve a Configuración > Cuenta Sirvoy
- Bajo Webhook de evento de reserva, haz clic en Agregar
- Ingresa la URL de Callback
- Dale un nombre al webhook
- Da clic en Guardar
Sirvoy ahora enviará un callback a esa URL cada vez que se cree, modifique, cancele o restaure una reserva.
Cómo funcionan los callbacks y qué se requiere
-
Manejo de respuestas: El servidor que recibe el callback necesita responder con un código de estado
200 OK, que significa "todo funcionó". Si no lo hace, Sirvoy intentará enviar el callback hasta 10 veces, espaciando cada intento más y más, antes de detenerse por completo. Si los callbacks siguen fallando, te notificaremos por correo electrónico y eliminaremos el webhook después de un aviso final. -
HTTPS y TLS: La URL de tu webhook debe ser segura (comenzar con
https://) y usar TLS versión 1.2 o superior. TLS (Transport Layer Security) cifra los datos para que nadie pueda leerlos mientras se envían. Si tu certificado HTTPS no es válido, Sirvoy no enviará ningún dato. -
Comprobaciones de estado: Sirvoy verifica ocasionalmente si tu URL está activa enviando una solicitud simple
HTTP GET, una forma de preguntar a tu servidor "¿estás ahí?" sin enviar datos. Tu servidor debe responder con200 OK("todo bien") para que estas comprobaciones se completen correctamente. -
Orden de eventos: Se envía un webhook para cada evento de reserva, pero los eventos pueden llegar fuera de orden. Por ejemplo, una modificación puede llegar antes del evento de reserva original. Utiliza la marca de tiempo
generatedAten cada mensaje para organizarlos en el orden correcto.
Evita que tu firewall bloquee los callbacks
Si tu sistema utiliza un firewall (software o hardware que bloquea el tráfico no deseado de internet), es posible que debas agregar a la lista de permitidos ciertas direcciones IP. Agregar a la lista de permitidos significa permitir el tráfico de fuentes específicas mientras se bloquean otras.
Agrega a la lista de permitidos estas direcciones IP:
34.243.166.60
52.18.11.99
63.34.80.48
54.194.0.85
2a05:d018:e34:5300::/56Los callbacks se envían desde servidores que admiten tanto IPv4 (el estándar de direccionamiento de internet más antiguo) como IPv6 (el más nuevo).
Ejemplo de callbak en JSON
Estos ejemplos muestran el tipo de datos que Sirvoy envía a tu URL de webhook y cómo están formateados.
Son útiles para desarrolladores o cualquier persona que esté construyendo un sistema que necesite recibir y procesar datos de reservas de Sirvoy.
El primer ejemplo muestra un callback básico para una nueva reserva. El segundo incluye más detalles, como facturas y pagos, para mostrar lo que se incluye cuando se trata de datos financieros.
Ejemplo: Callback de nueva reserva
"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": []
}Ejemplo: Callback de nueva reserva con datos financieros
{
"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
}
]
}
]
}