KamoCRM

Реальная внешняя синхронизация календаря и контактов — Google, Microsoft 365, iCloud, CalDAV/CardDAV

FeatureEmailService
Отгружено
15 ноября 2026 г. в 10:00 UTC
Автор
Kamo
Завершение
3b85588

Настройки › Электронная почта › CalDAV/CardDAV сохранял внешние соединения и показывал synced" для синхронизации, которая ничего не извлекла (задания DaemonService сбились с счетчиков и обозначил все как НЕДЕЙСТВУЮЩЕЕ; классы провайдеров были TODO) синхронизирует их на самом деле (групповая работа/синхронизация): - CalDAV/CardDAV: обнаружение (адрес → основной → домашний набор → коллекции, /.известный резерв, работает вставленный адрес одного календаря), CTag/sync-token check, calendar-query ETag перечень (за последние 366 дней), multiget изменений, PUT/DELETE с If-Match/If-None-Match. iCloud по умолчанию использует адреса. - Google Calendar + Люди, Microsoft График календари + контакты на грант /oauth поток хранит; обновленные токены (и повернутые обновленные токены сохраняются) с запись, которая заменяет только обновленный ею плотный объект. - События посадки через IcsImportService.upsert (серии, исключения, EXDATEs) и контакты через ContactService + ContactDetailStore — нет приглашений, нет напоминания, никакие необработанные записи таблицы. - Бухгалтерия по коллекции/элементу (новые таблицы groupware_sync_*) дает обновления, удаления и двусторонние: сначала потяните (внешнее копирование выигрывает ничью), затем нажмите Kamo редактирование/создание/удаление, когда интеграция двусторонняя и коллекция охранники: ничего не удалено из неудачного или подозрительно пустого списка, ничего Kamo не импортировал, ничего, что только стареет из окна; пропуск что удалило бы большую часть коллекции там отказывается. - Состояние честно: SYNCING во время работы, IDLE + lastSyncedAt только после полного fetch, ERROR + plain-words errorMessage в противном случае; написано столбец за столбцом так изменения участника в середине прохождения сохраняются полезной нагрузки настроек (syncSupported, calendarsSynced, eventsSynced, addressBooksSynced, contactsSynced, collections[]). - Расписание: **************** (часы DaemonService) и /integrations/{id} (Синхронизировать сейчас через daemon.sync.trigger, локальный резерв без NATS); аренда SingletonTaskRunner для каждой интеграции, так что подсистемы никогда не дублируют друг друга. - Тестовое соединение теперь входит и показывает списки; строки членов регистрируют их организацию; удаление интеграции отделяет (сохраняет) то, что было синхронизировано; внешние адреса должно быть https к общедоступному узлу (без доступа кластера/SSRF); учетные данные никогда не регистрируются. - Удалены мертвые заголовки поставщиков TODO и их неиспользуемые обновления.

Все изменения

Подобно тому, что вы видите доставку?

Все это приходит в ваше рабочее пространство само по себе. Начните с бесплатного плана и прочтите эту страницу снова через месяц.

Начать бесплатно навсегдаПосмотреть цены