Календарь Битрикс24 доступен через REST-группу calendar.*: можно создавать и изменять события, управлять участниками встреч, повторами по RRULE, секциями календарей и напоминаниями. Ниже — практический разбор методов, полей и типичных ошибок при интеграции внешних систем с календарём портала.
Что умеет группа calendar.*
REST-календарь Битрикс24 покрывает три сущности: события, секции (отдельные календари внутри владельца) и статусы участников встреч. Все методы работают в контексте владельца — пользователя или рабочей группы, — который задаётся парой параметров type и ownerId.
calendar.event.get— список событий за период;calendar.event.add/calendar.event.update— создание и правка;calendar.event.delete— удаление;calendar.event.get.nearest— ближайшие события пользователя;calendar.section.get / add / update / delete— секции календарей;calendar.meeting.status.get / set— приглашение и ответ участника;calendar.accessibility.get— занятость пользователей на интервале;calendar.resource.listиcalendar.resource.booking.list— бронирование ресурсов (переговорок).
Чтение событий: calendar.event.get
Метод возвращает события конкретного владельца за интервал. Обязательны type (user или group), ownerId, а также границы периода from и to в формате YYYY-MM-DD.
Пример запроса на вебхуке:
POST https://portal.bitrix24.ru/rest/1/xxxx/calendar.event.get.json
{ "type": "user", "ownerId": 1, "from": "2026-07-01", "to": "2026-07-31", "section": [12, 15] }
Параметр section ограничивает выборку конкретными секциями. Каждое событие содержит поля ID, NAME, DATE_FROM, DATE_TO, RRULE, ATTENDEE_LIST и служебный PARENT_ID — для повторяющихся серий он указывает на родительское событие.
TZ_FROM / TZ_TO, иначе повторяющиеся события «съедут» на час при переходе на летнее время.Создание события: calendar.event.add
Минимальный набор полей — владелец, интервал и название. Разберём основные параметры в таблице.
| Поле | Назначение |
|---|---|
type, ownerId | Владелец календаря (user/group) |
from, to | Начало и конец, дата или дата-время |
section | ID секции календаря |
name | Заголовок события |
attendees | Массив ID участников встречи |
is_meeting | Y — событие-встреча с приглашениями |
remind | Напоминания: [{ "type": "min", "count": 15 }] |
rrule | Правило повтора (FREQ, INTERVAL, UNTIL) |
color, location | Цвет и место проведения |
Пример создания встречи с напоминанием и участниками:
{ "type": "user", "ownerId": 1, "section": 12, "name": "Демо для клиента", "from": "2026-07-20 15:00:00", "to": "2026-07-20 16:00:00", "is_meeting": "Y", "attendees": [1, 4, 9], "host": 1, "remind": [{"type": "min", "count": 30}] }
Метод возвращает ID созданного события. Если секция не указана, событие попадёт в календарь владельца по умолчанию.
Повторяющиеся события и RRULE
Регулярные встречи задаются объектом rrule по стандарту iCalendar. Основные ключи:
FREQ— периодичность:DAILY,WEEKLY,MONTHLY,YEARLY;INTERVAL— шаг (каждые N периодов);BYDAY— дни недели для еженедельных серий (MO, TU, WE…);COUNTилиUNTIL— ограничение серии по числу или дате.
Планёрка каждый понедельник:
"rrule": { "FREQ": "WEEKLY", "INTERVAL": 1, "BYDAY": ["MO"], "UNTIL": "2026-12-31" }
calendar.event.update передавайте ID конкретного экземпляра и параметр recursion_mode со значением this. Значение all перепишет всю серию, next — текущий и последующие.Участники, статусы и занятость
Для событий-встреч (is_meeting = Y) каждый приглашённый получает уведомление и может подтвердить участие. Управление статусом:
calendar.meeting.status.get— узнать статус участника по событию;calendar.meeting.status.set— установить статус:Q(под вопросом),Y(принял),N(отклонил).
Проверить, свободны ли сотрудники на интервале, до отправки приглашения помогает calendar.accessibility.get:
{ "users": [1, 4, 9], "from": "2026-07-20", "to": "2026-07-20" }
Метод вернёт занятые интервалы по каждому пользователю — удобно для автоподбора свободного слота при интеграции с внешней системой бронирования.
Секции календарей
Секция — это отдельный календарь внутри владельца (например, «Отпуска», «Переговоры», «Личное»). Методы calendar.section.* позволяют создавать их программно и раскладывать события по цветам и правам доступа.
calendar.section.get— список секций владельца;calendar.section.add— создать (поляtype,ownerId,name,color);calendar.section.update— переименовать, сменить цвет;calendar.section.delete— удалить (события внутри тоже удаляются).
calendar.event.get и, при необходимости, переносите их в другую секцию.Итог
Группа calendar.* закрывает полный цикл работы с расписанием: чтение и запись событий, повторы по RRULE, приглашения и статусы участников, проверку занятости и управление секциями. Ключевые риски интеграции — часовые пояса, каскадное удаление секций и режимы правки серий (recursion_mode). Заложите их в архитектуру синхронизации с самого начала.
Если нужно связать календарь Битрикс24 с внешней CRM, системой бронирования или мобильным приложением, мы проектируем такие обмены под ключ: от согласования модели данных до устойчивой обработки очередей и ошибок. Поможем и с разовой интеграцией, и с высоконагруженным сценарием, где события создаются пакетами.
Частые вопросы
В каком формате передавать даты в calendar.event.add?
Для событий на весь день достаточно формата YYYY-MM-DD, для встреч с временем — YYYY-MM-DD HH:MM:SS. Время интерпретируется в часовом поясе владельца календаря.
Как создать повторяющееся событие?
Передайте объект rrule с ключами FREQ, INTERVAL и ограничением COUNT или UNTIL. Например, FREQ=WEEKLY с BYDAY=[MO] создаёт серию по понедельникам.
Чем отличается обычное событие от встречи?
Встреча создаётся с параметром is_meeting=Y и списком attendees. Участники получают приглашение и могут подтвердить участие через calendar.meeting.status.set.
Как изменить только один экземпляр повторяющегося события?
Вызовите calendar.event.update для ID нужного экземпляра с параметром recursion_mode=this. Значение all перепишет всю серию, next — текущий и последующие.
Можно ли узнать занятость сотрудников заранее?
Да, метод calendar.accessibility.get возвращает занятые интервалы по списку пользователей на заданном периоде. Это удобно для автоподбора свободного слота.
Что происходит с событиями при удалении секции?
Секция удаляется вместе со всеми входящими событиями без возможности восстановления из корзины. Перед удалением сохраните или перенесите важные события.
Как задать напоминание о событии?
Передайте массив remind, например [{"type": "min", "count": 15}]. Тип может быть min, hour или day, count — количество единиц до начала.
Поможем с настройкой и поддержкой Для разработчиков
Поможем с настройкой, доработкой и поддержкой Для разработчиков.