Sincronizacion Bidireccional
Entiende como funciona la sincronizacion automatica entre Talivo y tus calendarios externos.
Como funciona
Sincronizacion bidireccional
Talivo sincroniza en ambas direcciones con Google Calendar y Microsoft Outlook. Cambios en cualquier lado se reflejan en el otro.
Flujo de sincronizacion
| Componente | Descripcion |
|---|---|
| Talivo | Plataforma central |
| Push Notifications (Webhooks) | Comunicacion en tiempo real |
| Google Calendar | Proveedor externo |
| Microsoft Outlook | Proveedor externo |
De Talivo hacia afuera
Crear evento en Talivo
- Usuario crea evento en Talivo
- Sistema detecta calendario sincronizado
- Llama API del proveedor (Google/Microsoft)
- Evento creado en calendario externo
- Se guarda referencia (googleEventId/microsoftEventId)
Modificar evento en Talivo
- Usuario edita evento
- Sistema actualiza localmente
- Detecta si tiene ID externo
- Llama API para actualizar
- Cambio reflejado en externo
Eliminar evento en Talivo
- Usuario elimina evento
- Sistema elimina localmente
- Detecta si tiene ID externo
- Llama API para eliminar
- Evento eliminado en externo
De afuera hacia Talivo
Webhooks / Push Notifications
- Evento modificado en Google/Outlook
- Proveedor envia notificacion HTTP
- Talivo recibe en endpoint publico
- Responde inmediatamente (200/202)
- Procesa cambio asincrono
- Actualiza base de datos local
Tipos de cambios detectados
| Tipo | Descripcion |
|---|---|
| created | Nuevo evento creado |
| updated | Evento modificado |
| deleted | Evento eliminado |
Sincronizacion incremental
Concepto
En lugar de sincronizar TODO cada vez:
- Sistema guarda token de sincronizacion
- Siguiente sync: "Dame cambios desde token X"
- Proveedor retorna solo cambios nuevos
- Mucho mas eficiente
Google: syncToken
Primera sync:
- GET /events (sin syncToken)
- Retorna todos los eventos
- Guarda syncToken
Siguiente sync:
- GET /events?syncToken=abc123
- Retorna solo cambios desde abc123
- Actualiza syncToken
Microsoft: deltaToken
Primera sync:
- GET /events/delta
- Retorna todos los eventos + deltaLink
- Guarda deltaLink
Siguiente sync:
- GET deltaLink
- Retorna solo cambios
- Nuevo deltaLink
Webhooks Google Calendar
Configuracion (Watch)
POST https://www.googleapis.com/calendar/v3/calendars/primary/events/watch
Request:
{
"id": "uuid-unico-canal",
"type": "web_hook",
"address": "https://talivo.mx/api/public/webhooks/google-calendar",
"token": "token-verificacion",
"expiration": timestamp
}
Notificacion recibida
POST /public/webhooks/google-calendar
Headers:
- X-Goog-Channel-ID: uuid-del-canal
- X-Goog-Resource-State: exists/sync
- X-Goog-Resource-ID: id-recurso
- X-Goog-Message-Number: numero
Estados de notificacion
| Estado | Significado |
|---|---|
sync | Confirmacion de suscripcion |
exists | Hay cambios disponibles |
not_exists | Recurso eliminado |
Expiracion y renovacion
Watches de Google:
- Expiran cada ~7 dias
- Sistema detecta proximos a expirar
- Renueva automaticamente
- Sin intervencion del usuario
Subscripciones Microsoft
Configuracion (Subscription)
POST https://graph.microsoft.com/v1.0/subscriptions
Request:
{
"changeType": "created,updated,deleted",
"notificationUrl": "https://talivo.mx/api/public/webhooks/microsoft-calendar",
"resource": "/me/events",
"expirationDateTime": "2024-01-20T00:00:00Z",
"clientState": "token-secreto"
}
Validacion inicial
Al crear subscription, Microsoft envia:
GET /webhooks/microsoft-calendar?validationToken=abc123
Talivo debe responder:
- Status: 200
- Content-Type: text/plain
- Body: abc123 (el mismo token)
Notificacion recibida
POST /public/webhooks/microsoft-calendar
Body:
{
"value": [
{
"subscriptionId": "...",
"changeType": "updated",
"resource": "/me/events/event-id",
"resourceData": {...}
}
]
}
Expiracion y renovacion
Subscripciones de Microsoft:
- Expiran cada ~3 dias (4230 min max)
- Mas frecuente que Google
- Sistema renueva automaticamente
- Notificaciones de ciclo de vida
Conflictos de sincronizacion
Cuando ocurren
Conflicto: Mismo evento modificado en ambos lados simultaneamente antes de sincronizar.
Estrategia de resolucion
Por defecto:
- Ultima modificacion gana
- Timestamp mas reciente prevalece
- Notificacion al usuario si hay conflicto
Ejemplo
Evento: Reunion 10:00
Usuario en Talivo: Cambia a 11:00 (10:00:00 AM) Usuario en Google: Cambia a 14:00 (10:00:05 AM)
Resultado: 14:00 (Google fue despues)
Campos sincronizados
Campos que se sincronizan
| Campo | Sync |
|---|---|
| Titulo | Si |
| Descripcion | Si |
| Fecha/hora inicio | Si |
| Fecha/hora fin | Si |
| Ubicacion | Si |
| Participantes | Si |
| Estado (confirmado/tentativo) | Si |
| Todo el dia | Si |
| Link de video | Si |
Campos solo locales
| Campo | Razon |
|---|---|
| calendarId interno | ID local |
| processTaskId | Relacion con procesos |
| feedback/rating | Datos de entrevista |
| noShowCount | Auditoria |
Ver estado de sincronizacion
En el calendario
| Calendario: Trabajo | |
|---|---|
| Sync: Google Calendar | Activo |
| Ultima sync: Hace 2 minutos | |
| Estado watch: Activo (expira en 6 dias) |
En integraciones
Perfil → Integraciones:
| Google Calendar | Conectado |
|---|---|
| Cuenta: maria@empresa.com | |
| Ultima sync: Hace 2 minutos | |
| Watch: Activo |
Forzar sincronizacion
Sincronizacion manual
Si necesitas forzar sync:
- Los cambios normalmente son en tiempo real
- Pero si hay problemas:
- Desconectar proveedor
- Reconectar
- Sync completa se ejecuta
Problemas comunes
"Eventos no se sincronizan"
Causas:
- Webhook/subscription expirado
- Token de acceso invalido
- Error de red temporal
Solucion: Reconectar el proveedor.
"Evento duplicado"
Causa: Creado en ambos lados antes de sincronizar.
Solucion: Eliminar duplicado manualmente.
"Cambios no aparecen"
Causas:
- Delay en webhook (segundos)
- Sync token desactualizado
Solucion: Esperar unos segundos y refrescar.
Mejores practicas
Usar un solo punto de entrada
Recomendacion:
- Crear eventos en Talivo cuando son de trabajo
- Talivo sincroniza hacia afuera
- Eventos personales crear en Google/Outlook
- Se reflejan como "ocupado"
Mantener conexion activa
Para evitar problemas:
- No revocar permisos manualmente
- Si hay error, reconectar
- Verificar estado periodicamente
Proximos pasos
- Consultar Disponibilidad - Ver tiempos ocupados
- Crear Eventos - Programar reuniones