Bronjoy
Руководства

Услуги и расписание

Создание услуг, настройка расписаний сотрудников и управление исключениями доступности.

Услуги

Услуги — это то, на что можно записаться в вашей организации. У каждой услуги своя длительность, цена и список сотрудников, которые могут её оказать.

Создание услуги

POST /api/org/services
Authorization: Bearer your-token
Content-Type: application/json
{
  "name": "Deep Tissue Massage",
  "description": "60-minute full-body deep tissue massage",
  "duration": 60,
  "price": 150000,
  "category_id": 2,
  "buffer_time": 15,
  "color": "#6366f1"
}

Справочник полей:

ПолеТипОписание
namestringНазвание услуги, которое видят клиенты
descriptionstringКраткое описание (1–3 предложения)
durationintegerДлительность в минутах
priceintegerЦена в минимальных единицах валюты
category_idintegerКатегория для группировки (опционально)
buffer_timeintegerПромежуток после записи в минутах (уборка, дорога)
colorstringHEX-цвет для отображения в календаре
prepay_requiredbooleanТребовать оплату при записи
prepay_amountintegerФиксированная сумма депозита (если prepay_required)
max_advance_daysintegerЗа сколько дней вперёд можно записаться на эту услугу
min_lead_hoursintegerМинимум часов до записи
is_activebooleanВидна ли услуга и доступна ли для записи

Категории услуг

Группируйте услуги по категориям, чтобы страница записи была лучше организована:

GET /api/org/services/categories

Категории общие для всей организации и помогают клиентам ориентироваться в списке услуг.

Советы по услугам

  • Точность длительности — занизите, и появятся накладки; завысите, и потеряете слоты. Засеките время сами.
  • Буферное время — всегда закладывайте буфер на подготовку кабинета, заметки или сборы. Даже 5–10 минут спасают от спешки.
  • Цены — указывайте ту цену, которую заплатит клиент. Если работаете с депозитами, задайте prepay_amount равным депозиту и prepay_required: true.
  • Цвета — назначьте разные цвета категориям услуг — календарь сотрудников станет намного читаемее.

Расписания

Расписание определяет, когда сотрудник может принимать записи. Пока расписание не задано, слоты для этого сотрудника не генерируются.

Создание записи расписания

POST /api/org/schedule
Authorization: Bearer your-token
Content-Type: application/json
{
  "staff_id": 1,
  "day_of_week": 1,
  "start_time": "09:00",
  "end_time": "18:00"
}

day_of_week: 0 = воскресенье, 1 = понедельник, ..., 6 = суббота.

Просмотр расписания

GET /api/org/schedule?staff_id=1

Обновление записи расписания

PUT /api/org/schedule/{id}
Content-Type: application/json
{
  "start_time": "10:00",
  "end_time": "19:00"
}

Удаление записи расписания

DELETE /api/org/schedule/{id}

Пример на всю неделю

Типичное расписание с понедельника по пятницу, с 9 до 18, для сотрудника №1:

[
  { "staff_id": 1, "day_of_week": 1, "start_time": "09:00", "end_time": "18:00" },
  { "staff_id": 1, "day_of_week": 2, "start_time": "09:00", "end_time": "18:00" },
  { "staff_id": 1, "day_of_week": 3, "start_time": "09:00", "end_time": "18:00" },
  { "staff_id": 1, "day_of_week": 4, "start_time": "09:00", "end_time": "18:00" },
  { "staff_id": 1, "day_of_week": 5, "start_time": "09:00", "end_time": "18:00" }
]

Исключения доступности

Исключения переопределяют обычное расписание на конкретные даты — удобно для праздников, выходных или особых часов работы.

Создание исключения

POST /api/org/availability/exceptions
Authorization: Bearer your-token
Content-Type: application/json
{
  "staff_id": 1,
  "date": "2026-05-01",
  "is_day_off": true,
  "reason": "National holiday"
}

Для неполного дня (другие часы):

{
  "staff_id": 1,
  "date": "2026-12-31",
  "is_day_off": false,
  "start_time": "09:00",
  "end_time": "14:00",
  "reason": "New Year's Eve — half day"
}

Список исключений

GET /api/org/availability/exceptions?staff_id=1

Советы:

  • В начале года создайте исключения сразу на все известные праздники
  • Если сотрудник заболел, создайте исключение на этот же день с is_day_off: true — существующие записи сохраняются, их можно перенести
  • Исключения имеют приоритет над обычным расписанием на свою дату

Как рассчитываются слоты

Калькулятор слотов учитывает:

  1. Расписание сотрудника — когда он работает (день, время начала и окончания)
  2. Исключения доступности — переопределения для конкретных дат
  3. Существующие записи — занятые слоты блокируются
  4. Длительность услуги — длина слота соответствует услуге
  5. Буферное время — добавляется после каждой записи
  6. Настройки организации — лимиты предварительной записи, интервал слотов, минимальный запас времени

Слоты возвращаются с полями start_time, end_time и staff_id доступного сотрудника.

Проверка доступных слотов

Клиенты (и вы, через API) могут проверить слоты:

GET /api/booking/{slug}/slots?service_id=1&date=2026-04-01

Или для диапазона:

GET /api/booking/{slug}/slots/range?service_id=1&start_date=2026-04-01&end_date=2026-04-07

Просмотр календаря

Календарь организации показывает все записи по всем сотрудникам:

GET /api/org/appointments/calendar?start=2026-04-01&end=2026-04-30

Возвращает записи, сгруппированные по датам, — удобно для отрисовки месячного или недельного календаря.

Copyright © 2026