Поиск инвентаря по событию
Сценарий применяется при синхронизации ежедневной доступности номеров из внешней АСУ.
Когда инвентарь меняется в АСУ, сервис платформа TravelLine публикует событие
pms_integration_storage:inventory_changed с диапазоном дат и списком категорий,
для которых нужно перечитать данные. По этому событию интегратор запрашивает
актуальный инвентарь через REST.
Метод также можно вызывать независимо от событий — например, по расписанию или для произвольного периода до 2 лет.
1. Уведомление о событии
На адрес интегратора приходит пакет вебхук-событий. Один элемент массива выглядит так:
{
"eventId": "e09a9f4b-e44e-46b7-a18a-0e977c0d442e",
"eventType": "pms_integration_storage:inventory_changed",
"creationTime": "2026-03-20T14:36:16.407Z",
"payload": {
"propertyId": "2490",
"roomTypeCodes": ["DBL", "SGL"],
"startDate": "2026-03-15",
"endDate": "2026-03-17"
}
}
Значения roomTypeCodes, startDate и endDate из payload передаются в тело запроса
на следующем шаге.
2. Запрос инвентаря
Запрос:
POST /api/pms-integration-storage/v1/properties/{{ propertyId }}/inventories/search HTTP/1.1
Host: partner.tlintegration.com
Authorization: Bearer {{ access_token }}
Content-Type: application/json
{
"roomTypeCodes": ["DBL", "SGL"],
"startDate": "2026-03-15",
"endDate": "2026-03-17"
}
Параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
propertyId | string (path) | Да | ID средства размещения из payload события. |
roomTypeCodes | string[] (body) | Да | Коды категорий номеров из payload события. |
startDate | string (body, date) | Да | Начало периода (включительно) в формате ISO-8601 yyyy-MM-dd. |
endDate | string (body, date) | Да | Конец периода (включительно) в формате ISO-8601 yyyy-MM-dd. |
Максимальная длина периода — 2 года.
Ответ:
{
"inventory": {
"propertyId": "2490",
"inventories": [
{
"roomTypeCode": "DBL",
"date": "2026-03-15",
"physicalRoomCount": 50,
"availableRoomCount": 25,
"outOfOrderRoomCount": 2,
"updateDateTime": "2026-03-15T14:30:00Z"
},
{
"roomTypeCode": "DBL",
"date": "2026-03-16",
"physicalRoomCount": 50,
"availableRoomCount": 18,
"outOfOrderRoomCount": 2,
"updateDateTime": "2026-03-15T14:30:00Z"
},
{
"roomTypeCode": "DBL",
"date": "2026-03-17",
"physicalRoomCount": 50,
"availableRoomCount": 30,
"outOfOrderRoomCount": 0,
"updateDateTime": "2026-03-15T14:30:00Z"
},
{
"roomTypeCode": "SGL",
"date": "2026-03-15",
"physicalRoomCount": 20,
"availableRoomCount": 12,
"outOfOrderRoomCount": 0,
"updateDateTime": "2026-03-15T14:30:00Z"
},
{
"roomTypeCode": "SGL",
"date": "2026-03-16",
"physicalRoomCount": 20,
"availableRoomCount": 14,
"outOfOrderRoomCount": 0,
"updateDateTime": "2026-03-15T14:30:00Z"
},
{
"roomTypeCode": "SGL",
"date": "2026-03-17",
"physicalRoomCount": 20,
"availableRoomCount": 20,
"outOfOrderRoomCount": 0,
"updateDateTime": "2026-03-15T14:30:00Z"
}
]
}
}
Для каждой пары (категория, дата) возвращается отдельная запись DailyRoomTypeInventory.
Если в указанном периоде для какой-либо категории нет данных, соответствующие записи
будут отсутствовать в ответе.