Получение деталей бронирования по событию
Сценарий применяется при синхронизации броней из внешней АСУ. Когда бронь создаётся
или изменяется в АСУ, платформа TravelLine публикует событие
pms_integration_storage:booking_changed. По этому событию интегратор запрашивает
полные данные брони через REST.
1. Уведомление о событии
На адрес интегратора приходит пакет вебхук-событий. Один элемент массива выглядит так:
{
"eventId": "e09a9f4b-e44e-46b7-a18a-0e977c0d442e",
"eventType": "pms_integration_storage:booking_changed",
"creationTime": "2026-03-20T14:36:16.407Z",
"payload": {
"propertyId": "2490",
"reservationId": "606541"
}
}
Значение reservationId — это внутренний идентификатор брони в PMS Integration Storage API.
На следующем шаге он передаётся в путь запроса как {bookingId}.
2. Получение деталей бронирования
Запрос:
GET /api/pms-integration-storage/v1/properties/{{ propertyId }}/bookings/{{ bookingId }} HTTP/1.1
Host: partner.tlintegration.com
Authorization: Bearer {{ access_token }}
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
propertyId | string (path) | Да | ID средства размещения из payload события. |
bookingId | string (path) | Да | Значение reservationId из payload события. |
Ответ:
{
"booking": {
"id": "606541",
"status": "Confirmed",
"propertyId": "2490",
"uniqueIds": [
{ "id": "RES-12345", "idContext": "Pms" }
],
"bookingChannels": [
{
"code": "TA001",
"codeType": "Pms",
"name": "Booking.com",
"bookingChannelType": "TravelAgent"
}
],
"roomStays": [
{
"index": 1,
"sourceOfBusiness": "WEB",
"marketCode": "LEISURE",
"roomTypes": [
{ "index": 0, "pmsSideCode": "STD" }
],
"ratePlans": [
{ "index": 0, "pmsSideCode": "BAR" }
],
"inventoryBlocks": [],
"roomRates": [
{
"stayDate": "2024-03-27",
"roomTypeIndex": 0,
"ratePlanIndex": 0,
"inventoryBlockIndex": null,
"total": { "amountAfterTax": 5000, "currencyCode": "RUB" }
},
{
"stayDate": "2024-03-28",
"roomTypeIndex": 0,
"ratePlanIndex": 0,
"inventoryBlockIndex": null,
"total": { "amountAfterTax": 5000, "currencyCode": "RUB" }
},
{
"stayDate": "2024-03-29",
"roomTypeIndex": 0,
"ratePlanIndex": 0,
"inventoryBlockIndex": null,
"total": { "amountAfterTax": 5000, "currencyCode": "RUB" }
}
],
"services": [
{
"quantity": 1,
"pmsSideCode": "BRKF",
"name": "Breakfast",
"startDate": "2024-03-27",
"durationStayUnits": 3,
"total": { "amountAfterTax": 30, "currencyCode": "RUB" },
"inclusive": true
}
],
"guestCounts": [
{ "ageQualifyingCode": "AdultBed", "count": 2, "age": null }
],
"stayDates": {
"arrivalDateTime": "2024-03-27T14:00:00",
"departureDateTime": "2024-03-30T12:00:00",
"actualCheckInDateTime": null,
"actualCheckOutDateTime": null
}
}
],
"total": { "amountAfterTax": 15000, "currencyCode": "RUB" },
"guaranteeInfo": { "guaranteeCode": "CC" },
"pmsSideCreateDateTime": "2024-03-20T10:30:00",
"pmsSideUpdateDateTime": "2024-03-27T16:45:00",
"updateDateTime": "2024-03-27T13:45:00Z",
"cancellationInfo": null,
"roomRevenues": [
{
"stayDate": "2024-03-27",
"amount": { "amountAfterTax": 5000, "currencyCode": "RUB" }
},
{
"stayDate": "2024-03-28",
"amount": { "amountAfterTax": 5000, "currencyCode": "RUB" }
},
{
"stayDate": "2024-03-29",
"amount": { "amountAfterTax": 5000, "currencyCode": "RUB" }
}
]
}
}
Если бронь была отменена, status принимает значение Cancelled, а в cancellationInfo
заполняется pmsSideCancelDateTime и при наличии — cancelReason.