Лист ожидания
Лист ожидания (walk-in): очередь гостей без брони — постановка в очередь, статусы и рассадка.
Лист ожидания (walk-in / waitlist) — это очередь гостей, пришедших без брони. Хостес ставит гостя в очередь, система оценивает время ожидания, а когда стол готов — гостя вызывают и рассаживают. Этот раздел покрывает две стороны процесса:
- Сторона ресторана (тег
WaitingAdmin, путь/api/wm/admin/restaurant/{restaurantId}/waitings) — постановка в очередь, список, изменение статуса, вызов и рассадка гостя, переписка с ним. - Гостевая сторона (тег
WaitingGuest, путь/api/rsv/mb/guest/walkins) — самостоятельная постановка гостя в очередь, отслеживание позиции в линии и оценки времени.
Все эндпоинты — под Bearer-токеном (см. Аутентификация). Время — ISO 8601 в
локальном часовом поясе ресторана. Ошибки — ProblemDetails (см. Ошибки).
Запись листа ожидания (ключевые поля)
Запись очереди описывается контрактом WaitingContract (в ответах) и
UpdateWaitingItemContract (при создании/изменении). Ниже — поля, которые нужны в большинстве
интеграций.
| Поле | Тип | Описание |
|---|---|---|
id | string | Идентификатор записи в очереди |
customerName | string | Имя гостя |
phone | string | Телефон (на него отправляются уведомления о вызове) |
email | string | |
groupSize | integer | Размер компании (число гостей) |
areas | string | Предпочитаемая зона/зал |
tableNumber | string | Назначенный/желаемый стол |
status | string | Статус записи (в очереди / вызван / рассажен / закрыт и т.п.) |
state | string | Состояние записи |
type | string | Тип записи |
source | string | Источник (маркировка вашего канала) |
autoSeat | boolean | Автоматическая рассадка |
specialRequests | string | Пожелания гостя |
internalNotes | string | Внутренние заметки (не для гостя) |
aboutGuestNotes | string | Заметки о госте |
created | date-time | Время постановки в очередь |
seated | date-time | Время рассадки |
closed | date-time | Время закрытия записи |
expectedTime | date-time | Ожидаемое время посадки |
statusTime | date-time | Время последней смены статуса |
estimatedTurnOverTime | number | Ожидаемое время оборота стола, мин |
estimatedReleaseTime | date-time | Ожидаемое время освобождения стола |
unreadMessageCount | integer | Число непрочитанных сообщений от гостя |
receiptAmount | number | Сумма чека (если привязан) |
eventId | integer | ID события, если запись на событие |
createdBy / updatedBy | string | Кто создал / изменил (аудит) |
Вложенные объекты
| Поле | Объект | Содержит |
|---|---|---|
customerProfile | ProfileData | Профиль гостя: allergy[], vegetarian, vip, handicapAccessible, anniversary, birthdate, companyName, адрес доставки |
additionals | Additionals | Признаки/пожелания: highChair, vip, booth, highTop, babyChair, stroller, allergy, vegetarian, contactless, dontDisturb, event, eventTypes[], customs[] |
waiters[] | WaiterContract | Назначенные официанты: id, fullName, email, color, загрузка |
details | Details | Доп. детали: cancelOptionName, cancelNote, cancelSource, paymentError, paymentLinkUrl |
guestTags[] | TagContract | Теги гостя: id, name, color |
Постановка гостя в очередь
Добавить запись (сторона ресторана)
POST /waitings
Создаёт запись в листе ожидания от имени персонала. Тело — UpdateWaitingItemContract.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
Наиболее используемые поля тела: customerName, phone, groupSize, areas,
expectedTimeMinutes (ожидание в минутах), estimatedTurnOverTime, specialRequests,
internalNotes, email, tableNumber, waiterIds[], autoSeat, additionals,
customerProfile.
curl -X POST https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "customerName": "Иван Петров", "phone": "+79991234567", "groupSize": 2, "areas": "Терраса", "specialRequests": "Столик у окна" }'Гость встаёт в очередь сам
POST /api/rsv/mb/guest/walkins
Гостевой эндпоинт: гость ставит себя в очередь (например, через виджет или киоск). Тело —
CreateMobileWalkinContract.
| Поле | Тип | Описание |
|---|---|---|
restaurantId | integer | Идентификатор ресторана |
groupSize | integer | Размер компании |
expectedTime | integer | Желаемое ожидание, мин |
customerName | string | Имя гостя |
phone | string | Телефон |
email | string | |
areas | string | Предпочитаемая зона |
specialRequests | string | Пожелания |
aboutGuestNotes | string | Заметки о госте |
externalUserId | string | Внешний ID гостя на вашей стороне |
campaignInfo | string | Метка кампании/источника |
additionals | object | Признаки/пожелания (Additionals) |
customerProfile | object | Профиль гостя (ProfileData) |
curl -X POST https://api.hostmeapp.com/api/rsv/mb/guest/walkins \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "restaurantId": 123, "groupSize": 3, "customerName": "Мария Иванова", "phone": "+79990000000", "expectedTime": 30 }'Ответ. Возвращается созданная бронь-запись в виде
BookingContract.
Список и чтение записей
Список записей за период
GET /waitings
Возвращает все записи листа ожидания ресторана за период.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
from | query | date-time | Начало периода |
to | query | date-time | Конец периода |
includeEvents | query | boolean | Включать записи на события |
Ответ — массив WaitingContract.
curl -G https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "from=2026-07-01T00:00:00" \ --data-urlencode "to=2026-07-01T23:59:59"Компактный список
GET /waitings/compact
Облегчённый список записей (BookingCompactContract) — удобен для табло/дашборда: содержит
id, customerName, phone, groupSize, areas, status, state, tableNumber,
expectedTime, estimatedTurnOver, unreadMessageCount и др. без полного дерева заказа.
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
from | query | date-time |
to | query | date-time |
Получить запись по ID
GET /waitings/{waitingItemId}
Возвращает запись по идентификатору. Ответ — WaitingContract.
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
waitingItemId * | path | string |
Изменение и удаление записи
Изменить запись
PUT /waitings/{waitingItemId}
Обновляет запись очереди (имя, телефон, размер компании, зону, ожидание и т.п.). Тело — те же
поля, что и при создании (UpdateWaitingItemContract): присылайте изменяемые поля.
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
waitingItemId * | path | string |
curl -X PUT https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "groupSize": 4, "areas": "Основной зал", "expectedTimeMinutes": 25 }'Гость удаляет себя из очереди
DELETE /api/rsv/mb/guest/walkins/{walkinId}
Гостевой эндпоинт: гость снимает свою запись из очереди.
| Параметр | Где | Тип |
|---|---|---|
walkinId * | path | string |
Изменение статуса записи
Жизненный цикл записи управляется отдельными PUT-эндпоинтами. Все они принимают
restaurantId (path, integer) и waitingItemId (path, string).
| Эндпоинт | Назначение |
|---|---|
PUT /waitings/{waitingItemId}/sited | Отметить гостя как рассаженного (получил стол) |
PUT /waitings/{waitingItemId}/close | Закрыть запись (гость рассажен/ушёл) |
PUT /waitings/{waitingItemId}/cancel | Отменить запись |
PUT /waitings/{waitingItemId}/reopen | Заново открыть закрытую запись |
PUT /waitings/{waitingItemId}/rollback | Откатить последнюю смену статуса |
Рассадить гостя
PUT /waitings/{waitingItemId}/sited
Когда гость получает стол, хостес отмечает запись как рассаженную. Тело —
SeatBookingContract:
| Поле | Тип | Описание |
|---|---|---|
tableNumber | string | Номер стола |
waiterIds[] | array | ID назначенных официантов |
updatedBy | string | Кто рассадил |
externalWaiterUserName | string | Имя официанта во внешней системе |
externalWaiterId | string | ID официанта во внешней системе |
Ответ — обновлённая запись (BookingContract).
curl -X PUT https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID/sited \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "tableNumber": "12", "waiterIds": [42] }'Отменить запись
PUT /waitings/{waitingItemId}/cancel
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
waitingItemId * | path | string | Идентификатор записи |
origin | query | string | Источник отмены (кто отменяет) |
Вызов гостя
Вызвать гостя
PUT /waitings/{waitingItemId}/call
Когда стол готов, хостес инициирует вызов. Гостю отправляется уведомление о том, что стол готов.
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
waitingItemId * | path | string | Идентификатор записи |
tableNumber | query | string | Номер готового стола |
curl -X PUT "https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID/call?tableNumber=12" \ -H "Authorization: Bearer $TOKEN"Переписка с гостем
Хостес и гость могут обмениваться сообщениями (например, об ожидании или готовности стола).
| Эндпоинт | Назначение |
|---|---|
GET /waitings/{waitingItemId}/messages | Список сообщений по записи |
POST /waitings/{waitingItemId}/sendmessage | Отправить сообщение |
GET /waitings/messages/unread/count | Число непрочитанных сообщений (по ресторану) |
POST /waitings/{waitingItemId}/messages/readall | Отметить все сообщения прочитанными |
Сообщения по позиции
GET /waitings/{waitingItemId}/messages
Возвращает массив MessageContract: id, body, time, origin (host/client), phone,
deliveryStatus, deliveryTime, isRead.
Отправить сообщение гостю
POST /waitings/{waitingItemId}/sendmessage
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
waitingItemId * | path | string | Идентификатор записи |
origin | query | string | Кто отправляет: host или client |
Тело — CreateMessageContract (body — текст сообщения).
curl -X POST "https://api.hostmeapp.com/api/wm/admin/restaurant/123/waitings/ABC_ID/sendmessage?origin=host" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "body": "Ваш стол будет готов через 5 минут" }'Непрочитанные сообщения
GET /waitings/messages/unread/count
Ответ — CountContract: общий count и countItems[] (id записи + count непрочитанных по
каждой записи).
Оценка времени ожидания (ETA) и статистика
Статистика очереди (сторона ресторана)
GET /waitings/stats
Возвращает сводку по очереди и оценку среднего времени ожидания. Ответ — WalkinStatistic:
| Поле | Тип | Описание |
|---|---|---|
inList | integer | Число гостей в очереди |
called | integer | Число вызванных гостей |
tablesAvailable | integer | Число свободных столов |
totalCovers | integer | Общая вместимость (посадочные места) |
coversAvailable | integer | Свободные посадочные места |
oneTwoGroup | object | Среднее ожидание для компаний 1–2 гостя (valueMinutes, totalMinutes) |
threeFourGroup | object | Среднее ожидание для компаний 3–4 гостя |
fiveSixGroup | object | Среднее ожидание для компаний 5–6 гостей |
waitByGroup[] | array | Оценка по размеру компании (avgSeatTime, tableTop, suggestedTables) |
waitByTable[] | array | Оценка по типу стола |
| Параметр | Где | Тип | Описание |
|---|---|---|---|
restaurantId * | path | integer | Идентификатор ресторана |
partySizes | query | string | Фильтр по размерам компаний |
areaList | query | string | Фильтр по зонам |
Оценка для гостя
GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/expected
Гостевой эндпоинт: оценка ожидаемого времени по размерам компаний. Ответ —
ExpectedTimeContract (expectedMinutesForSizes — карта «размер компании → минуты»).
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
partySizes | query | string |
areaList | query | string |
Настройки листа ожидания
GET / PUT /waitings/.../settings
Чтение и изменение настроек модуля очереди. Путь:
/api/wm/admin/restaurant/{restaurantId}/settings. Тело/ответ — WaitingSettingsContract:
| Поле | Тип | Описание |
|---|---|---|
enabled | boolean | Модуль очереди включён |
enableManualHold | boolean | Гость может сам поставить себя «на удержание», чтобы хостес его не вызывал |
autoCall | boolean | Автоматический вызов гостя |
autoTableAssignment | boolean | Автоматическое назначение стола |
autoCallAndTableAssignment | boolean | Автовызов вместе с автоназначением стола |
adjustEstimatedWaitTime | boolean | Подстраивать оценку времени ожидания |
waitEtaRuleEnabled | boolean | Использовать правило расчёта ETA |
maximumHoldTime | integer | Максимальное время удержания, мин |
waitEstimateLookBackMinutes | integer | Окно ретроспективы для оценки ожидания, мин |
etaAlgorithm | string | Алгоритм расчёта ETA |
showAdditionalsInAreas | boolean | Показывать признаки/пожелания в зонах |
positionMessages[] | array | Сообщения гостю при изменении позиции в линии (minPos, maxPos, messageTemplate) |
statusMessages[] | array | Сообщения гостю при смене статуса (fromStatus, toStatus, depositStatus, messageTemplate) |
curl -G https://api.hostmeapp.com/api/wm/admin/restaurant/123/settings \ -H "Authorization: Bearer $TOKEN"Гостевая сторона: отслеживание очереди
Гостевые эндпоинты (/api/rsv/mb/guest/walkins) позволяют гостю отслеживать своё место в
очереди и управлять своей записью.
| Эндпоинт | Назначение |
|---|---|
GET /api/rsv/mb/guest/walkins | Список записей гостя (параметры skip, top, from, to) |
GET /api/rsv/mb/guest/walkins/{walkinId} | Получить запись гостя (WalkinGuestContract) |
PUT /api/rsv/mb/guest/walkins/{walkinId}/seat | Гость подтверждает посадку |
PUT /api/rsv/mb/guest/walkins/{walkinId}/skip | Гость пропускает свою очередь |
DELETE /api/rsv/mb/guest/walkins/{walkinId} | Гость удаляет запись |
GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/line | Позиция в линии |
GET /api/rsv/mb/guest/walkins/data | Справочные данные (рестораны, статусы) |
Статус walk-in (гость)
GET /api/rsv/mb/guest/walkins/{walkinId}
Возвращает запись гостя (WalkinGuestContract) с полями customerName, phone, groupSize,
areas, status, tableNumber, expectedTime, estimatedTurnOverTime, restaurantName,
restaurantImage, timeZone, а также профилем гостя и признаками.
Позиция в линии
GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/line
Возвращает текущую позицию записи в очереди (LineStateContract):
| Поле | Тип | Описание |
|---|---|---|
bookingId | string | Идентификатор записи |
overallLinePosition | integer | Позиция в общей очереди |
groupLinePosition | integer | Позиция в очереди по размеру компании |
groupLineLength | integer | Длина очереди по размеру компании |
areaLinePosition | object | Позиция в очереди по зоне |
| Параметр | Где | Тип |
|---|---|---|
restaurantId * | path | integer |
walkinId | query | string |
groupSize | query | integer |
curl -G "https://api.hostmeapp.com/api/rsv/mb/guest/restaurants/123/walkins/line" \ -H "Authorization: Bearer $TOKEN" \ --data-urlencode "walkinId=ABC_ID" \ --data-urlencode "groupSize=2"Данные walk-in (гость)
GET /api/rsv/mb/guest/walkins/data
Справочные данные для гостевого интерфейса (GuestWalkinsDataContract): restaurantIds[],
statuses[].
Связанные разделы. Для гостей с бронью используйте Бронирования. Общие правила запросов и формат ошибок — в разделах Соглашения и Ошибки.