Smart Calendar
The GoWeBa Calendar module is a comprehensive time-management system integrated with the CRM. It is not a simple agenda — it is an intelligent tool that connects your appointments to your contacts, tasks, invoices, and your WEBA AI assistant. The GoWeBa calendar supports: multiple calendars per user, participants with RSVP tracking, recurrences, reminders, Google Calendar sync, public availability slots (booking), sharing between colleagues, and statistical analysis.
Architecture
Event Management
Creating an Event
A GoWeBa event can be created in several ways:
- Calendar interface: click on a time slot or the "+ New Event" button
- WEBA: "Schedule a meeting with Marie tomorrow at 2 PM for 1 hour"
- Via a call: Voice AI creates the event during the phone call
- Sync: automatically imported from Google Calendar
- Booking: a client books a public slot
Event Fields
Event Statuses
Visibility
Participants and RSVP
Adding Participants
Each event can have internal participants (organization members) or external participants (GoWeBa contacts or guests invited by email):
Response Tracking
GoWeBa tracks RSVP responses in real time:
- Notification: invitees receive an invitation email with RSVP buttons
- Dashboard: the owner sees responses at a glance
- Reminder: a reminder is sent to invitees who have not responded
- Analytics: response-rate statistics in the calendar dashboard
RSVP Analytics
The /api/calendar/analytics API provides event statistics:
Recurring Events
GoWeBa supports recurring events with flexible repetition rules:
Recurrences are stored in the CalendarRecurrence model and linked to the master event. Each occurrence can be modified individually (recurrence exception) or in bulk. ⚠️ Deleting a recurrence deletes ALL future occurrences. To delete a single occurrence, use "Delete this occurrence only."
Reminders
Each event can have one or more configurable reminders:
Default reminders are: 15 minutes before (push) and 1 hour before (email). Users can customize reminders per event.
Availability and Online Booking
Setting Up Availability
The Availability tool lets you define the time slots during which you are available for external appointments:
- Create an availability — Calendar → Availability → New Availability
- Define the slots — Monday–Friday 9 AM–5 PM, 30-minute duration, 10-minute buffer between slots
- Customize — Title, description, video-conference link, color
- Publish — Generate a public booking link
- Share — Send the link to clients or embed it on your website
The Booking Process
- The client clicks the booking link — Public page showing the availability calendar
- Slot selection — The client picks an available date and time
- Form — Name, email, phone (optional), notes
- Confirmation — The booking is created with CONFIRMED status
- Notifications — Confirmation email to the client + notification to the owner
- Event created — A CalendarEvent is automatically created in the owner’s calendar
Booking Management
Each booking has a unique cancelToken allowing the client to cancel without logging in. 💡 Add your booking link to your email signature to maximize reservations.
Google Calendar Sync
GoWeBa can sync with Google Calendar for a unified experience:
Sync Features
- Import Google Calendar events → GoWeBa
- Calendar conflict detection
- Bidirectional update (depending on permission)
- Participant and RSVP synchronization
- Multi-calendar support
Setup
- Go to Calendar → Sync — Open the sync dialog
- Connect Google Calendar — Authorize GoWeBa via OAuth 2.0
- Select calendars — Choose which Google calendars to sync
- Configure direction — Import only or bidirectional
- Activate — Sync runs automatically
Calendar Sharing
Calendars can be shared between organization members:
Sharing is managed via the Calendar → Sharing page. The calendar owner controls who has access and at what permission level.
Real-world Use Cases
Scenario: Scheduling via WEBA
- The user types in WEBA: — "Schedule a follow-up meeting with Acme Inc next Tuesday at 10 AM, 1 hour, Room B"
- WEBA extracts the data — Title: Follow-up meeting Acme Inc, Tuesday 10–11 AM, Location: Room B
- Availability check — WEBA verifies the slot is free
- Event creation — Event created with CONFIRMED status
- Contact association — The event is linked to the "Acme Inc" contact in the CRM
- Notification — Event card displayed in the chat with a "View in calendar" button
Scenario: Online client booking
- The consultant shares their booking link — acme.goweba.com/book/consultation
- The client opens the link — They see available slots for the next 2 weeks
- Selection: Wednesday 2 PM — The client fills in their name and email
- Automatic confirmation — Confirmation email sent to the client and the consultant
- Reminder — The client receives an SMS reminder 1 hour before
- Post-appointment — The consultant generates an AI summary and creates follow-up tasks
Scenario: AI post-meeting summary
- The meeting is over — The event moves to COMPLETED status
- The user clicks "AI Summary" — WEBA analyzes the meeting notes
- Structured summary generated — Points discussed, decisions made, action items
- Summary stored — In the event’s aiSummary field
- Actions created — Follow-up tasks are automatically created in the Tasks module
Troubleshooting and FAQ
Common Issues
FAQ
Q: Can I have multiple calendars? A: Yes. Each user can create multiple calendars (Personal, Work, Projects) with distinct colors and settings. Q: Is booking free for clients? A: Yes, online appointment booking is free for your clients. Only the SMS notification consumes credits. Q: Can I embed the calendar on an external website? A: Yes, the booking link can be embedded in an iframe or shared directly. An embeddable widget is also available. Q: Can WEBA check my availability? A: Yes. Ask "Am I free Tuesday afternoon?" and WEBA will check your calendar to give you a summary of your free and busy slots. Q: How do I export my calendar? A: The calendar can be exported in iCal (.ics) format, compatible with all calendar apps (Apple Calendar, Outlook, Google Calendar).
— End of Module 05 —
GoWeBa — Operations Bible Document generated on May 6, 2026
| Component | Role | Detail |
|---|---|---|
| UserCalendar | Personal calendar | Each user can have multiple calendars (Personal, Work, Project X) |
| CalendarEvent | Event | An appointment, meeting, call, deadline — with participants and reminders |
| CalendarEventAttendee | Participant | Invitees with RSVP status (ACCEPTED, DECLINED, TENTATIVE, PENDING) |
| CalendarReminder | Reminder | Pre-event notifications (email, push, SMS) |
| CalendarRecurrence | Recurrence | Repetition rules (daily, weekly, monthly, custom) |
| CalendarAvailability | Availability | Public slots for online appointment booking |
| Booking | Reservation | An external client books a slot via the public link |
| CalendarShare | Sharing | Calendar sharing between colleagues with permissions (VIEW, EDIT) |
| Field | Type | Required | Description |
|---|---|---|---|
| title | Text | ✅ | Event name |
| description | Long text | ❌ | Notes, agenda, details |
| startAt | Date/time | ✅ | Event start |
| endAt | Date/time | ✅ | Event end |
| timezone | Timezone | ✅ | Default: America/Montreal |
| isAllDay | Boolean | ❌ | All-day event (no time) |
| location | Text | ❌ | Physical address or location |
| meetingLink | URL | ❌ | Video-conference link (Zoom, Meet, Teams) |
| color | Hex | ❌ | Calendar display color |
| status | Enum | ✅ | CONFIRMED, TENTATIVE, CANCELLED, COMPLETED |
| visibility | Enum | ✅ | PUBLIC, PRIVATE, CONFIDENTIAL |
| relatedContactId | UUID | ❌ | Associated GoWeBa contact |
| aiSummary | Text | ❌ | AI-generated post-meeting summary |
| Status | Description | Color |
|---|---|---|
| CONFIRMED | Confirmed event, visible in the calendar | Blue (default) |
| TENTATIVE | Pending confirmation | Yellow / hatched |
| CANCELLED | Cancelled (kept in history) | Gray / strikethrough |
| COMPLETED | Finished (past + summary available) | Green |
| Visibility | Who can see | Details displayed |
|---|---|---|
| PUBLIC | All organization members | Title, time, location, participants |
| PRIVATE | Only the owner and participants | Title, time (no details for others) |
| CONFIDENTIAL | Only the owner | "Busy" slot visible, no details |
| Field | Type | Description |
|---|---|---|
| Participant’s email address | ||
| displayName | Text | Display name |
| status | Enum | PENDING, ACCEPTED, DECLINED, TENTATIVE |
| isOrganizer | Boolean | true if this is the organizer |
| isRequired | Boolean | true if attendance is mandatory |
| contactId | UUID | Link to a GoWeBa contact (if applicable) |
| Metric | Description |
|---|---|
| Total events | Number of events in the period |
| Events by status | Distribution: CONFIRMED / TENTATIVE / CANCELLED / COMPLETED |
| Total participants | Total number of invited participants |
| RSVP responses | Distribution: ACCEPTED / DECLINED / TENTATIVE / PENDING |
| Response rate | Percentage of participants who responded |
| Recurring events | Number of events linked to a recurrence |
| Frequency | Example | Description |
|---|---|---|
| Daily | Every day at 9 AM | Daily standup |
| Weekly | Every Tuesday and Thursday | Bi-weekly team meeting |
| Monthly | 1st of every month | Monthly review |
| Yearly | March 15 every year | Anniversary, renewal |
| Custom | Every 2nd Monday of the month | Custom RRULE |
| Channel | Timing | Example |
|---|---|---|
| X minutes/hours before | Email 1 hour before with event details | |
| Browser push | X minutes before | Push notification 15 minutes before |
| SMS | X minutes/hours before | SMS 30 minutes before (consumes SMS credits) |
| In-app | X minutes before | Notification in the GoWeBa bell |
| Status | Description | Actions |
|---|---|---|
| CONFIRMED | Booking confirmed | Send reminder, modify, cancel |
| CANCELLED | Cancelled by the client or the owner | The slot becomes available again |
| COMPLETED | Appointment finished | Add notes, AI summary |
| NO_SHOW | The client did not show up | Mark as no-show for statistics |
| Permission | View events | Create events | Edit events | Delete |
|---|---|---|---|---|
| VIEW | ✅ | ❌ | ❌ | ❌ |
| EDIT | ✅ | ✅ | ✅ | ❌ |
| Issue | Likely cause | Solution |
|---|---|---|
| Event at the wrong time | Incorrect timezone | Check the timezone in the user profile (America/Montreal) |
| Booking not visible | Availability not published | Ensure the availability is active and the link is generated |
| Google sync fails | OAuth token expired | Reconnect via Calendar → Sync |
| Participant not notified | Invalid email or spam filters | Check the email address and anti-spam filters |
| Reminder not received | Notifications disabled | Check browser notification preferences and in Settings |
| Recurrence not updated | Edited the occurrence instead of the series | Choose "Edit all occurrences" in the dialog |
| Booking slot already taken | Calendar conflict | The slot is occupied by another event — configure buffer time |