Услуги и расписание
Услуги
Услуги — это то, на что можно записаться в вашей организации. У каждой услуги своя длительность, цена и список сотрудников, которые могут её оказать.
Создание услуги
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"
}
Справочник полей:
| Поле | Тип | Описание |
|---|---|---|
name | string | Название услуги, которое видят клиенты |
description | string | Краткое описание (1–3 предложения) |
duration | integer | Длительность в минутах |
price | integer | Цена в минимальных единицах валюты |
category_id | integer | Категория для группировки (опционально) |
buffer_time | integer | Промежуток после записи в минутах (уборка, дорога) |
color | string | HEX-цвет для отображения в календаре |
prepay_required | boolean | Требовать оплату при записи |
prepay_amount | integer | Фиксированная сумма депозита (если prepay_required) |
max_advance_days | integer | За сколько дней вперёд можно записаться на эту услугу |
min_lead_hours | integer | Минимум часов до записи |
is_active | boolean | Видна ли услуга и доступна ли для записи |
Категории услуг
Группируйте услуги по категориям, чтобы страница записи была лучше организована:
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— существующие записи сохраняются, их можно перенести - Исключения имеют приоритет над обычным расписанием на свою дату
Как рассчитываются слоты
Калькулятор слотов учитывает:
- Расписание сотрудника — когда он работает (день, время начала и окончания)
- Исключения доступности — переопределения для конкретных дат
- Существующие записи — занятые слоты блокируются
- Длительность услуги — длина слота соответствует услуге
- Буферное время — добавляется после каждой записи
- Настройки организации — лимиты предварительной записи, интервал слотов, минимальный запас времени
Слоты возвращаются с полями 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
Возвращает записи, сгруппированные по датам, — удобно для отрисовки месячного или недельного календаря.