Appointment Scheduler App Overview
Publish a booking page with your true availability — invitees pick a genuinely-free slot at /meet/your-page, the meeting lands on every calendar automatically, and confirmations, reminders, and self-service reschedule links go out without any back-and-forth email.
What is the Appointment Scheduler App?
Appointment Scheduler is a Calendly-class scheduling app built on the MangoApps calendar core. Employees and teams publish branded booking pages, and external customers, candidates, vendors — or colleagues — book time against availability that tells the truth: internal calendar events, Google and Outlook busy time, approved leave, and already-confirmed appointments are all subtracted before a slot is ever offered. Every booking becomes a real calendar event with confirmation email, ICS invite, reminders, and a secure manage link for the invitee.
Core Value Proposition:
- 🎯 Kill the back-and-forth — invitees self-schedule from only genuinely-free slots; no “does Tuesday work?” email chains
- 🛡️ Double-booking-proof — server-side slot re-validation, a live Google/Outlook free/busy re-check at confirmation time, and a database uniqueness backstop
- 🔗 One platform — bookings create real calendar events, reserve meeting rooms, pre-register visitors, and log to the CRM automatically
- 🏭 Frontline-ready — availability can be constrained to published shifts, so slots are only offered when the host is actually scheduled to work
Key Concepts (How It Works)
If you only read one section, read this — it explains the model behind the screens.
The three building blocks: Booking Page → Meeting Type → Appointment
Everything in the app is one of three things, and each carries different settings:
- Booking Page — the published surface at
/meet/your-slug. It owns the availability (weekly windows and date overrides), the timezone, the visibility setting, and — for team pages — the member list. One host (or team) can have several pages. - Meeting Type — a bookable kind of meeting on a page (“30-min intro call”, “60-min consult”). It carries the slot parameters: duration, buffers before/after, minimum notice, rolling booking window, optional daily cap, location mode (virtual / in person / phone), custom intake questions, and optional host-written notes for the confirmation, reminder, and follow-up emails. A page needs at least one active meeting type to be bookable.
- Appointment — a confirmed booking an invitee made against a meeting type. It stores the invitee’s details and answers, owns the calendar event, and carries an unguessable manage token — the link in the invitee’s email that lets them cancel or reschedule without an account.
A common confusion: availability lives on the page; slot rules live on the type. “Mondays 9–5” is a page setting; “45 minutes with a 15-minute buffer and 24 hours’ notice” is a type setting. Two types on the same page share the same weekly windows but can offer very different slots.
How a slot becomes offerable (and why a slot might not show)
For each date, the engine starts from the page’s availability windows (weekly rules, replaced or blocked by any date override), subtracts every source of busy time for the host, then cuts what remains into slots of the type’s duration plus buffers. Busy time is unioned from:
- Internal calendar events (including the Google Calendar inbound mirror)
- Outlook / Microsoft 365 busy time, fetched live via a connected Microsoft account
- Approved leave — folded in when the admin toggle “Treat approved leave as busy time” is on (default on)
- Already-confirmed appointments on any of the host’s pages
A slot is then dropped if it starts before the type’s minimum notice, falls outside the rolling window (e.g. “bookable up to 30 days out”), or the host already hit the type’s max per day cap. So “why isn’t 2pm showing?” is almost always one of: a calendar event or leave overlaps it (including buffer time), it’s inside the minimum-notice window, or the daily cap is reached.
Shift modes (optional, per page) add a frontline dimension: constrain to shifts offers slots only inside the host’s published shifts; block during shifts does the inverse and blocks them.
What makes someone a member, an admin, or an app admin?
- Member (host) — any signed-in user with the app enabled. Members create and manage their own booking pages and see their own appointments, dashboard stats, and analytics.
- Admin — anyone with the platform Admin/Owner role, or a user granted the app-admin role for Appointment Scheduler specifically. Admins see all pages and appointments in the business, and they own the Admin → Settings tab (the tenant-wide toggles).
- There is no separate “viewer” tier — visibility is simply mine vs. everyone’s, decided by the admin check.
Solo pages vs. team pages — and the three team modes
A page is solo (one owner-host) or team (a member list). Team pages unlock three assignment modes on their meeting types:
- Round-robin — a slot is offered when any member is free. At booking time the app assigns the member who was assigned longest ago (with a per-member priority as tiebreaker) and who passes a live free/busy check. Good for “book a demo with our team.”
- Collective — a slot is offered only when every member is free, and all members are attached to the one meeting. Good for panel interviews and joint calls.
- Group — one host, many seats (a configurable seat capacity, e.g. a 20-seat orientation session). The slot stays bookable until its confirmed seat count hits the cap; all attendees share a single calendar event.
Round-robin and collective require a team page with at least 2 members — the app enforces this.
What the waitlist is (group sessions only) — and what it is not
A waitlist exists only for group meeting types, and only for a slot that is genuinely full (confirmed seats have hit the capacity). On the public page, a full group slot still appears, but instead of a booking form it offers a short “join the waitlist” form (name + email). Joining is idempotent — submitting twice, or two tabs racing, leaves exactly one entry rather than erroring.
The important thing to understand is what happens when a seat frees up. When someone cancels or reschedules out of a full group slot, the app emails everyone waiting for that exact meeting-type-and-time, and the first person to click through and rebook gets the seat. It is:
- Not an auto-booking — nobody is booked without acting.
- Not a held or reserved seat — the seat is open to all waitlisters (and to the general public) until someone actually books it.
- Not a queue with position numbers — there is no “you are 3rd in line.”
- Once per person, per slot — each waitlist entry is notified exactly once; the notification stamp is the claim, so overlapping cancellations can’t double-email the same person.
Solo, round-robin, and collective types have no waitlist — a full slot there simply stops being offered.
Booking-page branding vs. the meeting type’s email notes
Two different things shape what an invitee sees, and they live at different levels:
- Page branding (on the booking page) controls the public page’s appearance: a logo URL, an accent color (hex), and a welcome message up to 300 characters. It also carries the list of embed domains — the external hostnames allowed to iframe this page (up to 10; bare hostnames, and localhost-style entries are rejected).
- Email notes (on the meeting type) control email copy — separate host-written notes appended to the confirmation, reminder, and follow-up emails.
So “change what the booking page looks like” is a page setting; “change what the confirmation email says” is a meeting-type setting. Branding never appears in email, and email notes never appear on the page.
Cancel vs. reschedule (they are not the same record operation)
Cancelling flips the appointment to cancelled, removes the calendar event (sending an ICS CANCEL so it disappears from the invitee’s calendar), releases any auto-reserved room, cancels any pre-registered visitor pass, and emails the invitee. Rescheduling is cancel-plus-rebook in one step: a brand-new appointment is created at the new time and the old one is marked rescheduled (not cancelled) with a link between the two — so analytics never counts one meeting as two bookings, and the audit trail preserves the whole chain. Both the invitee (via their manage link) and the host (from the Appointments tab) can cancel or reschedule.
Page visibility: public, organization-only, link-only
- Public — anyone with the link can view and book; the page can also surface internally (e.g. the “Book time” button on a colleague’s profile).
- Organization only — invitees must sign in as a member of your organization before they can see slots or book. Use this for internal-only office hours.
- Link only — bookable by anyone who has the URL, but not surfaced in internal discovery.
The invitee’s manage link works regardless of visibility — there, the unguessable token is the credential.
What happens automatically vs. what you configure
Automatic on every booking: the calendar event (with the invitee attached and Google/Outlook sync), the confirmation email with ICS invite and manage link, a host in-app notification, the audit-log entry, CRM account linking when the invitee’s email matches exactly one account, and — if configured on the type — meeting-room auto-reservation and Guest Pass visitor pre-registration. Automatic on cancel or reschedule out of a full group slot: the waitlist email fan-out. Automatic on schedule: the reminder sweep (invitee email + host notification at the tenant-configured lead time), the optional invitee SMS reminder, and the post-meeting follow-up email — which sends only when the meeting type has a follow-up note written; the note itself is the opt-in. Manual / configured: pages, types, availability, branding, team membership, routing, and the tenant admin toggles.
Why an SMS reminder needs two yeses
Text reminders are the one channel that requires agreement from both sides, and both must be true:
- The tenant admin turns on “Send SMS reminders” — this is off by default, unlike email reminders.
- The invitee opts in on the booking form — they must enter a phone number and tick “Text me a reminder before the meeting.”
If either is missing, no text is sent (the email reminder is unaffected). The SMS is deliberately short — meeting type, host’s first name, start time in the invitee’s own timezone, and the manage link. Two details worth knowing: the opt-in carries across a reschedule, so an invitee who moves their meeting doesn’t silently lose their reminder; and an SMS only rides along with an email reminder sent in the same sweep, so a booking whose email reminder already went out never receives a late, orphaned text.
At a Glance
| 🔗 Integrations | 📱 Mobile Ready | 🌐 Public Booking | 🤖 AI Agent |
|---|---|---|---|
| 7+ apps | ✅ Yes | ✅ No login needed | ✅ Yes |
Perfect For:
- 🧑💼 Anyone who takes meetings — every employee can publish a personal
/meetlink for 1:1s, office hours, and customer calls - 👥 Teams with shared demand — round-robin sales/demo rotation, collective panel bookings, group sessions with seat caps
- 🏭 Frontline & HR teams — shift-aware availability plus HR/IT/Benefits office-hours pages colleagues book without email tag
How It Works
The Booking Flow
┌─────────────────────────────────────────────────────────────────────────────┐
│ BOOKING JOURNEY │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ HOST INVITEE (no login) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ CREATE PAGE │ share │ OPEN /meet/ │ │ PICK DATE │ │
│ │ + types │─────────────▶│ your-page │─────▶│ & TIME │ │
│ │ + availability│ link │ (routing Q?) │ │ (their tz) │ │
│ └──────────────┘ └──────────────┘ └──────┬───────┘ │
│ ▼ │
│ ┌───────────────────────────┐ │
│ │ CONFIRM-TIME RE-CHECK │ │
│ │ slot still offerable? │ │
│ │ live Google/Outlook │ │
│ │ free/busy re-check │ │
│ └────────────┬──────────────┘ │
│ ▼ │
│ ┌────────────────────────────────────────────────────────────────────────┐ │
│ │ APPOINTMENT CONFIRMED │ │
│ │ calendar event (+ sync) · ICS confirmation email · manage link │ │
│ │ host notified · room auto-reserved · guest pre-registered · CRM │ │
│ └───────────────────────────┬────────────────────────────────────────────┘ │
│ │ │
│ ┌───────────────┼────────────────┐ │
│ ▼ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │ REMINDER │ │ RESCHEDULE / │ │ FOLLOW-UP │ │
│ │ (email+inbox)│ │ CANCEL (link)│ │ (if note set)│ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
Integration Ecosystem
┌──────────────────────┐
│ APPOINTMENT SCHEDULER │
└──────────┬───────────┘
│
┌────────────┬───────────┬───────┼────────┬────────────┬───────────┐
▼ ▼ ▼ ▼ ▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌─────────┐ ┌────────┐ ┌─────────┐ ┌─────────┐ ┌────────┐
│ CALENDAR │ │ LEAVE │ │ SHIFTS │ │BOOKINGS│ │ GUEST │ │ CRM │ │ ASK AI │
│(Google / │ │(approved │ │(publish-│ │(rooms │ │ PASS │ │(GTM/CS │ │(agent) │
│ Outlook) │ │ = busy) │ │ed only) │ │auto- │ │(visitor │ │ account │ │ │
│ │ │ │ │ │ │reserve)│ │pre-reg) │ │ + note) │ │ │
└────┬─────┘ └────┬─────┘ └────┬────┘ └───┬────┘ └────┬────┘ └────┬────┘ └───┬────┘
▼ ▼ ▼ ▼ ▼ ▼ ▼
Event of Time off Slots only Room booked Reception Meeting on Manage
record + never gets during your on confirm, expects the account pages &
2-way sync booked over shifts freed on the guest timeline bookings
cancel by chat
Key Features
📄 Booking Pages
Your published scheduling surface — live in minutes.
| Feature | Description |
|---|---|
| Vanity URL | Every page gets /meet/your-slug (lowercase letters, numbers, hyphens) |
| Visibility | Public, Organization-only (sign-in required), or Link-only |
| Timezone-true | The page has a home timezone; invitees see slots converted to their timezone |
| Activate / deactivate | Toggle the public link on and off without deleting anything |
| Expiry | Optional end date after which the page stops accepting bookings |
| Embed | Copy-paste iframe snippet to embed the page on any external site, plus an allowlist of up to 10 external hostnames permitted to frame it |
| Branding | Logo URL, accent color (hex), and a welcome message up to 300 characters shown on the public page |
| Duplicate | One click copies the page — meeting types, weekly rules, future date overrides, and team members come along |
💡 Pro Tip: Deactivating a page (or letting it expire) immediately stops new bookings — including scripted replays — while keeping every existing appointment and its history intact. Deleting a page is blocked while appointments exist.
💡 Pro Tip: Duplicating is the fastest way to stand up a near-identical page (a second region, a colleague’s copy of a team page). The copy always arrives inactive with a fresh URL and a clean round-robin rotation, so you can adjust it before anyone can book — and only future date overrides carry over, since past days off are history rather than setup.
🗓️ Meeting Types
Each page offers one or more bookable meeting kinds, each with its own slot rules.
| Setting | What it does |
|---|---|
| Duration | 1 minute to 8 hours |
| Buffers | Up to 4 hours of protected time before and/or after each meeting |
| Minimum notice | Stop last-second bookings (“at least 24 hours ahead”) |
| Rolling window | How far out invitees can book (up to 365 days) |
| Daily cap | Optional max confirmed bookings per day for this type |
| Location mode | Virtual (uses the host’s saved meeting link), In person, or Phone |
| Intake questions | Custom questions — text, long text, dropdown, checkbox — each optionally required (enforced server-side) |
| Email notes | Host-written notes appended to the confirmation, reminder, and follow-up emails |
| Duplicate | Copy a type onto the same page as an inactive draft, so a live type is never accidentally cloned into public view |
Use Case: A benefits specialist offers a “15-min quick question” type with zero buffer and a “60-min enrollment consult” with a 15-minute buffer and a required “What plan are you on?” dropdown — on the same page, sharing the same weekly hours.
⏰ Availability: Weekly Rules + Date Overrides
- Weekly rules — recurring windows per weekday (“Mondays 09:00–17:00”), defined in the page’s timezone and DST-safe.
- Date overrides — exceptions for a specific date: mark the day closed (vacation, holiday) or replace the weekly windows with custom hours for just that date.
- Shift modes — constrain to shifts (offer slots only inside the host’s published shifts) or block during shifts (the inverse). Only published schedules count — draft shifts never leak into availability.
💡 Pro Tip: Frontline teams should use constrain to shifts instead of maintaining weekly rules by hand — availability then follows the roster automatically, week after week.
👥 Team Scheduling (Round-Robin · Collective · Group)
Add members to a team page, then pick the assignment mode per meeting type:
| Mode | Slot is offered when… | Who attends | Typical use |
|---|---|---|---|
| Round-robin | any member is free | The member assigned longest ago (priority as tiebreaker) | Sales/demo rotation, support intake |
| Collective | every member is free | All members | Panel interviews, joint calls |
| Group | seats remain (configurable capacity, up to 500) | One host + up to N invitees | Orientations, info sessions, classes |
Round-robin re-checks the winning member’s live free/busy before assigning; group sessions share a single calendar event, and a cancelling attendee is dropped from the invite while the session survives for everyone else.
📋 Group-Session Waitlist
When a group slot sells out, the demand doesn’t have to disappear.
| Behavior | Detail |
|---|---|
| Where it appears | Only on full group-session slots on the public page — full slots stay visible and swap the booking form for a join form |
| What’s asked | Name and email (the invitee’s timezone is captured alongside) |
| Double-submit safe | Joining twice — or two tabs racing — leaves exactly one entry, never an error |
| When a seat frees | A cancel or reschedule out of that slot emails every waiting person for that meeting-type-and-time |
| How the seat is won | First to click through and rebook — no auto-booking, no held seat, no queue position |
| Exactly once | Each entry is notified a single time; the notification stamp doubles as the claim, so overlapping cancellations can’t double-email |
💡 Pro Tip: Waitlists turn a full orientation or info session into a demand signal — a slot with a long waitlist is the clearest evidence you should add another session.
🧭 Routing Forms
Put a question in front of the calendar: “What do you need help with?” with options that each route to a different booking page (“Billing → the billing team’s page, Technical → support engineering”). Invitees who pick an option land on the right page — and a “none of these” path books on the current page. Routing shows before any slots whenever at least one option is configured.
🌐 The Public /meet Experience
- No login required — external customers, candidates, and vendors book without an account (organization-only pages are the exception: they require sign-in, by design).
- Timezone-aware picker — a date list showing only days with real openings, then slots rendered in the invitee’s own timezone.
- Required questions enforced server-side — a “required” intake question is real, not just a label.
- Typed input preserved — if a booking bounces (e.g. the slot was just taken), the invitee’s name, email, and answers are prefilled so they only re-pick the time.
- Rate-limited — per-visitor and per-business budgets on browsing and booking keep the public surface from being abused.
- Kill switch — an admin toggle disables the entire public
/meetsurface for the tenant in one click.
🛡️ Double-Booking Prevention (three layers)
- Server-side slot re-validation — the chosen time must still be one of the currently-offerable slots at confirm time; the client’s value is never trusted.
- Live provider re-check — a real-time Google/Outlook free/busy call for the concrete host at the moment of confirmation, so a minutes-stale calendar mirror can’t cause a clash.
- Database backstop — a uniqueness constraint turns a race between two simultaneous invitees into a clean “that time was booked a moment ago — pick another slot.”
✉️ Invitee Emails & Self-Service Manage Links
The invitee is external — email is their channel, and every email carries their secure manage link.
| When | Includes | |
|---|---|---|
| Confirmation | Immediately on booking | ICS calendar invite + manage link + host’s confirmation note |
| Reminder | N hours before (tenant-configured, 1–168; default 24) | Meeting details in the invitee’s timezone + host’s reminder note |
| Cancellation | On cancel (by either side) | ICS CANCEL that removes the entry from their calendar |
| Follow-up | After the meeting ends | The host’s follow-up note — sent only when the type has one written |
| Waitlist seat opened | A seat frees in a full group slot | Sent to everyone waiting for that slot; first to rebook takes the seat |
From the manage link, invitees see live booking status and can cancel (with an optional reason) or reschedule onto any currently-open slot — no login, no email chain.
📱 SMS Reminders (opt-in on both sides)
An optional text reminder for invitees, requiring two independent yeses:
- The tenant admin enables “Send SMS reminders to invitees who opt in” — off by default.
- The invitee supplies a phone number on the booking form and ticks “Text me a reminder before the meeting.”
The text is deliberately short — meeting type, host’s first name, start time in the invitee’s own timezone, and the manage link — and it goes out on the same schedule as the email reminder. The opt-in survives a reschedule, so moving a meeting doesn’t silently cancel the reminder, and each booking is texted at most once.
🔔 Host Notifications
Hosts are notified through the standard in-app notification pipeline (with its own email/push preference gating):
| Notification | Trigger |
|---|---|
| New booking | An invitee books — who, which type, when, via which page |
| Cancelled | A booking is cancelled (with the invitee’s reason, when given) |
| Upcoming | The reminder sweep pings the host ahead of the meeting |
🗂️ Host & Admin Surfaces
- Dashboard — your active pages, upcoming appointments (including in-progress), and this month’s booked/cancelled counts.
- Booking Pages — create, edit, activate/deactivate; the editor covers types, availability, team members, routing, and the embed snippet.
- Appointments — list and detail views with host-side cancel and reschedule (a slot picker mirroring the invitee flow).
- Analytics — server-rendered: upcoming/completed/cancelled totals over 90 days, cancellation rate, average booking lead time, an 8-week booking trend, top pages, top meeting types, and a booking-source breakdown (public link, embed, colleague profile, API, AI Front Office).
- Directory — an internal, searchable list of colleagues you can book time with: every active, org-visible, bookable page in the business, searchable by colleague name or page title. This is the internal discovery surface — link-only pages are deliberately excluded.
- Admin → Settings — the tenant toggles (below).
- Mobile — a phone-optimized view at
/m/apps/appointment-scheduler: upcoming appointments (with cancel) and your pages with shareable links. Authoring stays on desktop. - Dashboard widget — a “My Appointments” home widget showing your next bookings.
- Colleague profiles — a “Book time” button appears on a colleague’s profile when they have a bookable org-visible page.
- API — REST endpoints to list booking pages and appointments, fetch one, cancel, and reschedule.
⚙️ Admin Settings
| Setting | Default | What it gates |
|---|---|---|
| AI Agent | On | Whether the Appointment Scheduler agent answers in Ask AI |
| Public booking | On | The entire unauthenticated /meet surface for the tenant |
| Email reminders | On | The reminder sweep’s invitee emails and host pings |
| Reminder lead time | 24 hours | How many hours before the meeting reminders go out |
| SMS reminders | Off | Whether opted-in invitees also get a text reminder |
| Leave blocks availability | On | Whether approved leave is subtracted from bookable time |
| Reschedule emails | On | Sends a dedicated “appointment moved” email (with calendar cleanup for the old time) instead of a plain confirmation |
| Notify collective members | Off | Whether booked/cancelled notices reach every host of a collective booking, not just the primary |
| Integration failure alerts | Off | Whether a failed room reservation or Guest Pass pre-registration alerts the host instead of only logging |
Every toggle has a real runtime consumer — flipping it changes behavior immediately, tenant-wide.
🔗 Integrations
| Integration | What happens |
|---|---|
| Calendar | Every confirmed appointment owns a real calendar event — Google/Outlook two-way sync, conflict analysis, and ICS apply automatically; collective bookings land on every member’s calendar |
| Leave Management | Approved leave (full-day and partial-day) is folded into busy time, so nobody books over vacation |
| Shift Scheduling | Published shifts can constrain (or block) bookable hours per page |
| Bookings (rooms & spaces) | In-person types can pin a Space that is auto-reserved on confirm and released on cancel — with the outcome logged on the appointment’s audit trail either way |
| Guest Pass | In-person types can pre-register the invitee as an approved visitor, so reception expects them on arrival; cancelled bookings cancel the visit |
| CRM (Mango GTM / CS) | The invitee’s email is matched to a CRM account (unique company-domain match first, then unique contact match) and a meeting activity is dropped on the account timeline |
| AI Front Office | Bookings made by the AI receptionist are tagged as their own source in analytics |
Room reservation, guest pre-registration, and CRM linking are all failure-safe: a full room or a Guest Pass hiccup never kills the appointment — it’s logged on the audit trail instead.
🤖 Appointment Scheduler AI Agent
The app is wired into the Ask AI sidebar. The agent can:
- List your booking pages with their public
/meetlinks and status - Show your appointments — upcoming, past, or cancelled
- Get one appointment’s full details by ID or invitee name/email
- Preview availability — the exact slots an invitee would be offered on a date
- Create a booking page with sensible defaults (confirmed write)
- Activate/deactivate a page (confirmed write)
- Cancel an appointment — the invitee is notified with a rebook link (confirmed write)
- Reschedule an appointment to a new open slot — the invitee gets the updated confirmation (confirmed write)
Writes go through the same booking service as the UI, so calendar cleanup, room release, and invitee emails behave identically. Admins can turn the agent off per-tenant in Settings.
📜 Audit Trail
Every appointment carries a full audit log: booked, cancelled (with reason), rescheduled (with the successor), reminder sent, follow-up sent, room reserved/released, guest pre-registered, CRM linked — each entry with actor and timestamp. The reschedule chain is preserved end-to-end.
User Roles & Permissions
| Role | Capabilities |
|---|---|
| Member (host) | Create and manage own booking pages, types, availability, team members, and routing; see own appointments; host-side cancel/reschedule; own analytics; mobile view; AI agent |
| Admin | Everything above across all users’ pages and appointments, business-wide analytics, plus Admin → Settings (the five tenant toggles) |
| App Admin | A user granted admin rights for Appointment Scheduler specifically — same powers as Admin within this app, without platform-wide admin |
| Invitee (external) | Book, reschedule, and cancel via secure links — no account, no login |
How We Compare
See how MangoApps Workforce stacks up against leading scheduling tools:
| Feature | MangoApps Workforce | Calendly | Microsoft Bookings |
|---|---|---|---|
| Personal booking pages + custom intake questions | ✅ | ✅ | ✅ |
| Meeting types with buffers, notice & booking windows | ✅ | ✅ | ✅ |
| Email confirmations & reminders with calendar invites | ✅ | ✅ | ✅ |
| Round-robin & collective team scheduling | ✅ | 💰 | ⚡ |
| Shift-aware availability (slots follow the published roster) | ✅ | ❌ | ❌ |
| Approved leave automatically blocks booking | ✅ | ❌ | ❌ |
| Room auto-reserve + visitor pre-registration on booking | ✅ | ❌ | ❌ |
| Unified with calendar, leave, shifts, CRM & visitor mgmt | ✅ | ❌ | ❌ |
| Legend: ✅ Included | ❌ Not Available | 💰 Paid Add-on | ⚡ Limited |
Calendly’s round-robin team scheduling requires its paid Teams tier; Microsoft Bookings offers shared booking pages within Microsoft 365 but not rotation-based assignment. Competitor capabilities per each vendor’s public product and pricing pages; MangoApps rows reflect features verified in this app.
Why MangoApps Workforce?
- 🔗 Unified Platform — bookings create real calendar events, respect leave and shifts, reserve rooms, and pre-register visitors in one system
- 🏭 Built for the frontline — shift-constrained availability means store and branch staff only offer slots when they’re actually on the roster
- 🤖 AI-Native — an Ask AI agent that can look up, create, cancel, and reschedule for you, not just answer questions
Getting Started
For Hosts (everyone)
- Open Apps → Appointment Scheduler → Booking Pages and create a page (title, URL slug, timezone, visibility)
- Add a meeting type (duration, buffers, notice, questions) — default weekly availability is created for you; adjust it and add date overrides
- Share your
/meet/your-sluglink (email signature, chat, or the embed snippet) — bookings, confirmations, and reminders run themselves - Watch the Dashboard and Appointments tabs; cancel or reschedule from there when plans change
For Teams
- Create a page and add members under Team
- Set each meeting type’s mode: round-robin (rotate), collective (everyone attends), or group (seat capacity)
- Optionally add a routing question so invitees land on the right team’s page
For Administrators
- Enable the app in the Apps Marketplace
- Review Admin → Settings: public booking, reminders and lead time, leave-blocks-availability, and the AI agent
- Use the business-wide Appointments and Analytics views to monitor adoption, cancellation rate, and booking sources
Best Practices
- ✅ Add buffers to back-to-back-prone types — 10–15 minutes of protected prep/travel time prevents meeting fatigue
- ✅ Set a minimum notice (12–24h) on external-facing pages so you’re never ambushed by a same-hour booking
- ✅ Write a follow-up note on types where a post-meeting email matters — the note is the opt-in, and the send is automatic
- ✅ Use organization-only visibility for internal office hours so anonymous visitors can’t see or book them
- ✅ Frontline hosts: use constrain to shifts instead of hand-maintained weekly rules — availability follows the published roster
- ✅ Deactivate, don’t delete pages you’re pausing — history stays intact and the link can come back later
Frequently Asked Questions
Q: Do invitees need a MangoApps account?
A: No. Booking, rescheduling, and cancelling all work through secure links with no login. The one exception is a page set to Organization only — those invitees must sign in as members of your organization first.
Q: Why isn’t a time showing that looks free to me?
A: A slot is only offered when the whole span — including the type’s buffers — is clear of internal calendar events, Google/Outlook busy time, approved leave (if the admin toggle is on), and other confirmed appointments, and it satisfies the type’s minimum notice, rolling window, and daily cap. Date overrides and shift mode can also close a day the weekly rules would open.
Q: What happens if two people try to book the same slot at once?
A: One wins. The other gets a friendly “that time was booked a moment ago — please pick another slot,” with their typed details preserved. Confirmation runs a server-side re-validation, a live Google/Outlook free/busy re-check, and a database uniqueness backstop.
Q: What’s the difference between cancelling and rescheduling?
A: Cancelling ends the booking (calendar entry removed, room released, visitor pass cancelled, invitee emailed). Rescheduling creates a new appointment at the new time and marks the old one rescheduled — linked together so history and analytics stay accurate. Both the invitee (manage link) and the host (Appointments tab) can do either.
Q: When do reminders and follow-ups go out?
A: Reminders go to the invitee (email) and host (in-app) at the tenant-configured lead time — 1 to 168 hours before, default 24 — and each appointment gets exactly one. The post-meeting follow-up email sends only when the meeting type has a follow-up note written; no note, no email.
Q: Can I put my booking page on our website?
A: Yes — the page editor shows a copy-paste iframe snippet, and you can list up to 10 external hostnames allowed to frame the page. Bookings made through the embed are tagged separately in the analytics source breakdown.
Q: A group session is full — can people still sign up?
A: Yes, via the waitlist. A full group slot stays visible and offers a join form instead of a booking form. When a seat frees up through a cancellation or reschedule, everyone waiting for that exact session is emailed and the first to rebook takes the seat — nobody is auto-booked and no seat is held. Waitlists exist only for group meeting types.
Q: How do I get a text reminder instead of just email?
A: Both sides have to opt in. An admin must enable SMS reminders for the tenant (it’s off by default), and the invitee must enter a phone number and tick “Text me a reminder” when booking. If either is missing, only the email reminder goes out. The opt-in carries over if the meeting is later rescheduled.
Q: How do colleagues find my booking page inside the company?
A: The in-app Directory lists everyone with an active, org-visible bookable page, searchable by name or page title, and a “Book time” button appears on your profile. Pages set to Link only are intentionally left out of both — they’re bookable only by someone you send the URL to.
Q: I need a second page almost identical to one I already have. Do I rebuild it?
A: No — duplicate it. The copy brings over meeting types, weekly availability, future date overrides, and team members, and arrives inactive with its own URL so you can adjust it before anyone can book. Duplicating a meeting type works the same way, landing as an inactive draft on the same page.
Related Resources
- Calendar App Overview — The calendar core every appointment lands on (Google/Outlook sync, RSVPs)
- Bookings App Overview — The rooms and spaces that in-person appointments auto-reserve
- Guest Pass App Overview — The visitor management that pre-registers your invitees
- Interview Scheduler App Overview — Purpose-built scheduling for candidate interviews
Publish your page, share your link, and let the back-and-forth end — Appointment Scheduler books the meeting, the calendar, the room, and the guest list in one step.