Календарь в Apple Calendar, Outlook и CalDAV
Актуально для: SimpleTwo 0.9.x · Проверено: 01.10.2026
Календарь платформы читается не только нашим приложением: подписанный Outlook обновляет подписку по своему расписанию, CalDAV-клиент опрашивает сервер сам. Именно поэтому служба календаря стоит рядом с чатом, а не внутри него, и именно поэтому у неё публичное имя.
Три способа подключить сторонний клиент, от простого к полному:
| Способ | Что даёт | Направление | Кому |
|---|---|---|---|
| ICS-подписка | календарь виден в любом клиенте, понимающем webcal:// | только чтение | Apple Calendar, Outlook, Google Calendar, экран в переговорной |
| CalDAV | учётная запись календаря целиком: список календарей, события, свободно/занято | чтение (запись — по мере готовности, см. ниже) | Apple Calendar на macOS/iOS, Thunderbird, любой CalDAV-клиент |
| CardDAV — каталог | корпоративный каталог как адресная книга | только чтение | те же клиенты, отдельная настройка |
| CardDAV — ваши книги | личные адресные книги и книги команды, в той же учётной записи, что и CalDAV | чтение и запись | те же клиенты, та же учётная запись |
1. ICS-подписка — самый короткий путь
Подписка выдаётся на конкретный календарь и содержит секрет в самой ссылке. Секрет показывается один раз: ротация выдаёт новую ссылку и обесценивает прежнюю.
Получить ссылку:
curl -fsS -X POST "https://dir.<домен>/cal/v1/calendars/<id>/subscriptions" \
-H "Authorization: Bearer $TOKEN" \
-H 'Content-Type: application/json' \
-d '{"label":"Мой ноутбук"}'
В ответе две ссылки на один и тот же ресурс:
{
"calendar_id": "cal-…",
"url": "https://dir.<домен>/cal/v1/calendars/cal-…/subscribe.ics?key=…",
"webcal_url": "webcal://dir.<домен>/cal/v1/calendars/cal-…/subscribe.ics?key=…",
"note": "shown once — rotating replaces it"
}
Разница между ними практическая: https:// клиент скачает как файл, а webcal://
воспримет как подписку и будет обновлять. Apple Calendar и Outlook ждут именно второй.
В ней нет пароля и нет вашей сессии: кто получил ссылку, тот видит календарь. Поэтому
выдавайте по одной на устройство с понятной меткой — так отзыв не ломает остальные, — и не
кладите её в общий чат. Отозвать: DELETE /v1/credentials/{id}.
Apple Calendar (macOS). Файл → Новая подписка на календарь → вставить webcal://… →
частота обновления 15 минут. Оповещения от подписки лучше выключить: они дублируют
напоминания, которые уже приходят пушем в SimpleTwo Connect.
Apple Calendar (iOS). Настройки → Приложения → Календарь → Учётные записи → Добавить → Другое → Подписной календарь → вставить ссылку.
Outlook (новый и веб). Календарь → Добавить календарь → Подписаться из интернета →
вставить https://…-вариант.
Экран в переговорной. У календаря-ресурса та же выдача возвращает ещё и адрес панели
(now_url): панель на стене — не подписчик, она спрашивает «что здесь сейчас». Один
секрет открывает и подписку, и панель.
2. CalDAV — учётная запись, а не один календарь
CalDAV даёт клиенту всё сразу: список календарей, события, свободно/занято. Обнаружение работает штатно, поэтому в клиенте достаточно ввести имя сервера и учётные данные.
| Что | Значение |
|---|---|
| Сервер | dir.<домен> |
| Адрес обнаружения | https://dir.<домен>/.well-known/caldav |
| Корень | https://dir.<домен>/dav/ |
| Пользователь | ваш логин в SimpleTwo |
| Пароль | пароль приложения из портала identity с областью «календари (CalDAV)» — см. ниже; сессионный токен и пароль домена здесь не подходят |
Apple Calendar (macOS). Настройки → Учётные записи → добавит ь CalDAV → тип «Вручную» →
имя пользователя, пароль приложения, сервер dir.<домен>.
Какой пароль вводить: пароль приложения identity
Вход сторонних программ по протоколам — почта (JMAP, SMTP), календари (CalDAV), контакты (CardDAV) — один на всю платформу: пароль приложения, который человек сам создаёт в портале identity (раздел «Пароли приложений»). У каждого пароля свои области, по одной на протокол:
| Область в портале | Что открывает |
|---|---|
«календари (CalDAV)», caldav | календари и приглашения в службе календаря |
«контакты (CardDAV)», carddav | ваши адресные книги в службе календаря и каталог организации |
«чтение почты», jmap · «отправка почты», smtp | почту |
Для телефона, где одна учётная запись CalDAV даёт и календари, и книги, отметьте обе области. Пароль показывается один раз, отзывается отдельно от остальных и не раскрывает ваш основной пароль. Неверные попытки считаются в блокировку учётной записи так же, как неверный пароль на странице входа, а каждый вход виден вам в «Последних входах» портала. Пароли приложений включает администратор организации в консоли, в разделе «Безопасность → Требования ко входу»; пока они выключены, пункта в портале нет.
Пароли устройств календаря и переключатель dav_auth. Раньше пароль для CalDAV выдавала
сама служба календаря (POST /v1/credentials, «пароль устройства»). Переход на пароли
приложений идёт в два шага, и порядок важен:
- Пока переключатель
dav_authу администратора в положенииcalendar(так по умолчанию), служба календаря принимает и старые пароли устройств, и пароли приложений identity. В это время каждый создаёт пароль приложения и заменяет им пароль в своих программах — ничего не ломается, обе схемы работают рядом. - Администратор переводит
dav_authвidentity(консоль координатора,PUT /admin/api/settings/dav-authс{"mode":"identity"}). С этого момента CalDAV и CardDAV службы календаря принимают от людей только пароли приложений; пароль устройства получает отказ с объяснением, новые пароли устройств больше не выдаются (POST /v1/credentialsотвечает 409). Переключатель не встанет вidentity, пока identity не развёрнут или пароли приложений в нём выключены, и сам напоминает, что пароли нужно создать заранее. Вернутьcalendarможно всегда — старые пароли устройств снова заработают.
Перенести старые пароли автоматически нельзя: служба хранит только их отпечатки. Подписки (ICS-ссылки из §1) и панели переговорных — не вход человека, переключатель их не касается.
Что умеет учётная запись CalDAV (с directory 0.71.0 — полный набор, который ждёт
Apple Calendar на macOS и iOS):
| Возможность | Как работает |
|---|---|
| Календари, события, серии, исключения | чтение и запись; sync-collection, calendar-query, calendar-multiget, free-busy-query |
| Приглашения | сервер рассылает их сам (RFC 6638, calendar-auto-schedule): участник видит приглашение во входящих планирования и в своём календаре со статусом «не подтверждено» |
| При нять / отклонить / под вопросом | ответ уходит организатору; в его календаре у участника меняется статус |
| Отмена встречи | организатор удаляет событие — участники получают уведомление, встреча у них показывается отменённой до подтверждения; удаление участником — выход из встречи, а не отмена |
| Предложить другое время | участник переносит встречу в своём календаре — организатору уходит предложение (iTIP COUNTER), сама встреча не двигается; организатор принимает или отклоняет в клиенте SimpleTwo |
| Напоминания | будильники (VALARM) хранятся у каждого участника свои и переживают правки организатора |
| Имя и цвет календаря | задаются в свойствах календаря в клиенте (PROPPATCH) |
| Делегирование | календари, выданные вам на чтение или запись, видны в учётной записи и перечислены как делегирование (calendar-proxy) |
| Адресные книги | CardDAV в той же учётной записи — см. §4 |
| Поиск участников | поле «Приглашённые» ищет людей и переговорные по каталогу (principal-property-search), с той же областью видимости, что поиск в приложениях (с directory 0.72.0) |
| Внешние гости | участник с адресом вне организации получает приглашение и отмену письмом из почтового ящика организатора — если у организатора есть почта (продукт Mail); без ящика письмо не уходит (с directory 0.72.0 и mail 0.89.0) |
| Непринятые отмены | отменённая встреча, которую участник не открыл, уходит из его календаря сама через 30 дней |
| Задачи | списки Apple Reminders (VTODO): список создаётся из клиента, задачи с датой, приоритетом, статусом и напоминаниями хранятся в той же службе (с directory 0.73.0) |
| Вложения | файл, прикреплённый к встрече или задаче в клиенте, хранится в службе (до 25 МБ файл, до 100 МБ на запись) и доступен всем участникам по ссылке из записи; файлы лежат в объектном хранилище (роль s3 или своё хранилище организации, бакет simpletwo-calendar), зашифрованы, без него вложения выключены (с directory 0.73.0) |
Чего нет: заметок (Apple Notes синхронизируются не по CalDAV, а по IMAP) и push-уведомлений: Apple Calendar принимает push только от серверов Apple, сторонний сервер его дать не может, поэтому клиент опрашивает сервер с интервалом из своих настро ек (по умолчанию 15 минут, можно поставить минуту).
CalDAV по умолчанию выключен: это настройка организации, а не отдельного сервера. Включает
администратор в консоли координатора: Настройки → карточка «CalDAV и CardDAV» → «Включить
CalDAV». Каждый хост роли directory применяет её при следующем опросе (около минуты) и
перезапускает службу; состояние видно в /cal/healthz роли как caldav.
Потому что у половины сотрудников календарь уже открыт в другой программе, и просить их смотреть расписание в двух местах — верный способ получить расписание, которое никто не ведёт. Сервер отдаёт то же, что видит наш клиент, с теми же правами.
3. CardDAV — адресная книга организации
Коллеги находятся в телефоне штатным поиском по контактам, включая набор номера: в той же учётной записи CardDAV, что и личные книги (§4), есть книга «Адресная книга организации». Отдельную учётную запись заводить не нужно.
| Что | Значение |
|---|---|
| Адрес обнаружения | https://dir.<домен>/.well-known/carddav |
| Книга | https://dir.<домен>/dav/addressbooks/<логин>/_organisation/ |
| Пользователь и пароль | те же, что в §4 |
Кого в ней видно, решают политики адресной книги — то же правило, что для поиска в приложении SimpleTwo (Группы — «Глобальная адресная книга»). Гость, которому группа ограничила видимость, видит в телефоне ровно тех, кого видит в приложении. В книгу не попадают: те, кого человек знает только по переписке (в приложении они находятся по имени), отключённые учётки, боты, переговорки и сам человек. Учётку, скрытую из адресной книги, находят только по точному адресу — в этом списке её нет.
Книга только для чтения: это отражение каталога, и запись сотрудника исправляют там, где она заведена.
4. Личные и общие адресные книги — CardDAV рядом с календарями
С 28.09.2026 адресные книги человека живут в службе календаря — так же, как в связке Active Directory и Exchange: каталог (сотрудники, группы и контакты организации) остаётся в службе идентификации, а то, что лежит «в ящике» у человека, — его книги и книги команды — у календаря. Поэтому одна учётная запись CalDAV в телефоне даёт и календари, и эти книги: адрес обнаружения и пользователь те же, что в §2, а у пароля приложения должна быть отмечена область «контакты (CardDAV)».
| Что | Значение |
|---|---|
| Адрес обнаружения | https://dir.<домен>/.well-known/carddav |
| Ваши книги | https://dir.<домен>/dav/addressbooks/<логин>/ |
| Одна книга | https://dir.<домен>/dav/addressbooks/<владелец>/<id-книги>/ |
| Пользователь и пароль | ваш логин и пароль приложения identity с областью «контакты (CardDAV)»; до переключения dav_auth подходит и пароль устройства календаря |
Что нужно знать:
- Книга, которой с вами поделились, видна в списке рядом с вашими, по адресу её владельца.
Писать в неё можно, если владелец дал доступ
write; иначе клиент покажет её только для чтения. - Пароль приложения identity — это вы. С ним действуют ваши собственные права на книги и
календари. Старый пароль устройства календаря ограничивает сверху: выданный на уровне
fullчитает книги, но не пишет в них — даже в собственную; для записи нужен уровеньwrite. - Книги, выданные группе, по CardDAV пока не видны: пароль называет человека, но не его группы. В приложении SimpleTwo такие книги видны.
- Контакт — это указател ь на человека. Карточка без адреса почты, телефона и логина
(
X-SIMPLETWO-USER) не сохраняется: сервер ответит отказомvalid-address-data. Всё остальное, что пишет телефон — фото, несколько адресов, подписи полей, — хранится как есть и возвращается клиенту без потерь. - Новую книгу создают в приложении, а не в клиенте CardDAV: у книги должно быть имя и идентификатор, который выдаёт сервер.
- Содержимое книг зашифровано на диске ключом, который служба календаря получает от
координатора и держит только в памяти.
/healthzслужбы показываетbooks_sealed.
Каталог (§3) и книга организации остаются там, где были: это объекты каталога, а не личные данные.
Что делать, когда не работает
| Симптом | Причина |
|---|---|
| Клиент скачал один файл и больше не обновляет | взяли https://-ссылку вместо webcal:// |
| Подписка пустая | у ссылки уровень доступа, при котором календарь виден без содержимого, либо в календаре действительно нет записей в окне подписки |
| CalDAV не логинится с рабочим паролем | пароль домена здесь не подходит: нужен пароль приложения из портала identity, имя пользователя — логин |
После переключения dav_auth телефон перестал синхронизироваться | старый пароль устройства больше не принимается: создайте пароль приложения в портале identity и замените пароль в учётной записи — см. §2 |
| Календари синхронизируются, а книги — нет (или наоборот) | у пароля приложения не отмечена нужная область: «календари (CalDAV)» или «контакты (CardDAV)» |
| Отказ «учётная запись заблокирована до …» | слишком много неверных попыток подряд; блокировка общая с входом в портал, дождитесь указанного времени |
| Событие, созданное в Apple Calendar, не появилось в SimpleTwo | CalDAV в этой установке выключен — Настройки → «CalDAV и CardDAV», см. §2 |
| Apple Calendar не предлагает «Принять/Отклонить» на приглашении | клиент не увидел calendar-auto-schedule: учётная запись создана до directory 0.71.0 — удалите и добавьте е ё заново |
| Перенёс чужую встречу в своём календаре, а у остальных она не сдвинулась | так и задумано: перенос участником — предложение другого времени организатору, двигает встречу только организатор |
| Ссылка перестала работать после ротации | так и задумано: ротация обесценивает прежний секрет, выдайте новую подписку |
| Телефон не сохраняет контакт в книгу | в карточке нет ни почты, ни телефона, либо старый пароль устройства выдан без права записи, либо книгой с вами поделились только на чтение — см. §4 |
| Книга, выданная группе, не видна в телефоне | так сейчас устроено: по CardDAV видны книги, выданные лично вам — см. §4 |
| Клиент не находит сервер по имени | не отвечает /.well-known/caldav: проверьте, что имя dir.<домен> заведено в DNS и у службы есть сертификат |