Hostme | Лист ожидания

Лист ожидания

Обновлено: 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 (при создании/изменении). Ниже — поля, которые нужны в большинстве интеграций.

ПолеТипОписание
idstringИдентификатор записи в очереди
customerNamestringИмя гостя
phonestringТелефон (на него отправляются уведомления о вызове)
emailstringEmail
groupSizeintegerРазмер компании (число гостей)
areasstringПредпочитаемая зона/зал
tableNumberstringНазначенный/желаемый стол
statusstringСтатус записи (в очереди / вызван / рассажен / закрыт и т.п.)
statestringСостояние записи
typestringТип записи
sourcestringИсточник (маркировка вашего канала)
autoSeatbooleanАвтоматическая рассадка
specialRequestsstringПожелания гостя
internalNotesstringВнутренние заметки (не для гостя)
aboutGuestNotesstringЗаметки о госте
createddate-timeВремя постановки в очередь
seateddate-timeВремя рассадки
closeddate-timeВремя закрытия записи
expectedTimedate-timeОжидаемое время посадки
statusTimedate-timeВремя последней смены статуса
estimatedTurnOverTimenumberОжидаемое время оборота стола, мин
estimatedReleaseTimedate-timeОжидаемое время освобождения стола
unreadMessageCountintegerЧисло непрочитанных сообщений от гостя
receiptAmountnumberСумма чека (если привязан)
eventIdintegerID события, если запись на событие
createdBy / updatedBystringКто создал / изменил (аудит)

Вложенные объекты

ПолеОбъектСодержит
customerProfileProfileDataПрофиль гостя: allergy[], vegetarian, vip, handicapAccessible, anniversary, birthdate, companyName, адрес доставки
additionalsAdditionalsПризнаки/пожелания: highChair, vip, booth, highTop, babyChair, stroller, allergy, vegetarian, contactless, dontDisturb, event, eventTypes[], customs[]
waiters[]WaiterContractНазначенные официанты: id, fullName, email, color, загрузка
detailsDetailsДоп. детали: cancelOptionName, cancelNote, cancelSource, paymentError, paymentLinkUrl
guestTags[]TagContractТеги гостя: id, name, color

Постановка гостя в очередь

POST /waitings — добавить запись (сторона ресторана)

Создаёт запись в листе ожидания от имени персонала. Тело — UpdateWaitingItemContract.

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана

Наиболее используемые поля тела: 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.

ПолеТипОписание
restaurantIdintegerИдентификатор ресторана
groupSizeintegerРазмер компании
expectedTimeintegerЖелаемое ожидание, мин
customerNamestringИмя гостя
phonestringТелефон
emailstringEmail
areasstringПредпочитаемая зона
specialRequestsstringПожелания
aboutGuestNotesstringЗаметки о госте
externalUserIdstringВнешний ID гостя на вашей стороне
campaignInfostringМетка кампании/источника
additionalsobjectПризнаки/пожелания (Additionals)
customerProfileobjectПрофиль гостя (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 *pathintegerИдентификатор ресторана
fromquerydate-timeНачало периода
toquerydate-timeКонец периода
includeEventsquerybooleanВключать записи на события

Ответ — массив 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 *pathinteger
fromquerydate-time
toquerydate-time

GET /waitings/{waitingItemId} — получить запись по ID

Возвращает запись по идентификатору. Ответ — WaitingContract.

ПараметрГдеТип
restaurantId *pathinteger
waitingItemId *pathstring

Изменение и удаление записи

PUT /waitings/{waitingItemId} — изменить запись

Обновляет запись очереди (имя, телефон, размер компании, зону, ожидание и т.п.). Тело — те же поля, что и при создании (UpdateWaitingItemContract): присылайте изменяемые поля.

ПараметрГдеТип
restaurantId *pathinteger
waitingItemId *pathstring
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 *pathstring

Изменение статуса записи

Жизненный цикл записи управляется отдельными 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:

ПолеТипОписание
tableNumberstringНомер стола
waiterIds[]arrayID назначенных официантов
updatedBystringКто рассадил
externalWaiterUserNamestringИмя официанта во внешней системе
externalWaiterIdstringID официанта во внешней системе

Ответ — обновлённая запись (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 *pathintegerИдентификатор ресторана
waitingItemId *pathstringИдентификатор записи
originquerystringИсточник отмены (кто отменяет)

Вызов гостя

PUT /waitings/{waitingItemId}/call — вызвать гостя

Когда стол готов, хостес инициирует вызов. Гостю отправляется уведомление о том, что стол готов.

ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
waitingItemId *pathstringИдентификатор записи
tableNumberquerystringНомер готового стола
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 *pathintegerИдентификатор ресторана
waitingItemId *pathstringИдентификатор записи
originquerystringКто отправляет: 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:

ПолеТипОписание
inListintegerЧисло гостей в очереди
calledintegerЧисло вызванных гостей
tablesAvailableintegerЧисло свободных столов
totalCoversintegerОбщая вместимость (посадочные места)
coversAvailableintegerСвободные посадочные места
oneTwoGroupobjectСреднее ожидание для компаний 1–2 гостя (valueMinutes, totalMinutes)
threeFourGroupobjectСреднее ожидание для компаний 3–4 гостя
fiveSixGroupobjectСреднее ожидание для компаний 5–6 гостей
waitByGroup[]arrayОценка по размеру компании (avgSeatTime, tableTop, suggestedTables)
waitByTable[]arrayОценка по типу стола
ПараметрГдеТипОписание
restaurantId *pathintegerИдентификатор ресторана
partySizesquerystringФильтр по размерам компаний
areaListquerystringФильтр по зонам

GET /api/rsv/mb/guest/restaurants/{restaurantId}/walkins/expected — оценка для гостя

Гостевой эндпоинт: оценка ожидаемого времени по размерам компаний. Ответ — ExpectedTimeContract (expectedMinutesForSizes — карта «размер компании → минуты»).

ПараметрГдеТип
restaurantId *pathinteger
partySizesquerystring
areaListquerystring

Настройки листа ожидания

GET / PUT /waitings/.../settings

Чтение и изменение настроек модуля очереди. Путь: /api/wm/admin/restaurant/{restaurantId}/settings. Тело/ответ — WaitingSettingsContract:

ПолеТипОписание
enabledbooleanМодуль очереди включён
enableManualHoldbooleanГость может сам поставить себя «на удержание», чтобы хостес его не вызывал
autoCallbooleanАвтоматический вызов гостя
autoTableAssignmentbooleanАвтоматическое назначение стола
autoCallAndTableAssignmentbooleanАвтовызов вместе с автоназначением стола
adjustEstimatedWaitTimebooleanПодстраивать оценку времени ожидания
waitEtaRuleEnabledbooleanИспользовать правило расчёта ETA
maximumHoldTimeintegerМаксимальное время удержания, мин
waitEstimateLookBackMinutesintegerОкно ретроспективы для оценки ожидания, мин
etaAlgorithmstringАлгоритм расчёта ETA
showAdditionalsInAreasbooleanПоказывать признаки/пожелания в зонах
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):

ПолеТипОписание
bookingIdstringИдентификатор записи
overallLinePositionintegerПозиция в общей очереди
groupLinePositionintegerПозиция в очереди по размеру компании
groupLineLengthintegerДлина очереди по размеру компании
areaLinePositionobjectПозиция в очереди по зоне
ПараметрГдеТип
restaurantId *pathinteger
walkinIdquerystring
groupSizequeryinteger
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[].


Связанные разделы. Для гостей с бронью используйте Бронирования. Общие правила запросов и формат ошибок — в разделах Соглашения и Ошибки.