Все ноды/Integrations/Calendar

Календарь: создать или заменить событие

PUT ресурса iCalendar (создание без etag, обновление с If-Match).

Календарь: создать или заменить событие▶
Подключение CalDAVИтог действия
Ошибка

Тип в графе: calendar_put_event

Exec

Можно включить выход ошибки и обработать сбой отдельным путём.

Порты можно разделить на исполнение и данные (split ports).

Как попробовать

Минимальный рабочий сценарий

Вход
Календарь: создать или заменить событие▶
Календарь: подключение CalDAV
Выход▶
  • Исполнение
  • Данные
  • Исполнение + данные
Нажмите «Скопировать ноды», откройте редактор и нажмите Ctrl+V на холсте.

Перед запуском выберите своё подключение или базу знаний — в графе стоит REPLACE_ME.

Как применять

Создаёт ресурс календаря или заменяет его целиком. Для правки одного-двух полей существующего события берите Изменить событие календаря: здесь запись перезаписывает объект полностью, и всё, чего нет в теле, из события исчезнет.

Как это работает

Тело собирается из полей — обязательны «Заголовок» и «Начало» — либо берётся готовым из поля «Тело iCalendar». Непустое сырое тело выигрывает всегда, независимо от переключателя «Тело события»: чтобы вернуться к сборке из полей, очистите его.

Сборщик подставляет UID и DTSTAMP, если их нет: без этих свойств серверы отклоняют событие. Время без смещения считается UTC, а с заполненным часовым поясом остаётся локальным и уезжает с TZID. «Событие на весь день» пишет даты вместо времени. Правило повторения задаётся без имени свойства (FREQ=WEEKLY;BYDAY=MO;COUNT=10); правило без FREQ отвергается до запроса.

Поле «Ссылка на событие» — путь ресурса. Для нового события выберите свободный путь внутри коллекции, оканчивающийся на .ics.

Пустой ETag означает «создать или перезаписать безусловно». Непустой превращается в условие: если событие изменилось с момента выдачи токена, сервер ответит 412, а нода остановится с error_code PRECONDITION_FAILED. На выходе href и etag — новый, назначенный сервером; если сервер не прислал его в ответе, нода перечитывает ресурс. Цепочка «создать → обновить» берёт {{ nodes.<put>.output.etag }}.

Частые ошибки

  • Запись по существующему адресу стирает поля. Участники, описание, повторение, которых нет в отправленном теле, пропадут. Точечная правка — это патч.
  • Пустой UID означает новое событие. Даже по тому же адресу: чтобы обновить существующее, подставьте его UID из Получить событие календаря.
  • Участники в теле — не приглашения. Свойство ATTENDEE никого не уведомляет; рассылку делает Планирование в календаре через outbox.
  • Тело, сочинённое моделью. В сгенерированном iCalendar обычно нет UID и DTSTAMP, и сервер отвергает такой объект. Отдавайте модели отдельные поля, а тело собирайте нодой.
  • etag на выходе пустой. Редкий сервер не возвращает токен ни в ответе, ни при перечитывании; тогда следующее обновление придётся делать без проверки на конфликт.

Входы

ПортПроводДанныеПримечания
Подключение CalDAVcalendar_storeДанныеdata—

обязателен

Выходы

ПортПроводДанныеПримечания
Итог действияoutputИсполнение + данныеexecute_dataobject
Ошибкаon_errorИсполнение + данныеexecute_data—

показывается, когда expose_error_output = true

Настройки

ПолеТипПо умолчаниюОписание
Подключение CalDAVconnection_idstring""

Сохранённое подключение CalDAV из пространства: простому календарному сценарию не нужна отдельная нода «Календарь: подключение CalDAV». Нода, подключённая к порту «Подключение CalDAV», имеет приоритет над этим полем.

подключение: caldavперекрывается портом: calendar_store

Ссылка на событиеhrefstring""

