# Рабочие часы ресурса

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

Битрикс24 API: `booking.v1.resource.slots.list`, `booking.v1.resource.slots.set`, `booking.v1.resource.slots.unset`
Скоуп: `booking`

## Операции

- [Получить рабочие часы ресурса](./slots-list.md) — `GET /v1/booking-resources/:id/slots`
- [Задать рабочие часы ресурса](./slots-set.md) — `PUT /v1/booking-resources/:id/slots`
- [Снять рабочие часы ресурса](./slots-delete.md) — `DELETE /v1/booking-resources/:id/slots`

## Ключевые поля

Рабочие часы состоят из интервалов. Поля одного интервала приходят в каждом элементе `data.slots` ответа чтения и передаются в теле записи. ID ресурса для всех трёх методов — из списка [`GET /v1/booking-resources`](/docs/entities/booking-resources/list).

| Поле | Описание |
|------|----------|
| `from` | Начало интервала в минутах от полуночи: `600` — 10:00 |
| `to` | Конец интервала в минутах от полуночи, больше `from` и не больше `1440` |
| `weekDays` | Дни недели интервала: `Mon`, `Tue`, `Wed`, `Thu`, `Fri`, `Sat`, `Sun` |
| `slotSize` | Длительность одного слота записи в минутах, не меньше `1` |
| `timezone` | Часовой пояс, в котором заданы `from` и `to`, — имя из базы часовых поясов IANA, например `Europe/Moscow` |
| `id` | ID интервала. Приходит только в ответе чтения и меняется при каждой записи |

## Что нужно знать перед работой

1. **Запись заменяет все рабочие часы.** [`PUT /v1/booking-resources/:id/slots`](./slots-set.md) удаляет прежние интервалы и создаёт переданные заново, с новыми `id`. Чтобы добавить один интервал, прочитайте текущие, добавьте новый и запишите весь набор. Пустой массив `slots` снимает все рабочие часы, как и [`DELETE /v1/booking-resources/:id/slots`](./slots-delete.md).
2. **Ресурс с рабочими часами не правится.** Правка ресурса стирает рабочие часы, поэтому [`PATCH /v1/booking-resources/:id`](/docs/entities/booking-resources/update) при заданных часах отвечает `422 BOOKING_RESOURCE_SCHEDULE_CONFLICT` и ресурс не меняет. Порядок такой: снять часы, изменить ресурс, задать часы заново. Не задавайте часы параллельно с правкой: часы, записанные между проверкой и самой правкой, сотрутся, а оба запроса ответят успехом.
3. **Ошибка в значениях не меняет рабочие часы.** `slotSize` меньше `1`, смещение вместо имени часового пояса и тело без массива `slots` отклоняются кодом `400 INVALID_PARAMS`. Ошибка в диапазоне времени или днях недели отвечает `422 BITRIX_ERROR`. В обоих случаях прежние рабочие часы остаются.
4. **Ключ только для чтения читает рабочие часы.** Запись и снятие с таким ключом отвечают `403 WRITE_BLOCKED_READONLY_KEY`.

## Типичный сценарий

1. Найти ресурс: [`GET /v1/booking-resources`](/docs/entities/booking-resources/list) — или создать его: [`POST /v1/booking-resources`](/docs/entities/booking-resources/create).
2. Прочитать текущие рабочие часы: [`GET /v1/booking-resources/:id/slots`](./slots-list.md).
3. Записать весь набор интервалов: [`PUT /v1/booking-resources/:id/slots`](./slots-set.md).
4. Перед правкой ресурса снять часы: [`DELETE /v1/booking-resources/:id/slots`](./slots-delete.md). Затем изменить ресурс: [`PATCH /v1/booking-resources/:id`](/docs/entities/booking-resources/update) — и снова записать часы.

## Лимиты

| Лимит | Значение |
|-------|----------|
| Частота запросов | 60 запросов в минуту на портал для каждого из трёх методов, все API-ключи портала делят один лимит. Действующее значение — в заголовке `x-ratelimit-limit`: потолок делится между репликами сервиса |
| Пагинация чтения | Нет: [`GET /v1/booking-resources/:id/slots`](./slots-list.md) возвращает все интервалы ресурса за один вызов |
| Ресурсов за один вызов | Один — ресурс из пути запроса. Рабочие часы нескольких ресурсов записываются отдельными вызовами |

## Смотрите также

- [Список ресурсов бронирования](/docs/entities/booking-resources/list)
- [Получить ресурс бронирования](/docs/entities/booking-resources/get)
- [Обновить ресурс бронирования](/docs/entities/booking-resources/update)
- [Типы ресурсов бронирования](/docs/entities/booking-resource-types)
- [Бронирования](/docs/entities/bookings)
- [Лимиты и оптимизация](/docs/optimization)
