// Configuración por defecto (las eliminaciones se sincronizan en ambos sentidos)
$sugar_config['calendar_sync']['allow_external_event_deletion'] = true;
$sugar_config['calendar_sync']['allow_internal_event_deletion'] = true;
Esta guía explica cómo funciona internamente la sincronización de calendario y ofrece una guía completa de solución de problemas. Utilícela como referencia técnica para comprender el comportamiento de la sincronización, diagnosticar problemas e implementar buenas prácticas de seguridad.
Para la configuración inicial, consulte Guía de configuración para administradores y Guía de usuario. Para detalles específicos de CalDAV, consulte Guía del proveedor CalDAV.
La sincronización de calendario se ejecuta en cuatro fases diferenciadas, cada una de las cuales se ejecuta automáticamente según la programación configurada o cuando activa la sincronización manual.
El sistema identifica las Calendar Accounts listas para la sincronización (cuentas con un usuario asignado que no estén eliminadas) y las pone en cola para su procesamiento.
Qué ocurre:
La tarea del scheduler consulta las Calendar Accounts que tienen un usuario de calendario asignado
Prioriza las cuentas según la fecha del último intento de sincronización (las más antiguas primero)
Pone en cola las tareas de sincronización para las cuentas elegibles (hasta el límite de lote configurado)
Cuentas omitidas:
Cuentas sin un usuario de calendario asignado
Calendar Accounts eliminadas
La Fase 1 no valida la autenticación (tokens de OAuth o credenciales de CalDAV). La validación de la autenticación se produce en la Fase 2, al obtener los eventos externos. Las cuentas con tokens caducados o credenciales no válidas se ponen en cola, pero fallarán durante la Fase 2.
Para cada Calendar Account en cola, el sistema valida la autenticación, obtiene los eventos de ambos sistemas y los compara para identificar diferencias.
Qué ocurre:
Valida la autenticación (validez del token de OAuth, credenciales de CalDAV)
Renueva automáticamente los tokens de OAuth caducados cuando es posible
Obtiene las reuniones de SuiteCRM dentro de la ventana de sincronización configurada (días pasados + días futuros)
Obtiene los eventos del calendario externo mediante la API (Google Calendar) o el protocolo CalDAV
Empareja los eventos entre sistemas usando los identificadores del calendario externo
Identifica eventos nuevos, modificados y eliminados en ambos sistemas
Aplicación de la ventana de sincronización:
Los eventos se filtran inicialmente según el intervalo de tiempo configurado:
Past Days: eventos desde hace X días hasta hoy
Future Days: eventos desde hoy hasta dentro de Y días
Enriquecimiento de eventos vinculados: los eventos fuera de la ventana de sincronización se excluyen inicialmente, pero si están vinculados a eventos dentro de la ventana (mediante el External Calendar ID), se obtienen para garantizar un emparejamiento y una resolución de conflictos precisos. Esto evita vínculos huérfanos y garantiza que las eliminaciones se detecten correctamente.
Emparejamiento de eventos:
Los eventos se emparejan mediante:
ID de evento vinculado: cada evento sincronizado almacena el ID de su homólogo. El sistema usa este vínculo para emparejar eventos entre sistemas
Comparación de contenido: una comparación de los campos principales del evento (título, descripción, ubicación, horas de inicio/fin) determina rápidamente si el contenido ha cambiado desde la última sincronización
Detección de modificaciones: los eventos se marcan como modificados cuando su marca de tiempo de última modificación es posterior a la fecha de la última sincronización
Detección de eliminaciones: cuando un evento vinculado existe en un sistema pero ya no está presente en el otro, se marca para su eliminación (según la configuración del comportamiento de eliminación)
Cuando el mismo evento se modifica en ambos sistemas, la estrategia de resolución de conflictos configurada determina qué versión conservar.
Estrategias:
| Estrategia | Comportamiento |
|---|---|
Most Recent Change Wins |
Compara las marcas de tiempo de modificación (con precisión de segundos); gana el cambio más reciente. La versión con el cambio más reciente sobrescribe a la otra. |
External Calendar Priority |
La versión del calendario externo siempre gana, independientemente de la hora de modificación. Como mecanismo de seguridad, recurre a la comparación de marcas de tiempo si no se puede determinar el origen del evento. |
SuiteCRM Priority |
La versión de SuiteCRM siempre gana, independientemente de la hora de modificación. Como mecanismo de seguridad, recurre a la comparación de marcas de tiempo si no se puede determinar el origen del evento. |
Para ver ejemplos detallados de resolución de conflictos y cómo elegir la estrategia adecuada, consulte Estrategia de resolución de conflictos en la Guía de configuración para administradores.
Escenarios sin conflicto:
Contenido idéntico: si ambos eventos se han modificado con los mismos valores, no es necesario sincronizar
Eventos nuevos: se crean en el sistema de destino sin activar la resolución de conflictos
Eliminaciones: se procesan según la configuración del comportamiento de eliminación
Validación de seguridad:
Durante la resolución de conflictos, los datos del evento se validan para detectar problemas de seguridad, incluida la detección de patrones XSS en los campos de título, descripción y ubicación. El contenido sospechoso se registra, pero la sincronización continúa.
Los cambios se aplican a ambos sistemas para lograr la sincronización.
Qué ocurre:
Operaciones de creación: los eventos nuevos en un sistema se crean en el otro
Operaciones de actualización: los eventos modificados se actualizan en el sistema de destino
Operaciones de eliminación: los eventos eliminados se eliminan del sistema de destino (si la sincronización de eliminaciones está habilitada)
Mantenimiento de vínculos: los External Calendar ID se almacenan en SuiteCRM para futuros emparejamientos
Actualizaciones de estado: se actualiza la Last Sync Date en el registro de Calendar Account
Gestión de errores:
Los fallos individuales de sincronización de eventos no detienen todo el proceso de sincronización
Los errores se registran en suitecrm.log usando prefijos específicos de clase (por ejemplo, [CalendarSyncOrchestrator], [CalendarSync], [GoogleCalendarProvider])
Los eventos fallidos se reintentan en la siguiente ejecución de sincronización
Para ver los errores de sincronización: grep -E "error|failed" suitecrm.log | grep -E "CalendarSync|CalendarProvider" | tail -50
La sincronización de calendario transfiere propiedades específicas de las reuniones entre sistemas. Comprender qué se sincroniza le ayuda a gestionar las expectativas y a solucionar incoherencias en los datos.
Estos campos se sincronizan de forma bidireccional:
Title/Subject: el nombre o título de la reunión
Start Date and Time: cuándo comienza la reunión
End Date and Time: cuándo termina la reunión
Description: detalles, agenda o notas de la reunión
Location: ubicación física o virtual de la reunión
Estos campos permanecen locales en SuiteCRM:
Assigned User: la propiedad del usuario en SuiteCRM
Status: el estado de la reunión (Planned, Held, Not Held)
Parent Record: la Organización, el Contacto u otro registro de SuiteCRM relacionado
Invitees: los participantes de la reunión (los asistentes se gestionan por separado en cada sistema)
Custom Fields: cualquier campo personalizado añadido al módulo Meetings
Reminders: la configuración de recordatorios establecida en SuiteCRM
Los asistentes e invitados se gestionan de forma independiente en cada sistema. Invitar a usuarios en SuiteCRM no añade asistentes al evento del calendario externo, y viceversa.
Al sincronizar entre sistemas, los datos pueden transformarse para adaptarse a diferentes formatos:
Descripciones HTML: se convierten a texto plano si el calendario externo no admite texto enriquecido
Zonas horarias: se convierten a la zona horaria adecuada para cada sistema
Eventos de todo el día: se gestionan según la implementación de eventos de todo el día de cada sistema
La sincronización es bidireccional por defecto, con controles independientes para la creación, la modificación y la eliminación.
Los cambios en SuiteCRM se transfieren a su calendario externo:
Reuniones nuevas: se crean como eventos en el calendario externo
Reuniones modificadas: las actualizaciones se sincronizan con el evento del calendario externo
Reuniones eliminadas: se elimina el evento del calendario externo (si la sincronización de eliminaciones está habilitada)
Cuando se guarda una reunión en SuiteCRM:
Si los logic hooks están habilitados, la sincronización se activa de inmediato
En caso contrario, los cambios se sincronizan en la siguiente ejecución de sincronización programada
El External Calendar ID se almacena en el registro de la reunión para futuros emparejamientos
Los cambios en su calendario externo se transfieren a SuiteCRM:
Eventos nuevos: se crean como reuniones en SuiteCRM
Eventos modificados: las actualizaciones se sincronizan con la reunión de SuiteCRM
Eventos eliminados: se elimina la reunión de SuiteCRM (si la sincronización de eliminaciones está habilitada)
Cuando se modifica un evento en el calendario externo:
Los cambios se detectan durante la siguiente ejecución de sincronización (programada o manual)
La reunión correspondiente de SuiteCRM se actualiza según la estrategia de resolución de conflictos
Si no existe una reunión coincidente, se crea una nueva
Por defecto, las eliminaciones se sincronizan de forma bidireccional. Puede personalizar este comportamiento para proteger los datos en escenarios específicos.
Controle si las eliminaciones se propagan entre sistemas mediante los ajustes de config_override.php.
Por defecto, ambos ajustes de eliminación son true, lo que habilita la sincronización bidireccional completa de eliminaciones:
// Configuración por defecto (las eliminaciones se sincronizan en ambos sentidos)
$sugar_config['calendar_sync']['allow_external_event_deletion'] = true;
$sugar_config['calendar_sync']['allow_internal_event_deletion'] = true;
Con la configuración por defecto:
Eliminar una reunión en SuiteCRM elimina el evento en el calendario externo
Eliminar un evento en el calendario externo elimina la reunión en SuiteCRM
Para preservar los eventos del calendario externo cuando se eliminan reuniones de SuiteCRM:
// Evitar que las eliminaciones en SuiteCRM afecten al calendario externo
$sugar_config['calendar_sync']['allow_external_event_deletion'] = false;
Resultado:
Eliminar una reunión en SuiteCRM NO elimina el evento del calendario externo
El evento se volverá a sincronizar con SuiteCRM en la siguiente ejecución de sincronización
Útil cuando el calendario externo es la fuente autorizada
Para preservar las reuniones de SuiteCRM cuando se eliminan eventos del calendario externo:
// Evitar que las eliminaciones externas afecten a SuiteCRM
$sugar_config['calendar_sync']['allow_internal_event_deletion'] = false;
Resultado:
Eliminar un evento en el calendario externo NO elimina la reunión de SuiteCRM
La reunión se volverá a sincronizar con el calendario externo en la siguiente ejecución de sincronización
Útil cuando SuiteCRM es la fuente autorizada
Para deshabilitar por completo la sincronización de eliminaciones en ambas direcciones:
// Ninguna eliminación se propaga en ninguna dirección
$sugar_config['calendar_sync']['allow_external_event_deletion'] = false;
$sugar_config['calendar_sync']['allow_internal_event_deletion'] = false;
Resultado:
Las eliminaciones nunca se propagan entre sistemas
Los eventos eliminados se vuelven a crear en la siguiente ejecución de sincronización
Provoca eventos huérfanos a menos que se limpien manualmente
Deshabilitar la sincronización de eliminaciones puede provocar eventos huérfanos que existen en un sistema pero no en el otro. Considere sus políticas de retención de datos y sus procedimientos de limpieza antes de modificar estos ajustes.
Esta sección ofrece una guía completa de solución de problemas para los problemas y mensajes de error más comunes.
Mensajes de error comunes, sus causas y sus soluciones:
| Mensaje de error | Causa | Solución |
|---|---|---|
Authentication token expired / Re-authorization required |
La autorización de OAuth ha caducado o el token de actualización no está disponible |
Edite la Calendar Account, haga clic en Authenticate para volver a autorizarla y pruebe de nuevo la conexión. Consulte la guía de usuario de sincronización de calendario. |
Authentication failed. Please check your CalDAV credentials |
El nombre de usuario o la contraseña de CalDAV son incorrectos |
Compruebe que sus credenciales de CalDAV son correctas. |
CalDAV server error: HTTP {code} |
El servidor CalDAV devolvió una respuesta de error |
Compruebe el código de estado HTTP: 401 = problema de autenticación, 403 = permiso denegado, 404 = calendario no encontrado, 5xx = error del servidor. Verifique la URL del servidor y las credenciales. |
Network error |
La conexión falló debido a problemas de red, resolución de DNS o el cortafuegos |
Verifique que el servidor de SuiteCRM puede acceder al endpoint de la API del proveedor de calendario. Compruebe las reglas del cortafuegos y la resolución de DNS. Pruebe la conectividad con |
Calendar not found |
El calendario externo se eliminó, se renombró o cambió su ID |
Verifique que el calendario sigue existiendo en el sistema externo. Para CalDAV, verifique que la Server URL es correcta y termina con una barra final. Cree una nueva Calendar Account si el calendario ya no existe. |
This external calendar is already connected to account |
El mismo calendario externo ya está vinculado a otra Calendar Account |
Elimine la Calendar Account duplicada o use un calendario externo diferente. Cada calendario externo solo puede sincronizarse con una Calendar Account de SuiteCRM para evitar conflictos de datos. |
Google API error |
La API de Google Calendar devolvió un error (permisos, cuota o problema del servicio) |
Compruebe en Google Developer Console las cuotas de la API y los detalles del error. Verifique que los ámbitos de OAuth incluyen acceso de lectura/escritura al calendario. Vuelva a autorizar si se revocaron los permisos. |
No access token available / OAuth connection not found |
Falta el token de OAuth o se eliminó el registro de la conexión |
Edite la Calendar Account y haga clic en Authenticate para establecer una nueva conexión de OAuth. |
Pasos de diagnóstico detallados para los problemas más frecuentes.
Cuando los eventos no se sincronizan entre sistemas, siga estos pasos de diagnóstico:
1. Verificar el estado del Scheduler
Navegue hasta Calendar Sync Settings en Administration
Compruebe que Scheduler Status muestra "Enabled"
Verifique que la marca de tiempo de Last Scheduled Run es reciente (dentro del intervalo de sincronización)
Si el estado del scheduler es "Disabled", asegúrese de que la tarea cron se está ejecutando; consulte Configuración del Scheduler
2. Comprobar la conexión de la Calendar Account
Navegue hasta la vista de detalle de su Calendar Account
Verifique que Test Successful muestra "Yes"
Compruebe que Last Sync Date se actualiza con regularidad
Si la prueba de conexión falló, consulte la guía de usuario de sincronización de calendario para volver a probarla
Para cuentas OAuth, vuelva a autorizar si el token ha caducado
3. Verificar la ventana de sincronización
Compruebe que la fecha del evento está dentro de la ventana de sincronización configurada
Navegue hasta Calendar Sync Settings en Administration
Verifique que los ajustes de Past Days y Future Days incluyen la fecha del evento
Los eventos fuera de la ventana de sincronización se ignoran intencionadamente
Ajuste los ajustes de la ventana de sincronización si es necesario; consulte Ajustes de la ventana de sincronización
4. Revisar los registros
Navegue hasta Administration > System Settings
Establezca Log Level en "Info" o "Debug"
Active la sincronización manual usando Sync Now
Revise suitecrm.log en busca de entradas que contengan CalendarSync o CalendarProvider:
grep -E "CalendarSync|CalendarProvider" suitecrm.log | tail -100
Busque mensajes de error o advertencias que indiquen fallos de sincronización
Compruebe si hay errores de autenticación, errores de la API o problemas de permisos
Cuando encuentre errores de OAuth o de autenticación, siga estos pasos:
1. Verificar la configuración del OAuth Provider (solo para Google Calendar)
Navegue hasta Administration > External OAuth Providers
Verifique que el Google OAuth Provider existe y tiene credenciales válidas
Compruebe que el Client ID y el Client Secret son correctos
Confirme que el estado del OAuth Provider es Active
Si las credenciales son incorrectas, actualícelas en Google Developer Console y en SuiteCRM
2. Volver a autorizar la Calendar Account
Edite su Calendar Account
Haga clic en Authenticate para reiniciar el flujo de OAuth
Complete la autorización de Google en la ventana emergente
Asegúrese de autorizar con la cuenta de Google correcta
Haga clic en Save y después en Test Connection
Haga clic de nuevo en Save para conservar el resultado de la prueba
3. Comprobar el acceso al calendario externo
Inicie sesión en su proveedor de calendario externo
Verifique que el calendario sigue existiendo y es accesible
Para Google Calendar, compruebe las aplicaciones autorizadas en la configuración de la cuenta de Google
Para CalDAV, verifique que el nombre de usuario y la contraseña son correctos
Cuando el mismo evento aparece varias veces en uno o ambos sistemas:
1. Comprobar la estrategia de resolución de conflictos
Navegue hasta Calendar Sync Settings en Administration
Verifique el ajuste Conflict Resolution Strategy
Asegúrese de que coincide con el comportamiento previsto
Si "Most Recent Change Wins" está causando problemas, considere cambiar a "External Calendar Priority" o "SuiteCRM Priority"
Consulte Estrategia de resolución de conflictos para obtener orientación
2. Verificar que existe una única Calendar Account
Navegue hasta el módulo Calendar Accounts
Filtre por su usuario
Asegúrese de tener solo UNA Calendar Account activa por calendario externo
Si existen varias cuentas para el mismo calendario, desactive o elimine los duplicados
El sistema advertirá sobre calendarios duplicados durante la prueba de conexión
3. Comprobar el emparejamiento de eventos
Abra una reunión duplicada en SuiteCRM
Compruebe si el campo External Calendar ID está rellenado
Si está en blanco, la reunión no está vinculada a un evento externo (huérfana)
Elimine las reuniones huérfanas y deje que la sincronización las vuelva a crear correctamente
Si los duplicados persisten, contacte con su administrador para revisar la configuración de sincronización
La sincronización de calendario utiliza el sistema estándar de registro de SuiteCRM con prefijos específicos de clase para facilitar su identificación.
Para habilitar un registro completo de la sincronización:
Navegue hasta Administration > System Settings
Localice la sección Logger Settings
Establezca Log Level en uno de los siguientes valores:
Info: operaciones generales de sincronización y mensajes de estado
Debug: información detallada del proceso de sincronización, llamadas a la API y transformaciones de datos
Haga clic en Save
El registro de depuración genera archivos de registro muy extensos. Actívelo solo al solucionar problemas específicos y vuelva después al nivel "Fatal" o "Error" para el funcionamiento normal.
Las entradas de sincronización de calendario usan prefijos específicos de clase para facilitar el filtrado. Se utilizan dos formatos:
Formato con corchetes [NombreClase][nombreMétodo]:
| Prefijo | Descripción | Comando de filtrado |
|---|---|---|
|
Clase de fachada para las operaciones de sincronización |
|
|
Lógica principal de orquestación de la sincronización |
|
|
Comparación de eventos y descubrimiento de operaciones |
|
|
Procesamiento de la resolución de conflictos |
|
|
Operaciones sobre reuniones de SuiteCRM |
|
Formato con dos puntos NombreClase: mensaje:
| Prefijo | Descripción | Comando de filtrado |
|---|---|---|
|
Operaciones de la API de Google Calendar |
|
|
Operaciones del protocolo CalDAV |
|
Ejemplos de entradas de registro:
[CalendarSync][syncAllCalendarAccounts] Starting sync for all calendar accounts
[CalendarSyncOrchestrator][syncCalendarAccount] Starting sync for account: My Google Calendar
[CalendarSyncOrchestrator][fetchAndEnrichEvents] Fetched 47 events from external provider
GoogleCalendarProvider: Successfully connected to Google Calendar
GoogleCalendarProvider: getEvents called with query: startDate=2024-01-01, endDate=2024-03-31
CalDAVProvider: Successfully connected to CalDAV server
[CalendarEventConflictResolver][resolve] Conflict detected - applying timestamp strategy
[CalendarSyncOrchestrator][syncComplete] Sync completed for account ID 12345
Para filtrar los registros y ver solo los de sincronización de calendario:
En Linux/macOS:
# Filtrar todas las entradas relacionadas con la sincronización de calendario
grep -E "\[CalendarSync|\[CalendarSyncOrchestrator|CalendarProvider:" suitecrm.log | tail -100
# Filtrar solo una clase específica
grep "\[CalendarSyncOrchestrator\]" suitecrm.log | tail -100
En Windows:
findstr /R "CalendarSync CalendarProvider" suitecrm.log
En la interfaz de SuiteCRM:
Navegue hasta Administration > System Settings > System Logs y filtre por la palabra clave "CalendarSync" o "CalendarProvider".
Comprender las implicaciones de seguridad le ayuda a mantener una sincronización de calendario segura.
Los datos fluyen directamente entre su instancia de SuiteCRM y los servidores del proveedor de calendario
No intervienen servicios intermediarios ni servidores de terceros
SuiteCRM actúa como cliente frente a la API del calendario externo
Los siguientes datos de reuniones se transmiten por la red:
Títulos y asuntos de las reuniones
Fechas y horas de inicio y fin
Descripciones y notas de la reunión
Información de ubicación
Identificadores del calendario externo
No se transmiten:
Contraseñas de usuarios de SuiteCRM
Información del usuario asignado
Detalles del registro padre (Organizaciones, Contactos relacionados)
Campos personalizados
Metadatos específicos de SuiteCRM
Los proveedores de calendario externos tienen sus propias políticas de retención de datos y privacidad:
Google Calendar: los datos se almacenan en los servidores de Google, sujetos a la política de privacidad y la retención de datos de Google
Proveedores de CalDAV: la privacidad de los datos depende de su proveedor específico (autoalojado frente a alojado en la nube)
CalDAV autoalojado: control total sobre el almacenamiento de datos, la retención y la privacidad
Revise la política de privacidad de su proveedor de calendario y asegúrese de que cumple con los requisitos normativos de su organización (RGPD, HIPAA, etc.).
Cada usuario autoriza únicamente su propia conexión de calendario
Los usuarios no pueden acceder a los calendarios externos de otros usuarios a través de este sistema
Los registros de Calendar Account pertenecen a usuarios individuales
Los administradores pueden ver las Calendar Accounts, pero no pueden autorizar en nombre de los usuarios
Tokens de OAuth (Google Calendar):
Los tokens de acceso y de actualización de OAuth se almacenan cifrados en la base de datos de SuiteCRM
Los tokens se cifran con la clave de cifrado de SuiteCRM
Los tokens se transmiten mediante HTTPS durante la autorización
La renovación de tokens se produce automáticamente sin intervención del usuario
Los tokens caducados requieren que el usuario vuelva a autorizarse
Credenciales de CalDAV:
Las credenciales se almacenan en la base de datos de SuiteCRM
Las contraseñas se cifran con Blowfish antes de almacenarse; los nombres de usuario se almacenan en texto plano
Asegúrese de que las copias de seguridad de la base de datos estén protegidas y cifradas
Considere usar contraseñas específicas de aplicación en lugar de las contraseñas de la cuenta principal
Los administradores tienen los siguientes privilegios:
Configurar los ajustes globales de sincronización (ventana de sincronización, resolución de conflictos, etc.)
Activar la sincronización manual para todos los usuarios mediante Sync All Users Now
Ver todos los registros de Calendar Account (pero no pueden autorizar OAuth en nombre de los usuarios)
Acceder a los registros de sincronización y a la información de diagnóstico
Modificar el comportamiento de eliminación y las opciones de configuración avanzada
Los administradores no pueden:
Acceder directamente al contenido de los calendarios externos de los usuarios
Volver a autorizar conexiones de OAuth en nombre de los usuarios
Ver los tokens de OAuth cifrados en texto plano
Asegúrese de que HTTPS esté habilitado en su instancia de SuiteCRM:
Producción: HTTPS es obligatorio para proteger los tokens de OAuth y las credenciales en tránsito
Desarrollo/pruebas: use HTTPS incluso en entornos de desarrollo
Configuración SSL: use certificados SSL válidos (no autofirmados en producción)
HTTP Strict Transport Security: habilite HSTS para forzar las conexiones HTTPS
Cuando estén disponibles, utilice siempre contraseñas específicas de aplicación para las conexiones CalDAV.
Ventajas:
Alcance limitado (solo acceso al calendario, sin privilegios de administrador)
Fácil revocación sin cambiar la contraseña de la cuenta principal
Mejor rastro de auditoría de seguridad
Cumplimiento de las políticas de autenticación multifactor
Mantenga la seguridad mediante auditorías periódicas:
Revisión mensual: compruebe las Calendar Accounts activas en busca de conexiones no utilizadas u huérfanas
Auditoría trimestral: verifique que los tokens de OAuth siguen siendo válidos y que los usuarios siguen necesitando acceso
Supervisión de registros: revise los registros de sincronización en busca de actividad sospechosa o fallos repetidos
Revisión de accesos: asegúrese de que solo los usuarios autorizados tienen Calendar Accounts activas
Lista de comprobación de auditoría:
Revisar todas las Calendar Accounts activas en el módulo
Verificar que Last Sync Date es reciente en todas las cuentas
Comprobar si hay cuentas con pruebas de conexión fallidas
Eliminar las Calendar Accounts de usuarios que ya no estén en la organización
Revisar los registros de sincronización en busca de fallos de autenticación
Verificar los permisos de acceso al calendario externo
Almacene las copias de seguridad de la base de datos en almacenamiento cifrado
Habilite el cifrado de la base de datos para campos sensibles si está disponible
Use contraseñas seguras para las cuentas CalDAV
Rote las contraseñas de CalDAV y las contraseñas de aplicación con regularidad
Implemente restricciones de IP en el acceso al calendario externo cuando sea posible
Use VPN o redes privadas para las conexiones CalDAV a servidores autoalojados
Utilice estos pasos para diagnosticar problemas de conexión de CalDAV desde el lado del servidor.
Ejecute curl desde su servidor de SuiteCRM para comprobar que el endpoint de CalDAV es accesible y que las credenciales son válidas:
# Prueba de conectividad básica (sustituya USERNAME, PASSWORD y URL)
curl -X PROPFIND -u "USERNAME:PASSWORD" https://your-caldav-server/path/to/calendar/
# Con la cabecera Depth para listar el contenido del calendario
curl -X PROPFIND -u "USERNAME:PASSWORD" -H "Depth: 1" https://your-caldav-server/path/to/calendar/
# Para servidores con certificados autofirmados (solo pruebas)
curl -k -X PROPFIND -u "USERNAME:PASSWORD" https://your-caldav-server/path/to/calendar/
Respuestas esperadas:
207 Multi-Status — Correcto; CalDAV funciona
401 Unauthorized — Credenciales no válidas
404 Not Found — Ruta de URL incorrecta
Causas:
Certificado autofirmado en el servidor CalDAV
Certificado SSL caducado
Discrepancia entre el certificado y el nombre de host
Faltan certificados intermedios
Soluciones:
Añada el certificado del servidor al almacén de certificados de confianza de su servidor de SuiteCRM
Verifique que el certificado es válido y no ha caducado: openssl s_client -connect your-caldav-server:443
Asegúrese de que el nombre de host del certificado coincide con la URL que está usando
Solo para pruebas, la verificación SSL puede deshabilitarse en SuiteCRM (no recomendado para producción)
Causas:
El servidor CalDAV no es accesible desde el servidor de SuiteCRM
El cortafuegos bloquea las conexiones salientes en el puerto 443 (o 5232 para Radicale)
Número de puerto incorrecto
El servidor está caído o inaccesible
Soluciones:
Pruebe la conectividad básica desde el servidor de SuiteCRM:
curl -I https://your-caldav-server/
Compruebe que las reglas del cortafuegos permiten conexiones HTTPS salientes desde el servidor de SuiteCRM
Confirme el número de puerto: CalDAV estándar usa 443, Radicale usa por defecto 5232
Si usa un nombre de host interno, asegúrese de que el DNS se resuelve correctamente desde el servidor de SuiteCRM
Después de comprender la mecánica de sincronización y la solución de problemas:
Revise Temas avanzados y migración para la referencia completa de configuración y los detalles de migración
Consulte la Guía de configuración para administradores para ajustar los parámetros globales de sincronización
Consulte la Guía del proveedor CalDAV para la referencia de URL de CalDAV orientada al usuario
Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.