calendar-autoblock
Un Google Apps Script que mantiene un Google Calendar en una ocupación objetivo con eventos de bloqueo sin título, para que el horario laboral deje de ser infinitamente reservable. Respeta las reuniones reales, nunca toca un evento que no creó y arranca en modo dry-run.
- 2026
- Diseño, desarrollo
- JavaScript, Google Apps Script, Google Calendar API, clasp, Node.js
Los huecos libres del calendario se ocupan. Poner bloques a mano funciona y después decae: dejás de hacerlo, y una semana más tarde las tardes desaparecieron otra vez. Este script corre a diario y mantiene una ventana móvil de dos semanas en la ocupación que le pidas.
Cómo coloca los bloques
La ocupación se mide como total. Pedís 50% y una semana que ya tiene 30% de reuniones reales recibe 20% de bloques generados, no 50% encima. El almuerzo y el final del día son reservas duras, colocadas en cada día libre y nunca podadas, así que actúan como piso incluso cuando la semana ya está cargada; cada corrida registra la ocupación proyectada y avisa cuando queda por encima del objetivo.
Todo lo demás se muestrea. Un candidato recibe una hora de inicio ponderada y una duración de 30, 45 o 60 minutos, y solo se acepta si no se superpone con nada, no deja un hueco menor a 30 minutos junto a otro evento y no arma una pared continua de más de dos horas. Tras suficientes rechazos se relaja a la duración más corta, y si el objetivo sigue sin alcanzarse registra el faltante en vez de forzar bloques. Los próximos dos días quedan congelados salvo por la limpieza de conflictos, para que la disponibilidad que otros ya vieron no se reacomode.
Seguridad
Los eventos generados llevan una propiedad extendida privada, y el script solo borra o modifica eventos que la tienen, volviendo a leer cada uno para verificar la etiqueta antes de eliminarlo. Los bloques que pusiste a mano son, para el script, una reunión real más: cuentan para la ocupación y nunca se tocan. DRY_RUN arranca en true, así que la primera corrida solo registra el plan. Topes por corrida abortan antes de escribir si un bug alguna vez produce un plan inverosímil, y una función elimina todos los bloques generados del próximo año.
El motor de colocación es puro y está testeado. Las mismas catorce aserciones corren bajo Node con un stub para la única API de Apps Script que toca el código puro, y sin cambios dentro del editor de Apps Script. No hay UI de configuración; las constantes son la interfaz. Licencia MIT.
Tecnología
- Google Apps Script corriendo con un disparador diario por tiempo, así que no necesita servidor ni navegador abierto. Lee y escribe a través del servicio avanzado de Calendar, etiquetando cada evento que crea con una propiedad extendida privada.
- Un motor de colocación puro separado de la API de Apps Script: muestreo ponderado de horas de inicio y duraciones, restricciones de huecos y cadenas, una ventana congelada para los próximos dos días, y un faltante registrado en vez de bloques forzados cuando el objetivo no se alcanza.
- clasp para subir código desde un repo local, con Node.js corriendo los mismos catorce tests del motor en local a través de un stub para la única llamada a Apps Script que hace el código puro. La suite también corre sin cambios dentro del editor de Apps Script.
- Barandas de seguridad como código:
DRY_RUNactivo por defecto, topes por corrida de creaciones y borrados, relectura y verificación de etiqueta antes de cada borrado, y una única función que elimina todos los bloques generados del próximo año. Licencia MIT.