Meetings
Use Meetings to schedule workspace meetings, invite teammates (and external guests by email), connect a workspace Zoom or Google Meet account, and set one reminder before start.
Access
- Workspace must have the Meetings module installed (included by default; requires Calendar).
- Your role needs
meetings.view(andcreate/update/deletefor edits). - Connecting Zoom/Google requires
meetings.manage_integrations.
Visibility
| Role | What you see |
|---|---|
Staff (no view_all) | Meetings you created, host, or are invited to |
Owner / Admin / Manager (meetings.view_all) | All workspace meetings |
Invitees use the Meetings list/detail as their source of truth. Calendar shows the host’s projected event (Calendar ACLs remain organizer-scoped).
Schedule a meeting
- Open Meetings from the workspace nav.
- Click New meeting.
- Enter title, start/end, timezone, optional agenda.
- Choose a provider:
- None — optional manual join URL
- Google Meet / Zoom — requires a connected workspace account
- Add internal invitees and optional external guests (
Name <email@domain>per line). - Optionally set one reminder (15 minutes, 1 hour, 24 hours, or custom minutes before start).
- Save.
Host defaults to you. Users with meetings.assign_host can reassign the host.
Connect Zoom or Google Meet
- Open Meetings → Integrations (owners/admins with
meetings.manage_integrations). - Click the info icon next to Zoom or Google Meet for step-by-step setup (create the provider OAuth app, required scopes, and how to connect in SaleOS).
- Create an OAuth app in Google Cloud / Zoom Marketplace for your organization.
- Paste the shown OAuth callback URL into that app’s redirect settings (copy from Integrations or the setup guide).
- For Zoom, add scopes
meeting:write:meeting,meeting:read:meeting,meeting:delete:meeting, anduser:read:user(missing write → create error 4711; missing delete → remote cancel fails while SaleOS still cancels locally). - For Google, enable the Meet API and register a localhost or HTTPS redirect URI (Google rejects
http://*.test). Meet creates a joinable space link (not a full Calendar conference). - Save your workspace Client ID and Client secret (optional webhook secret is reserved for a future native webhook integration).
- Click Connect account and approve access with the workspace Google/Zoom user.
Staff then schedule using those workspace connections — not personal accounts or platform-wide keys.
If a selected provider is not connected, scheduling with that provider is blocked. If you change Zoom/Google scopes later, disconnect and connect again so a new token is issued.
Reminder
Creators can set one reminder offset. At that time, the creator, host, and invitees receive:
- In-app notification
- Web push (when subscribed)
External email-only guests receive email only. Cancelling or rescheduling the meeting updates or cancels the pending reminder.
Cancel vs delete
- Cancel — keeps the record, marks status
cancelled, cancels the Calendar projection and pending reminder. Remote Zoom/Google delete is best-effort: if the provider rejects delete (often missingmeeting:delete:meeting), the meeting stays cancelled in SaleOS andprovider_sync_errorexplains the remote failure. - Delete — soft-deletes the meeting and removes the Calendar projection (same best-effort remote delete).
Settings
Workspace Settings → General includes Default meeting provider (meetings_default_provider: none | google_meet | zoom) used to preselect the schedule form.