Ir al contenido

Conectar un Google Calendar

Esta guía te muestra cómo conectar Google Calendar a un espacio de trabajo. La conexión es por espacio de trabajo: sincroniza los eventos de ese espacio en Control Center, en modo de solo lectura. Consulta Calendario y agenda para ver el panorama completo.

  1. Abre Calendario en la barra lateral.
  2. Haz clic en Añadir cuenta de calendario en la barra lateral del calendario. (La misma sección está en Ajustes → Espacio de trabajo → Perfil e identidad, dentro de Google Calendar).
  3. Elige cómo autorizar:
    • Usar la app de Google de Control Center — no hay nada que configurar. Es la opción predeterminada cuando tu compilación incluye una.
    • Usar mi propio cliente de Google Cloud — pega el ID de cliente y el secreto de tu propio proyecto (consulta Trae tu propio cliente de Google).
  4. Haz clic en Conectar Google Calendar. El cuadro de diálogo muestra un código corto y un enlace a la página de dispositivos de Google.
  5. Abre esa página en cualquier dispositivo, introduce el código y aprueba el acceso solicitado. El cuadro de diálogo se cierra solo y tus eventos empiezan a sincronizarse.

El servidor, y no tu dispositivo, realiza este intercambio y conserva el token de actualización resultante — por eso el código se aprueba en «cualquier dispositivo» y no en esta app en concreto.

La cuenta se conecta solo al espacio de trabajo activo. Cambia de espacio de trabajo y verás los calendarios de ese espacio en su lugar.

El flujo de conexión solicita calendar.readonly además de tu correo: los mismos alcances para la app integrada y para un cliente que pegues tú. Control Center lee los eventos; no crea, edita ni elimina eventos en Google, ni responde a invitaciones.

El servidor es el dueño de la programación: recorre las cuentas conectadas de todos los espacios de trabajo cada dos minutos y escribe los eventos en la base de datos del espacio de trabajo. Los clientes nunca hablan con Google: leen lo que escribió el servidor.

El barrido es incremental. La primera pasada por calendario obtiene una ventana móvil (60 días hacia atrás y 90 hacia adelante) y captura el token de sincronización de Google; las pasadas posteriores presentan ese token y reciben solo lo que cambió, que es lo que hace costeable una cadencia de dos minutos. La ventana se reancla con una sincronización completa cada 24 horas y siempre que Google invalide el token.

Los tokens de actualización residen en el servidor, en secrets.json dentro del directorio de datos del servidor, con permisos solo para el propietario (0600) — no en el llavero del sistema operativo y nunca en un dispositivo cliente.

Un espacio de trabajo puede conectar varias cuentas de Google (por ejemplo, la del trabajo y la personal). Repite el paso de conexión para cada una; sus eventos se fusionan en las mismas vistas de mes, semana y agenda. Cada cuenta se sincroniza y se actualiza de forma independiente, y cada una se puede desconectar por separado.

Si Google invalida de forma permanente el token de una cuenta (una sesión revocada o caducada hace mucho tiempo), la sincronización se detiene y Control Center muestra un banner de Volver a conectar en el calendario, además de una notificación de escritorio. Haz clic en Volver a conectar y aprueba un código nuevo; el banner desaparece con la siguiente sincronización correcta.

En la barra lateral del calendario (o en Ajustes → Espacio de trabajo → Perfil e identidad), haz clic en Desconectar en la cuenta. Esto elimina sus eventos sincronizados y borra sus tokens almacenados en el servidor.

Un servidor sin interfaz gráfica conecta la misma cuenta desde su propio terminal:

Ventana de terminal
GOOGLE_OAUTH_CLIENT_ID=<id> GOOGLE_OAUTH_CLIENT_SECRET=<secret> \
cc_server calendar connect --data-dir <dir> --workspace <workspace-id>

Imprime un código y una URL, espera la aprobación y luego almacena los tokens y sincroniza en el siguiente barrido.

Una compilación desde el código fuente no incluye ningún cliente de Google, así que el ID y el secreto son obligatorios: define GOOGLE_OAUTH_CLIENT_ID y GOOGLE_OAUTH_CLIENT_SECRET. No existe una opción --google-client-id (las opciones desconocidas se ignoran). Sin el par de variables de entorno, el comando termina con un error de cliente ausente.

Trae tu propio cliente de Google (forks y autohospedaje)

Sección titulada «Trae tu propio cliente de Google (forks y autohospedaje)»

Las compilaciones publicadas incluyen un cliente de Google, así que la mayoría de la gente nunca necesita tocar esto. Trae el tuyo si compilas desde el código fuente, ejecutas tu propio servidor o quieres que la pantalla de consentimiento muestre el nombre de tu propio proyecto.

  1. En la Google Cloud Console, habilita la Google Calendar API y configura la pantalla de consentimiento de OAuth, agregando los alcances calendar.readonly, openid y email. Mientras la app no esté verificada, agrégate como usuario de prueba. Agregar calendar.events en la pantalla de consentimiento no habilita la respuesta a invitaciones: Control Center nunca solicita ese alcance.
  2. Crea un ID de cliente de OAuth con el tipo de aplicación TVs and limited input devices y copia tanto el ID de cliente como el secreto de cliente.
  3. Proporciónalos por conexión (elige Usar mi propio cliente de Google Cloud en el cuadro de diálogo) o para todo el servidor con GOOGLE_OAUTH_CLIENT_ID y GOOGLE_OAUTH_CLIENT_SECRET.

Un par definido para todo el servidor reemplaza al integrado en todas partes, incluso detrás de la opción «usar la app de Google de Control Center» — así que, en tu propio servidor, esa opción es tu app.

El secreto de cliente nunca sale del servidor: ninguna respuesta RPC lo transporta, y una cuenta conectada mediante el cliente propio del servidor almacena un marcador en lugar de una copia del par, así que rotarlo es cuestión de reiniciar con un valor nuevo.

Síntoma Causa probable
El cuadro de diálogo no ofrece la opción integrada Esta compilación no incluye ningún cliente de Google (una compilación desde el código fuente), o el servidor se inició con solo una mitad del par. Tanto el ID como el secreto son obligatorios
invalid_scope al iniciar el flujo El calendario no está permitido para un cliente de código de dispositivo en ese proyecto de Cloud. Usa mejor un proyecto con un cliente de loopback o web
invalid_client de Google El cliente no es un cliente de TVs and limited input devices, o el ID y el secreto son de clientes distintos
La aprobación se realiza pero la sincronización está vacía Tu cuenta no es un usuario de prueba en la pantalla de consentimiento, o no se otorgó calendar.readonly
El código caduca antes de que lo apruebes Los códigos de dispositivo duran poco. Inicia de nuevo la conexión para obtener uno nuevo
«No se pudo actualizar tu respuesta» al responder una invitación Es lo esperado: el flujo de conexión nunca solicita calendar.events
La sincronización se detiene con una advertencia de actualización en el registro del servidor La cuenta se conectó con un cliente que ya no está configurado. Vuelve a conectar la cuenta, o restaura ese ID de cliente y ese secreto