Calendario Inteligente
El módulo Calendario de GoWeBa es un sistema completo de gestión del tiempo integrado al CRM. No se trata de una simple agenda — es una herramienta inteligente que conecta tus citas con tus contactos, tus tareas, tus facturas y tu asistente IA WEBA. El calendario GoWeBa soporta: calendarios múltiples por usuario, participantes con seguimiento RSVP, recurrencias, recordatorios, sincronización Google Calendar, franjas de disponibilidad públicas (booking), compartir entre colegas, y análisis estadístico.
Arquitectura
Gestión de eventos
Crear un evento
Un evento GoWeBa puede ser creado de varias formas:
- Interfaz de calendario: hacer clic en una franja o el botón « + Nuevo evento »
- WEBA: « Planifica una reunión con Marie mañana a las 14h durante 1 hora »
- Vía una llamada: Voice AI crea el evento durante la llamada telefónica
- Sincronización: importado automáticamente desde Google Calendar
- Booking: un cliente reserva una franja pública
Campos de un evento
Estados de un evento
Visibilidad
Participantes y RSVP
Agregar participantes
Cada evento puede tener participantes internos (miembros de la organización) o externos (contactos GoWeBa o invitados por email):
Seguimiento de respuestas
GoWeBa realiza el seguimiento de las respuestas RSVP en tiempo real:
- Notificación: los invitados reciben un email de invitación con botones RSVP
- Panel de control: el propietario ve las respuestas de un vistazo
- Recordatorio: se envía un recordatorio a los invitados que no han respondido
- Analytics: estadísticas de tasa de respuesta en el panel del calendario
Analytics RSVP
La API /api/calendar/analytics proporciona estadísticas sobre los eventos:
Eventos recurrentes
GoWeBa soporta eventos recurrentes con reglas de repetición flexibles:
Las recurrencias se almacenan en el modelo CalendarRecurrence y están vinculadas al evento maestro. Cada ocurrencia puede ser modificada individualmente (excepción de recurrencia) o en lote. ⚠️ La eliminación de una recurrencia elimina TODAS las ocurrencias futuras. Para eliminar una sola ocurrencia, use « Eliminar solo esta ocurrencia ».
Recordatorios
Cada evento puede tener uno o varios recordatorios configurables:
Los recordatorios predeterminados son: 15 minutos antes (push) y 1 hora antes (email). El usuario puede personalizar los recordatorios por evento.
Disponibilidades y reserva de citas (Booking)
Configurar las disponibilidades
La herramienta Disponibilidades permite definir las franjas durante las cuales estás disponible para citas externas:
- Crear una disponibilidad — Calendario → Disponibilidades → Nueva disponibilidad
- Definir las franjas — Lunes a viernes 9h-17h, duración 30 min, pausa 10 min entre franjas
- Personalizar — Título, descripción, enlace de videoconferencia, color
- Publicar — Generar un enlace público de reserva
- Compartir — Enviar el enlace a los clientes o integrarlo en tu sitio web
El proceso de booking
- El cliente hace clic en el enlace de booking — Página pública con el calendario de disponibilidades
- Selección de la franja — El cliente elige una fecha y un horario disponible
- Formulario — Nombre, email, teléfono (opcional), notas
- Confirmación — El booking se crea con estado CONFIRMED
- Notificaciones — Email de confirmación al cliente + notificación al propietario
- Evento creado — Un CalendarEvent se crea automáticamente en el calendario del propietario
Gestión de bookings
Cada booking posee un cancelToken único que permite al cliente cancelar sin conectarse. 💡 Integra tu enlace de booking en tu firma de email para maximizar las reservas.
Sincronización Google Calendar
GoWeBa puede sincronizarse con Google Calendar para una experiencia unificada:
Funcionalidades de sync
- Importación de eventos Google Calendar → GoWeBa
- Detección de conflictos de calendario
- Actualización bidireccional (según el permiso)
- Sincronización de participantes y RSVP
- Soporte de calendarios múltiples
Configuración
- Ir a Calendario → Sync — Abrir el diálogo de sincronización
- Conectar Google Calendar — Autorizar GoWeBa vía OAuth 2.0
- Seleccionar los calendarios — Elegir qué calendarios Google sincronizar
- Configurar la dirección — Solo importación o bidireccional
- Activar — La sincronización se ejecuta automáticamente
Compartir calendario
Los calendarios pueden ser compartidos entre miembros de la organización:
El compartir se gestiona vía la página Calendario → Compartir. El propietario del calendario controla quién tiene acceso y con qué nivel de permiso.
Casos de uso concretos
Escenario: Planificación vía WEBA
- El usuario escribe en WEBA: — « Planifica una reunión de seguimiento con Acme Inc el martes próximo a las 10h, 1 hora, sala B »
- WEBA extrae los datos — Título: Reunión seguimiento Acme Inc, Martes 10h-11h, Lugar: Sala B
- Verificación de disponibilidad — WEBA verifica que la franja está libre
- Creación del evento — Evento creado con estado CONFIRMED
- Asociación al contacto — El evento se vincula al contacto « Acme Inc » en el CRM
- Notificación — Tarjeta de evento mostrada en el chat con botón « Ver en el calendario »
Escenario: Booking de cliente en línea
- El consultor comparte su enlace de booking — acme.goweba.com/book/consultation
- El cliente abre el enlace — Ve las franjas disponibles para las próximas 2 semanas
- Selección: miércoles 14h — El cliente completa su nombre y email
- Confirmación automática — Email de confirmación enviado al cliente y al consultor
- Recordatorio — El cliente recibe un recordatorio SMS 1 hora antes
- Post-cita — El consultor genera un resumen IA y crea las tareas de seguimiento
Escenario: Resumen IA post-reunión
- La reunión ha terminado — El evento pasa al estado COMPLETED
- El usuario hace clic en « Resumen IA » — WEBA analiza las notas de la reunión
- Resumen estructurado generado — Puntos discutidos, decisiones tomadas, acciones a realizar
- El resumen se almacena — Campo aiSummary del evento
- Acciones creadas — Las tareas de seguimiento se crean automáticamente en el módulo Tareas
Solución de problemas y FAQ
Problemas frecuentes
FAQ
P: ¿Se pueden tener varios calendarios? R: Sí. Cada usuario puede crear varios calendarios (Personal, Trabajo, Proyectos) con colores y parámetros distintos. P: ¿El booking es gratuito para los clientes? R: Sí, la reserva de citas en línea es gratuita para tus clientes. Solo la notificación SMS consume créditos. P: ¿Se puede integrar el calendario en un sitio web externo? R: Sí, el enlace de booking puede ser integrado en un iframe o compartido directamente. Un widget embebible también está disponible. P: ¿WEBA puede verificar mi disponibilidad? R: Sí. Pregunta « ¿Estoy libre el martes por la tarde? » y WEBA consultará tu calendario para darte un resumen de tus franjas libres y ocupadas. P: ¿Cómo exportar mi calendario? R: El calendario puede ser exportado en formato iCal (.ics) compatible con todas las aplicaciones de agenda (Apple Calendar, Outlook, Google Calendar).
— Fin del Módulo 05 —
GoWeBa — Biblia de Operaciones Documento generado el 06 May 2026
| Componente | Rol | Detalle |
|---|---|---|
| UserCalendar | Calendario personal | Cada usuario puede tener varios calendarios (Personal, Trabajo, Proyecto X) |
| CalendarEvent | Evento | Una cita, reunión, llamada, deadline — con participantes y recordatorios |
| CalendarEventAttendee | Participante | Invitados con estado RSVP (ACCEPTED, DECLINED, TENTATIVE, PENDING) |
| CalendarReminder | Recordatorio | Notificaciones antes del evento (email, push, SMS) |
| CalendarRecurrence | Recurrencia | Reglas de repetición (diario, semanal, mensual, personalizado) |
| CalendarAvailability | Disponibilidad | Franjas públicas para la reserva de citas en línea (booking) |
| Booking | Reserva | Un cliente externo reserva una franja vía el enlace público |
| CalendarShare | Compartir | Compartir calendario entre colegas con permisos (VIEW, EDIT) |
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
| title | Texto | ✅ | Nombre del evento |
| description | Texto largo | ❌ | Notas, orden del día, detalles |
| startAt | Fecha/hora | ✅ | Inicio del evento |
| endAt | Fecha/hora | ✅ | Fin del evento |
| timezone | Huso horario | ✅ | Predeterminado: America/Montreal |
| isAllDay | Boolean | ❌ | Evento de día completo (sin hora) |
| location | Texto | ❌ | Lugar físico o dirección |
| meetingLink | URL | ❌ | Enlace de videoconferencia (Zoom, Meet, Teams) |
| color | Hex | ❌ | Color en el calendario |
| status | Enum | ✅ | CONFIRMED, TENTATIVE, CANCELLED, COMPLETED |
| visibility | Enum | ✅ | PUBLIC, PRIVATE, CONFIDENTIAL |
| relatedContactId | UUID | ❌ | Contacto GoWeBa asociado |
| aiSummary | Texto | ❌ | Resumen IA post-reunión |
| Estado | Descripción | Color |
|---|---|---|
| CONFIRMED | Evento confirmado, visible en el calendario | Azul (predeterminado) |
| TENTATIVE | En espera de confirmación | Amarillo / rayado |
| CANCELLED | Cancelado (conservado en el historial) | Gris / tachado |
| COMPLETED | Terminado (pasado + resumen disponible) | Verde |
| Visibilidad | Quién puede ver | Detalles mostrados |
|---|---|---|
| PUBLIC | Todos los miembros de la organización | Título, horario, lugar, participantes |
| PRIVATE | Solo el propietario y los participantes | Título, horario (sin detalles para los demás) |
| CONFIDENTIAL | Solo el propietario | Franja « Ocupado » visible, ningún detalle |
| Campo | Tipo | Descripción |
|---|---|---|
| Dirección de email del participante | ||
| displayName | Texto | Nombre mostrado |
| status | Enum | PENDING, ACCEPTED, DECLINED, TENTATIVE |
| isOrganizer | Boolean | true si es el organizador |
| isRequired | Boolean | true si la presencia es obligatoria |
| contactId | UUID | Enlace a un contacto GoWeBa (si aplica) |
| Métrica | Descripción |
|---|---|
| Total de eventos | Número de eventos en el período |
| Eventos por estado | Distribución CONFIRMED / TENTATIVE / CANCELLED / COMPLETED |
| Total de participantes | Número total de participantes invitados |
| Respuestas RSVP | Distribución ACCEPTED / DECLINED / TENTATIVE / PENDING |
| Tasa de respuesta | Porcentaje de participantes que respondieron |
| Eventos recurrentes | Número de eventos vinculados a una recurrencia |
| Frecuencia | Ejemplo | Descripción |
|---|---|---|
| Diario | Todos los días a las 9h | Stand-up diario |
| Semanal | Cada martes y jueves | Reunión de equipo bisemanal |
| Mensual | El 1ro de cada mes | Revisión mensual |
| Anual | El 15 de marzo cada año | Aniversario, renovación |
| Personalizado | Todos los 2do lunes del mes | Según una regla RRULE |
| Canal | Timing | Ejemplo |
|---|---|---|
| X minutos/horas antes | Email 1 hora antes con detalles del evento | |
| Push navegador | X minutos antes | Notificación push 15 minutos antes |
| SMS | X minutos/horas antes | SMS 30 minutos antes (consume créditos SMS) |
| In-app | X minutos antes | Notificación en la campana GoWeBa |
| Estado | Descripción | Acciones |
|---|---|---|
| CONFIRMED | Booking confirmado | Enviar recordatorio, modificar, cancelar |
| CANCELLED | Cancelado por el cliente o el propietario | La franja vuelve a estar disponible |
| COMPLETED | Cita terminada | Agregar notas, resumen IA |
| NO_SHOW | El cliente no se presentó | Marcar como no-show para estadísticas |
| Permiso | Ver eventos | Crear eventos | Modificar eventos | Eliminar |
|---|---|---|---|---|
| VIEW | ✅ | ❌ | ❌ | ❌ |
| EDIT | ✅ | ✅ | ✅ | ❌ |
| Problema | Causa probable | Solución |
|---|---|---|
| Evento en el horario incorrecto | Huso horario incorrecto | Verificar el huso horario en el perfil de usuario (America/Montreal) |
| Booking no visible | Disponibilidad no publicada | Asegurarse de que la disponibilidad está activa y que el enlace está generado |
| Sync Google falla | Token OAuth expirado | Reconectarse vía Calendario → Sync |
| Participante no notificado | Email inválido o spam | Verificar la dirección de email y los filtros anti-spam |
| Recordatorio no recibido | Notificaciones desactivadas | Verificar las preferencias de notificación del navegador y en Configuración |
| Recurrencia no modificada | Modificación de la ocurrencia en lugar de la serie | Elegir « Modificar todas las ocurrencias » en el diálogo |
| Franja de booking ya tomada | Conflicto de calendario | La franja está ocupada por otro evento — configurar el buffer time |