| Файл | Назначение |
|---|---|
configs/appsettings.json |
Рабочий конфиг на сервере (не в git). Создаётся при установке |
defaults/configs/appsettings.json |
Шаблон значений по умолчанию (в составе сборки) |
defaults/configs/appsettings.Development.json |
Шаблон для разработки |
defaults/configs/appsettings.TestContour.json |
Шаблон тестового контура |
defaults/configs/NLog.config |
Логирование (подменяется при publish на NLog.Production.config) |
При первом запуске, если configs/ пуст, служба может использовать умолчания из defaults/configs/.
Конфигурация также может подгружаться с удалённого сервера конфигурации (RemoteConfigurationUri) и переопределяться переменными окружения.
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
Urls |
string | http://0.0.0.0:5020;https://0.0.0.0:5021 |
Адреса и порты прослушивания HTTP/HTTPS |
StartupValidationTolerance |
bool | false |
При true ошибки проверки БАРС при старте пишутся в лог, но не останавливают службу |
RemoteConfigurationUri |
string | пусто | URL сервера централизованной конфигурации (DK.Configuration) |
RemoteConfigurationTimeout |
int | 3000 |
Таймаут запроса к серверу конфигурации (мс) |
RemoteConfigurationMaxAttempts |
int | 3 |
Число попыток подключения к серверу конфигурации |
RemoteConfigurationRetryDelayMs |
int | 1500 |
Пауза между попытками (мс) |
| Параметр | Назначение |
|---|---|
ConnectionStrings:DefaultConnection |
Строка подключения к Service DB (MS SQL). Хранит события Travelline, outbox, BookingSync, аудит. Обязателен для работы службы |
Пример:
"ConnectionStrings": {
"DefaultConnection": "Server=sql-host;Database=Bars_Integrations_PMS;User Id=...;Password=...;TrustServerCertificate=True;"
}
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
Bars:ConnectionString |
string | пусто | Строка подключения к БД БАРС / KSO (MS SQL). Обязательна при UseStub=false |
Bars:SubscriptionStockId |
long | — | Category.Id типа абонемента (AbonementType, StockType=4). Какой вид абонемента выдавать гостю |
Bars:ServicePointId |
long | — | CashDeskId кассы, от имени которой оформляются транзакции выдачи абонемента |
Bars:StockValidityExtensionMinutes |
int | 0 |
Добавка к дате окончания абонемента (минуты). Используется при расчёте End, в т. ч. при досрочном выезде |
Bars:UseStub |
bool | true |
true — не писать в БАРС (заглушка); false — реальные INSERT/UPDATE в KSO |
Bars:WriteControlTape |
bool | true |
Писать выдачу абонемента в контрольную ленту ([Check]/[CheckDetail]) и связывать MasterTransaction.CheckDetailId. Если ключ отсутствует в конфиге — используется true |
Проверка при старте (при UseStub=false): наличие кассы, категории абонемента и активного AbonementTypeStock на кассе. При ошибке и StartupValidationTolerance=false служба не запустится.
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
Hotel:TimeZoneId |
string | Europe/Moscow |
Часовой пояс отеля (IANA). Для перевода дат заезда/выезда из Travelline в локальное время БАРС |
Hotel:CheckOutDayInclusive |
bool | true |
Включать календарный день выезда в срок действия абонемента |
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
Travelline:BaseUrl |
string | https://partner.tlintegration.com |
Базовый URL Partner API. Для тестового контура QATL: https://partner.qatl.ru |
Travelline:TokenUrl |
string | пусто | URL OAuth (/auth/token). Если пусто — {BaseUrl}/auth/token |
Travelline:ClientId |
string | пусто | OAuth Client ID из экстранета Travelline |
Travelline:ClientSecret |
string | пусто | OAuth Client Secret |
Travelline:LanguageCode |
string | ru |
Код языка ответов API (ISO 639-1), напр. en, ru |
Travelline:PropertyId |
string | пусто | ID объекта размещения в Travelline. Если пусто — берётся из веб-хука, номера брони или запроса GET /api/content/v1/properties |
Travelline:PropertiesSince |
string | UlUtNDE5NQ== |
Параметр since при запросе списка объектов |
Travelline:PropertiesCount |
int | 200 |
Параметр count при запросе списка объектов |
Travelline:WebhookApiKey |
string | пусто | Ожидаемое значение заголовка API-KEY на веб-хуке. Пустое — проверка отключена |
Travelline:UseStubApi |
bool | false |
true — не вызывать реальный Travelline API; ответы из StubTravellineApiClient |
При старте с реальным API выполняется проверка OAuth. Ошибка OAuth не блокирует запуск, но обработка броней в outbox будет падать до исправления учётных данных.
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
Travelline:Reconciliation:Enabled |
bool | true |
Включить фоновую сверку с PMS |
Travelline:Reconciliation:IntervalHours |
int | 4 |
Интервал между циклами сверки (часы) |
Travelline:Reconciliation:LookbackDays |
int | 7 |
Сколько дней назад искать активные брони |
Travelline:Reconciliation:LookaheadDays |
int | 1 |
Сколько дней вперёд искать брони |
Travelline:Reconciliation:RequestTimeoutSeconds |
int | 120 |
HTTP-таймаут запросов к Travelline API (сек). При отсутствии ключа — 120 |
Travelline:Reconciliation:InitialDelayMinutes |
int | 5 |
Задержка первой сверки после старта службы (мин). При отсутствии ключа — 5 |
Travelline:Reconciliation:MaxConcurrentBookings |
int | 3 |
Максимум параллельно обрабатываемых броней в одном цикле. При отсутствии ключа — 3 |
Travelline:Reconciliation:BookingRetryCount |
int | 2 |
Число повторов при таймауте/сетевой ошибке на бронь. При отсутствии ключа — 2 |
Если секция Travelline:Reconciliation целиком отсутствует, служба создаёт new TravellineReconciliationSettings() со всеми значениями по умолчанию (вкл. Enabled=true, IntervalHours=4).
Используется только при Travelline:UseStubApi=true.
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
StubProfile:GuestPhone |
string | пусто | Фиксированный телефон гостя. Пусто — генерируется из номера брони |
StubProfile:UniquePhonePerBooking |
bool | true |
Новый телефон на каждый bookingNumber → новый клиент в БАРС |
StubProfile:GuestLastName |
string | Тестов |
Фамилия гостя в ответе заглушки |
StubProfile:GuestFirstName |
string | Гость |
Имя гостя |
StubProfile:GuestMiddleName |
string | пусто | Отчество гостя |
StubProfile:PmsRoomStayId |
string | пусто | ID room stay. Пусто — stub-{bookingNumber} |
StubProfile:StayDays |
int | 1 |
Длительность проживания в заглушке (дней) |
StubProfile:MultiGuestRoomStay |
bool | false |
Эмуляция нескольких гостей в одном номере |
StubProfile:StubGuests |
array | [] |
Список дополнительных гостей для заглушки |
StubProfile:ActiveBookingNumbers |
array | [] |
Номера броней для ответа поиска активных броней |
| Параметр | Тип | По умолчанию | Назначение |
|---|---|---|---|
Service:MaxRetryAttempts |
int | 5 |
Максимум попыток обработки события из outbox перед переводом в Dead |
Service:OutboxPollIntervalSeconds |
int | 5 |
Интервал опроса очереди необработанных событий (сек) |
{
"Urls": "http://0.0.0.0:5020",
"StartupValidationTolerance": false,
"ConnectionStrings": {
"DefaultConnection": "Server=...;Database=Bars_Integrations_PMS;..."
},
"Bars": {
"ConnectionString": "Server=...;Database=BARS;...",
"SubscriptionStockId": 12345,
"ServicePointId": 42,
"StockValidityExtensionMinutes": 30,
"UseStub": false,
"WriteControlTape": true
},
"Hotel": {
"TimeZoneId": "Europe/Moscow",
"CheckOutDayInclusive": true
},
"Travelline": {
"PropertyId": "17783",
"BaseUrl": "https://partner.tlintegration.com",
"ClientId": "<из экстранета>",
"ClientSecret": "<секрет>",
"WebhookApiKey": "<ключ для Travelline>",
"UseStubApi": false,
"Reconciliation": {
"Enabled": true,
"IntervalHours": 4,
"LookbackDays": 7,
"LookaheadDays": 1,
"RequestTimeoutSeconds": 120,
"InitialDelayMinutes": 5,
"MaxConcurrentBookings": 3,
"BookingRetryCount": 2
}
},
"Service": {
"MaxRetryAttempts": 5,
"OutboxPollIntervalSeconds": 5
}
}
Ключи WriteControlTape и новые поля Reconciliation можно не указывать — служба подставит значения по умолчанию (см. таблицы выше).
{
"Travelline": {
"UseStubApi": true,
"WebhookApiKey": "",
"StubProfile": {
"UniquePhonePerBooking": true,
"GuestLastName": "Тестов",
"GuestFirstName": "Гость",
"StayDays": 2
}
},
"Bars": {
"ConnectionString": "Server=...;Database=BARS;...",
"SubscriptionStockId": 12345,
"ServicePointId": 42,
"UseStub": false,
"WriteControlTape": true
},
"StartupValidationTolerance": true
}
http(s)://<хост-службы>:<порт>/webhooks/travellineTravelline:WebhookApiKey — указать тот же ключ в настройках веб-хука Travelline (заголовок API-KEY).Логи пишутся в каталог Logs/ рядом с исполняемым файлом (имя файла: pms-YYYY-MM-DD.log).
Уровень и цели зависят от NLog.config в configs/ или defaults/configs/. В production-сборке используется конфиг с уровнем Info и выше.