Перейти к основному содержимому

Поиск инвентаря по событию

Сценарий применяется при синхронизации ежедневной доступности номеров из внешней АСУ. Когда инвентарь меняется в АСУ, сервис платформа 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"
}

Параметры:

ПараметрТипОбязательныйОписание
propertyIdstring (path)ДаID средства размещения из payload события.
roomTypeCodesstring[] (body)ДаКоды категорий номеров из payload события.
startDatestring (body, date)ДаНачало периода (включительно) в формате ISO-8601 yyyy-MM-dd.
endDatestring (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. Если в указанном периоде для какой-либо категории нет данных, соответствующие записи будут отсутствовать в ответе.