Slotara provides two-way Google Calendar synchronisation. New bookings create calendar events for the provider; when providers block time on their Google Calendar, those slots are automatically blocked in Slotara's booking engine.
As of v1.5.0, virtual services can also auto-generate a Google Meet link for each booking โ delivered in the confirmation email, iCal file, and booking detail view.
When a booking is confirmed, rescheduled, or cancelled:
SyncBookingToGoogleCalendar job is dispatched (if calendar sync is enabled for that provider)google_calendar_event_id on the booking record for future updatesphp artisan calendar:sync-busy
provider_slot_overrides (type blocked)https://yourdomain.com/manage/calendar/oauth/callback.env:GOOGLE_CALENDAR_CLIENT_ID=your-client-id
GOOGLE_CALENDAR_CLIENT_SECRET=your-client-secret
{warning} If Google shows Error 400: redirect_uri_mismatch, the callback URL above is missing from your OAuth client's Authorized redirect URIs. If it shows Access blocked: app has not completed verification, your OAuth consent screen is in Testing โ add each provider's Google account as a test user, or publish the app.
Ensure the Laravel scheduler is running (the calendar:sync-busy command is scheduled hourly):
* * * * * cd /path-to-project && php artisan schedule:run >> /dev/null 2>&1
Provider clicks "Connect Google"
โโโบ GET /manage/calendar/oauth?provider_id={id}
โโโบ Google OAuth consent screen
โโโบ GET /manage/calendar/oauth/callback
โโโบ Stores access_token + refresh_token on provider record
(encrypted; tokens refreshed automatically before API calls)
From Manage โ Communication โ Calendar Sync, click Disconnect next to a provider to revoke the integration. The provider's tokens are cleared from the database. Future bookings will not sync until the provider reconnects.
When a provider has Calendar sync connected and a service has Is Virtual enabled with Auto-generate Google Meet link on, Slotara requests a Meet link from the Calendar API at booking time.
Client books virtual service
โโโบ BookingWizard calls GoogleCalendarSyncService synchronously
โโโบ POST /calendar/v3/calendars/{id}/events?conferenceDataVersion=1
โโโบ Google returns hangoutLink (or entryPoints fallback)
โโโบ meet_link stored on booking
โโโบ Confirmation email fires with "Join Video Call" button
| Requirement | Details |
|---|---|
| Provider connected | Provider must have Google Calendar sync authorised (Manage โ Integrations โ Calendar Sync) |
| Google account | The connected account must support Google Meet โ Google Workspace or a personal Gmail with Meet enabled |
| Service is virtual | is_virtual = true and generate_meet_link = true on the service |
To use a custom room link instead of auto-generating Meet:
The custom URL will appear in emails and iCal for all bookings of that service.
generate_meet_link is a per-service setting. You can have some services use Google Meet and others use a static Zoom room โ each service is configured independently.
{warning.fa-exclamation-triangle} If Meet generation fails (provider not connected, or Google account does not support conferencing), a warning is logged and
meet_linkis left null. The email will fall back toservice.video_linkif set, or omit the video button entirely.
| File | Purpose |
|---|---|
app/Support/TenantCalendarSettings.php |
Settings accessor |
app/Services/GoogleCalendarSyncService.php |
Google Calendar API wrapper |
app/Jobs/SyncBookingToGoogleCalendar.php |
Outbound create/update job |
app/Jobs/DeleteBookingFromGoogleCalendar.php |
Outbound delete job |
app/Console/Commands/SyncGoogleCalendarBusy.php |
Inbound busy-block command |
app/Filament/Tenant/Pages/CalendarSettings.php |
Tenant settings page |
app/Http/Controllers/GoogleCalendarController.php |
OAuth redirect + callback |
tests/Feature/GoogleCalendarSyncTest.php |
Feature test suite |