Лист ожидания
Обновлено: 2026-06-25 00:15 MSK
Лист ожидания (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 |
GET /waitings/{waitingItemId} — получить запись по ID
Возвращает запись по идентификатору. Ответ — 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 | Справочные данные (рестораны, статусы) |
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"
GET /api/rsv/mb/guest/walkins/data
Справочные данные для гостевого интерфейса (GuestWalkinsDataContract): restaurantIds[], statuses[].
Связанные разделы. Для гостей с бронью используйте Бронирования. Общие правила запросов и формат ошибок — в разделах Соглашения и Ошибки.