DigitalHubAssist · Documentación del sistema

Sistema de Reservas DHA

Agendamiento bidireccional en tiempo casi real: tu agenda de Zoho bloquea tu página pública, y las reservas de clientes vuelven a Zoho con todos los detalles. Todo sobre planes gratuitos.

🔗 digitalhubassist.ai/agendar 💚 Costo: $0 (free tiers) ⚙️ cron ~30s · bidireccional 🎥 Google Meet incluido
01 Arquitectura y flujos
🗓️
Zoho Calendar
tu agenda real
sync.py
(iCal feed)
🟦
Google Calendar
roberto.aguirre@…
el HUB
Koalendar
lee/escribe
🐨
Koalendar
página + Meet
+ emails
→ Dirección A · Zoho → Google → Koalendar: tus ocupados de Zoho se espejan a Google; Koalendar los lee y bloquea esos horarios en tu página. (sync.py, ~30s)
← Dirección B · Koalendar → Google → Zoho: cada reserva cae en Google; se empuja al calendario Zoho "Reservas" vía API con nombre, email y link de Meet. (push_bookings.py, ~30s)
02 Componentes
Frontend

🌐 /agendar

Ruta SvelteKit en el sitio DHA (Vercel) que embebe la página de Koalendar en un iframe, con marca DHA, idioma EN/ES por ruta.

Booking

🐨 Koalendar

Plan free. Página de reserva, disponibilidad, links de Google Meet automáticos, emails de confirmación. Escribe reservas en Google.

Hub

🟦 Google Calendar

roberto.aguirre@digitalhubassist.ai — el punto central. Koalendar lee (conflictos) y escribe (reservas) aquí.

Agenda real

🗓️ Zoho Calendar

Donde vives tu día a día. Crear/borrar reuniones aquí controla tu disponibilidad. Recibe las reservas en el calendario "Reservas".

Servidor · Hetzner

⚙️ zoho-gcal-sync

~/bin/zoho-gcal-sync/ — scripts Python en cron (~30s). El motor que conecta todo.

Costo

💚 $0 / mes

Koalendar free · Google Meet free · Zoho free · Google/Zoho API free · servidor propio. Sin cargos adicionales.

03 Scripts del motor ~/bin/zoho-gcal-sync/
ScriptQué haceDirección
sync.pyLee el iCal privado de Zoho → espeja eventos "ocupado" en Google (tag zohoSync). Crea/actualiza/borra. Así Koalendar respeta tu agenda.Zoho → Google
push_bookings.pyLee reservas reales de Google → las crea en el calendario Zoho "Reservas" vía API, con nombre, email del invitado, links de cancelar/reprogramar y el link de Meet.Google → Zoho
block.pyBloqueo manual a pedido: add (día), range (rango), open (día salvo franjas), remove (reabrir). Tag manualBlock.Manual
bookings_ics.py(legacy — Opción B, reemplazado por push_bookings.py)
ztoken.pyAccess token de Zoho con caché (~1h) para no golpear el rate-limit del OAuth.Util
run.shWrapper del cron: corre sync.py + push_bookings.py 2× por minuto (~cada 30s).Cron
04 Funcionalidades
Bloqueo automático: tus reuniones de Zoho tapan esos horarios en la página (~30s).
Reservas en Zoho: lo que agendan aparece en tu calendario "Reservas" con todos los datos.
Google Meet: link único por reunión, en el email y en tu Zoho. Gratis, ilimitado.
Cancelar/reprogramar: el invitado lo hace desde su email → se libera el hueco y se limpia de Zoho, solo.
Bloqueo a pedido: "bloquea el 10", "abre solo 2–4pm el 15", "reabre noviembre" — lo ejecuto yo.
Config actual: Ago–Dic cerrado + 2 días/semana con 3 franjas (9:30, 3:30, 4:30).
Zona horaria USA (Eastern) e idioma EN/ES según la ruta.
Marca DHA completa en tu propio dominio.
05 Reglas de oro
Tus reuniones → gestiónalas en Zoho (calendario principal). Crear = bloquea; borrar = libera.
Las reservas de clientes → gestiónalas desde Koalendar / el email (Cancel / Reschedule). NO borres del calendario "Reservas" de Zoho (es un espejo; no cancela la cita real).
Bloquear/reabrir días o franjas → solo pídemelo y lo hago desde el servidor.
06 Referencia técnica
ElementoValor
Link públicodigitalhubassist.ai/agendar
Booking page Koalendarkoalendar.com/e/meet-with-dha
Cuenta Google (hub)roberto.aguirre@digitalhubassist.ai
Zoho — calendar UID principal60c74f6e…9335e62
Zoho — calendario "Reservas" UIDdbecef54…974f8a3
Motor~/bin/zoho-gcal-sync/ (Hetzner) · cron cada minuto → 2 pasadas
AuthGoogle OAuth (proyecto Cloud de robertojavieraguirreg@gmail.com) · Zoho Self Client (DC .com)
Logs~/bin/zoho-gcal-sync/sync.log
DigitalHubAssist · Sistema de Reservas · documentado jul 2026 · bidireccional · tiempo casi real · $0/mes