Все ноды/Integrations/Calendar
Планирование в календаре
PUT планирующего сообщения (приглашение/ответ/отмена) в настроенный outbox.
Тип в графе: calendar_schedule
Exec
Можно включить ветку ошибки (expose_error_output) и обработать сбой отдельным путём.
Порты можно разделить на исполнение и данные (split ports).
Как попробовать
Минимальный рабочий воркфлоу
- Исполнение
- Данные
- Исполнение + данные
Перед запуском выберите своё подключение или базу знаний — в графе стоит REPLACE_ME.
Как применять
Отправляет участникам iTIP-сообщение — приглашение, ответ на приглашение или отмену — через планирующий outbox сервера. Событие в календаре нода не создаёт: сначала Записать событие календаря, потом эта нода, чтобы разослать приглашение.
Работает не везде. Нужны две вещи сразу: заполненный «URL исходящих» в CalDAV-подключении и сервер, который поддерживает планирование по RFC 6638. iCloud и Google CalDAV его не поддерживают, и нода отказывает до запроса, называя провайдера; провайдер определяется по базовому URL подключения.
Как это работает
Тело сообщения собирается так же, как в записи события: из полей — обязательны «Заголовок» и «Начало» — либо из готового поля «Тело iCalendar», которое выигрывает у полей, пока оно непустое. Свойство METHOD проставляет сама нода по выбранной операции: приглашение → REQUEST, ответ → REPLY, отмена → CANCEL.
Готовое сообщение кладётся в коллекцию исходящих. На выходе { "ok": true }: это значит, что
сервер принял сообщение к отправке, а не что участники его получили.
Частые ошибки
- Пустой URL исходящих. Нода остановится с кодом
VALIDATION. Поле живёт в настройках интеграции CalDAV, а не на ноде, — поправьте подключение и запустите заново. - Ожидание, что событие появится в календаре. Планирование только рассылает сообщение. Создаёт встречу Записать событие календаря.
- Ответ или отмена без UID исходного события. REPLY и CANCEL адресуются к конкретной встрече:
подставьте её UID в поле «UID события», например
{{ nodes.<get>.output.summary.uid }}, иначе получатели увидят постороннее сообщение. - Не заполнен организатор. Большинство серверов требуют ORGANIZER у приглашения и отвергают сообщение без него. Поле — в разделе дополнительных.
- Некому отправлять. Без участников сообщение уходит в никуда: адреса перечисляются в поле «Участники» через запятую или с новой строки.
Входы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Calendar storecalendar_store | Данныеdata | — | обязателен |
Выходы
| Порт | Провод | Данные | Примечания |
|---|---|---|---|
Successoutput | Исполнение + данныеexecute_data | object | |
Erroron_error | Исполнение + данныеexecute_data | — | показывается, когда expose_error_output = true |
Настройки
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
Подключение CalDAVconnection_id | string | "" | Сохранённое подключение CalDAV из воркспейса: простому календарному воркфлоу не нужна отдельная нода CalDAV Config. Нода, подключённая к порту 'calendar_store', имеет приоритет над этим полем. подключение: caldavперекрывается портом: calendar_store |
Операция планированияoperation | string | invite | Метод iTIP, который отправляется: приглашение (REQUEST), ответ (REPLY) или отмена (CANCEL). Требуется подключение с URL планирующего outbox; iCloud и Google CalDAV планирование не реализуют вовсе. Варианты: |
Тело событияbody_mode | string | fields | Как формируется тело iCalendar: из полей ниже или из готового iCalendar-документа. Непустое сырое тело используется независимо от этой настройки. Варианты: |
Заголовокsummary | string | "" | Заголовок события (SUMMARY). Обязателен при сборке из полей. поддерживает шаблоны показывается при body_mode = fields |
Началоdtstart | string | "" | Начало, ISO 8601 (2026-07-01T10:00:00Z) или просто дата (2026-07-01) для события на весь день. Обязательно при сборке из полей. поддерживает шаблоны показывается при body_mode = fields |
Окончаниеdtend | string | "" | Конец, ISO 8601. Пусто — длительность определяет сервер. поддерживает шаблоны показывается при body_mode = fields |
Событие на весь деньall_day | boolean | false | Записать DTSTART/DTEND как даты (VALUE=DATE), а не как время. показывается при body_mode = fields |
Местоlocation | string | "" | Место в свободной форме (LOCATION), например название переговорной или ссылка на встречу. поддерживает шаблоны показывается при body_mode = fields |
Описаниеdescription | string | "" | Текст описания события (DESCRIPTION). поддерживает шаблоны показывается при body_mode = fields |
Тело iCalendarics | string | "" | Готовый iCalendar-документ (VCALENDAR с одним VEVENT). Пока он непустой, он выигрывает у полей выше — очистите его, чтобы вернуться к сборке из полей. Обязан содержать UID и DTSTAMP: без них серверы отклоняют событие. поддерживает шаблоны |
| Дополнительно | |||
Часовой поясtimezone_id | string | "" | Часовой пояс IANA для времени, заданного без смещения, например Europe/Moscow. Пусто — такое время считается UTC. поддерживает шаблоны показывается при body_mode = fields |
Правило повторенияrrule | string | "" | RRULE по RFC 5545 без имени свойства, например FREQ=WEEKLY;BYDAY=MO;COUNT=10. Пусто — одиночное событие. поддерживает шаблоны показывается при body_mode = fields |
Участникиattendees | string | "" | Адреса email через запятую или с новой строки. Записываются как свойства ATTENDEE. поддерживает шаблоны показывается при body_mode = fields |
Организаторorganizer | string | "" | Email организатора (ORGANIZER). Большинство серверов требуют его для приглашений. поддерживает шаблоны показывается при body_mode = fields |
UID событияevent_uid | string | "" | Постоянный идентификатор события. Пусто — будет сгенерирован. Чтобы обновить или отменить существующее событие, укажите его UID. поддерживает шаблоны показывается при body_mode = fields |
Статусevent_status | string | none | Свойство STATUS события. «Не задан» — свойство в событие не пишется. Варианты: показывается при body_mode = fields |
Общие поля
Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.
expose_error_output— Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этого шага.split_ports_in— Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.split_ports_out— Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.