Как я сделал Яндекс.Календарь хабом всех событий, а Алису — утренним ассистентом

Как я сделал Яндекс.Календарь хабом всех событий, а Алису — утренним ассистентом

🎛 Дано:

✅ macOS

✅ Яндекс.Станция + аккаунт Яндекс

✅ Google Календарь (личный)

✅ MS Exchange за рабочим VPN

🎯 Задача:

Собрать все события в Яндекс.Календаре и заставить Алису с утра рассказывать, что меня ждёт сегодня.

🔹 Часть 1. Подключаем Google Календарь к Яндексу

Google Календарь — удобный инструмент с кучей интеграций. Если у тебя его ещё нет — советую завести.

1 Открываем Google Календарь.

2 Нажимаем ... напротив нужного календаря → Настройки календаря.

3 Ищем Закрытый адрес в формате iCal, копируем ссылку.

4 Открываем Яндекс.Календарь.

5 Жмём Новая подписка → вставляем iCal ссылку → задаём имя.

6 Ждём немного — встречи подтянутся автоматически.

✅ PROFIT: теперь личные события из Google синкаются с Яндекс.Календарём.

🔹 Часть 2. Подключаем рабочий MS Exchange через Mac

Тут придётся немного поковыряться, но оно того стоит.

1 В Google Календаре создаём отдельный календарь под рабочие события.

2 В Яндексе создаём пароль для CalDAV (Настройки → Пароли приложений).

3 В macOS → Настройки → Учётные записи интернета → Добавить CalDAV.

4 Вводим email от Яндекса, пароль — тот самый CalDAV.

5 В Календаре на Mac появится Яндекс.Календарь.

6 Подключаем рабочую почту на Mac, если ещё не сделали это.

🔹 Часть 3. Автоматическая синхронизация событий через AppleScript

Здесь начинается магия ✨

1 Открываем Automator (Cmd + Пробел, ищем).

2 Создаём новую Программу.

3 Добавляем действие Запустить AppleScript.

4 Вставляем код:

tell application "Calendar" set sourceCalendar to calendar "OWA" set targetCalendar to calendar "Yandex" set sourceEvents to every event of sourceCalendar repeat with evt in sourceEvents tell targetCalendar set eventSummary to summary of evt set eventStart to start date of evt set eventEnd to end date of evt if eventSummary is not missing value and eventStart is not missing value and eventEnd is not missing value then set existingEvents to (every event whose summary is eventSummary and start date is eventStart) if existingEvents is {} then make new event at end with properties {summary:eventSummary, start date:eventStart, end date:eventEnd} end if end if end tell end repeat reload calendars end tell

📌 OWA — откуда тянем события (рабочий календарь).

📌 Yandex — куда их записываем.

5 Сохраняем как SyncCalc.app. Можно запускать вручную, но лучше автоматизировать.

🔹 Часть 4. Автоматический запуск

1 Открываем терминал и создаём файл:

nano ~/Library/LaunchAgents/com.user.syncCalendars.plist

2 Вставляем:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.user.syncCalendars</string> <key>ProgramArguments</key> <array> <string>/usr/bin/open</string> <string>/твой путь самурай/SyncCalc.app</string> </array> <key>StartInterval</key> <integer>3600</integer> </dict> </plist>

⌨ Сохранить: Ctrl + X, потом Y, потом Enter.

✅ Теперь календарь будет синкаться автоматически каждый час!

🔹 Часть 5. Настраиваем Алису

1 Открываем Календари в приложении Дом с Алисой.

🔥 Готово! Теперь все календари собраны в одном месте, а Алиса стала настоящим ассистентом.

Начать дискуссию