Путь или абсолютный URL объекта календаря — ровно в том виде, в каком его вернула нода «Календарь: найти события» или «Календарь: получить события» ({{ nodes.<query>.output.events[0].href }}). Относительный путь разрешается относительно базового URL подключения. Пример: /remote.php/dav/calendars/user/personal/9f1c-1234.ics Для нового события, собранного из полей, оставьте пусто — нода назовёт ресурс по UID события; при «Сыром iCalendar» путь обязателен (новый путь, оканчивающийся на .ics). Заполните его, чтобы обновить существующее: запись по пути, где уже лежит событие, ЗАМЕНЯЕТ то событие.

поддерживает шаблоны

Формат событияbody_modestringfields

Как формируется тело iCalendar: из полей ниже или из готового iCalendar-документа. Непустое сырое тело используется независимо от этой настройки.

Варианты: fields — Собрать из полей, raw — Сырой iCalendar

Заголовокsummarystring""

Заголовок события (SUMMARY). Обязателен при сборке из полей.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Началоdtstartstring""

Начало, ISO 8601 (2026-07-01T10:00:00Z) или просто дата (2026-07-01) для события на весь день. Обязательно при сборке из полей.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Окончаниеdtendstring""

Конец, ISO 8601. Пусто — длительность определяет сервер.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Событие на весь деньall_daybooleanfalse

Записать DTSTART/DTEND как даты (VALUE=DATE), а не как время.

показывается при «Формат события» = Собрать из полей

Местоlocationstring""

Место в свободной форме (LOCATION), например название переговорной или ссылка на встречу.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Описаниеdescriptionstring""

Текст описания события (DESCRIPTION).

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Тело iCalendaricsstring""

Готовый iCalendar-документ (VCALENDAR с одним VEVENT). Пока он непустой, он выигрывает у полей выше — очистите его, чтобы вернуться к сборке из полей. Обязан содержать UID и DTSTAMP: без них серверы отклоняют событие.

поддерживает шаблоны

Дополнительно
Версия (ETag)etagstring""

Токен оптимистичной блокировки из предыдущего Get/Query/Put по этому же ресурсу. Пусто — ресурс создаётся (или перезаписывается безусловно). Если ресурс изменился с момента выдачи токена, сервер отвечает 412, и нода падает с error_code=PRECONDITION_FAILED. Ноды Put/Patch возвращают НОВЫЙ etag, поэтому в цепочке создание → обновление берите {{ nodes.<put>.output.etag }}.

поддерживает шаблоны

Часовой поясtimezone_idstring""

Часовой пояс IANA для времени, заданного без смещения, например Europe/Moscow. Пусто — такое время считается UTC.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Правило повторенияrrulestring""

RRULE по RFC 5545 без имени свойства, например FREQ=WEEKLY;BYDAY=MO;COUNT=10. Пусто — одиночное событие.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Участникиattendeesstring""

Адреса email через запятую или с новой строки. Записываются как свойства ATTENDEE.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Организаторorganizerstring""

Email организатора (ORGANIZER). Большинство серверов требуют его для приглашений.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

UID событияevent_uidstring""

Постоянный идентификатор события. Пусто — будет сгенерирован. Чтобы обновить или отменить существующее событие, укажите его UID.

поддерживает шаблоны

показывается при «Формат события» = Собрать из полей

Статусevent_statusstringnone

Свойство STATUS события. «Не задан» — свойство в событие не пишется.

Варианты: none — Не задан, CONFIRMED — Подтверждено, TENTATIVE — Предварительно, CANCELLED — Отменено

показывается при «Формат события» = Собрать из полей

Общие поля

Эти три поля есть у каждой ноды: платформа добавляет их сама, а не автор ноды.

  • expose_error_output — Если включено, показывает выход выполнения для подключения нод, которые запускаются при сбое этой ноды.
  • split_ports_in — Показывать отдельные порты входа для выполнения и данных вместо одного объединённого.
  • split_ports_out — Показывать отдельные порты выхода для выполнения и данных вместо одного объединённого.

Готовые примеры с этой нодой