KamoCRM

Prawdziwa zewnętrzna synchronizacja kalendarza i kontaktów — Google, Microsoft 365, iCloud, CalDAV/CardDAV

FeatureEmailService
Shipped
15 listopada 2026 10:00 UTC
Author
Kamo
Commit
3b85588

Ustawienia › E-mail › CalDAV/CardDAV zapisywał połączenia zewnętrzne i pokazywał "Ostatnie Synchronizacja, która nie pobrała niczego (zadania DaemonService nie zostały zsynchronizowane) I oznaczyłem wszystko jako IDLE; klasy dostawców były TODOs) Synchronizuje je na prawdę (groupware/sync): - CalDAV/CardDAV: odkrywanie (adres → główny → zestaw domowy → kolekcje, z / .dobrze znany fallback, działa wklejony adres pojedynczego kalendarza), CTag / sync-token check, calendar-query lista ETag (ostatnie 366 dni), multiget tego, co się zmieniło, PUT/DELETE z If-Match/If-None-Match. iCloud domyślnie ustawia swoje adresy. - Google Calendar + Ludzie, Microsoft Kalendarze wykresów + kontakty na przyznaniu /oauth przechowuje przepływ; tokeny odświeżane (i obrotowe tokeny odświeżania przechowywane) z Zapis, który zastępuje tylko dokładny blob, który odświeżył. - Zdarzenia lądują poprzez IcsImportService.upsert (serie, wyjątki, EXDATEs) i Kontakty przez ContactService + ContactDetailStore — bez zaproszeń, bez Przypomnienia, żadne surowe tabele nie piszą. - Księgowość na kolekcję / pozycję (nowe tabele groupware_sync_*) daje aktualizacje, Usuwanie i dwukierunkowe: najpierw pociągnij (kopia zewnętrzna wygrywa remis), a następnie wciśnij Kamo edytuje/tworzy/usuwa, gdy integracja jest dwukierunkowa, a kolekcja Strażnicy: nic nie jest usuwane na nieudanym lub podejrzanie pustym liście, nic Kamo nie importowało, nic, co tylko starzało się z okna; przejście Każdy wniosek, który usunąłby większość kolekcji, jest odrzucany. - Status jest uczciwy: SYNCING podczas pracy, IDLE + lastSyncedAt tylko po pełnym fetch, ERROR + zwykłe słowa errorMessage inaczej; napisane kolumna po kolumnie, więc Edycja członka w połowie przejścia przetrwa. Per-kolekcja lastError i liczby są w Ładunek ustawień (syncSupported, calendarsSynced, eventsSynced, addressBooksSynced, contactsSynced, collections[]). - Harmonogram: **************** (zegar DaemonService) oraz /integrations/{id} (Synchronizuj teraz za pomocą daemon.sync.trigger, lokalne zabezpieczenie bez NATS); dzierżawa SingletonTaskRunner na integrację, dzięki czemu pods nigdy się nie podwoi. - Połączenie testowe teraz loguje się i wyświetla; wiersze członkowskie rejestrują ich organizację; Usuwanie integracji odłącza (zachowuje) to, co zostało zsynchronizowane; zewnętrzne adresy Musi być https do publicznego hosta (bez zasięgu klastra/SSRF); poświadczenia nigdy nie są rejestrowane. - Usunięto martwe stuby dostawców TODO i ich nieużywane odświeżacze.

All changes

Like what you see shipping?

All of it arrives in your workspace on its own. Start on the free plan and read this page again in a month.

Start Free ForeverView Pricing