Skip to content

Booking Troubleshooting

Common problems and how to fix them.


"This time was just taken" on commit

Symptom: Booker fills in the form, hits Confirm, gets a "This time was just taken" error.

Cause: The slot was free when they loaded the page but became busy in the seconds before commit — usually because:

  1. Another booker grabbed it first (legitimate race).
  2. Your external calendar got an event that overlaps (e.g. a colleague added you to a meeting).
  3. The host marked themselves busy via overrides.

Fix: This is the system working correctly — the alternative is a double-booking, which is worse. The booker is offered to pick a different slot. If you see this often, your slots are probably too tight or your buffer is too small.


Custom-question label shows as a UUID

Symptom: After adding a number / text field on the Custom Questions tab, the public booking page shows a label like 7b2a3f8c-9e1d-4f0a-... instead of the human label.

Cause: A stale-closure save bug (fixed). If you're seeing this on an older record:

  1. Open the event type → Custom Questions tab.
  2. Click the field with the bad label.
  3. Edit the label (any change is fine, even retyping the same text).
  4. Save and Publish changes.

The republish writes the field metadata correctly. The label will display properly.


Edits don't appear on the public page

Symptom: You change a field, the editor shows "Saved", but the public page at /b/{slug} still shows the old version.

Cause: Auto-save updates the draft. The public page reads the published snapshot. Until you republish, edits stay in draft only.

Fix: Click Publish changes in the toolbar. Hard-refresh the public page (Cmd / Ctrl + Shift + R) to bypass any browser cache.


Slots I expect to see aren't there

Walk this checklist top to bottom:

  1. Inside an availability window? Open the Availability tab and confirm there's a window covering the time on that weekday.
  2. Outside a date override? A date override replaces the weekly schedule for that day — if you set "Mark unavailable" on the day, the weekly hours are ignored.
  3. Past the minimum notice? The Schedule tab's Minimum notice cuts slots within that lead time. A 4-hour minimum hides everything in the next 4 hours.
  4. Within the scheduling horizon? The horizon (default 60 days) hides anything beyond.
  5. Conflict with an existing booking? Other Ascend bookings + their buffers eat slots. Check the host's calendar workspace.
  6. Conflict with the external calendar? If a calendar is connected, external events block slots silently. Check Google / Outlook.
  7. Day-cap reached? Max-bookings-per-day kills every remaining slot once the daily count hits the cap.
  8. Slot increment alignment? Slots only start on the increment grid (e.g. with 15-min increment, slots can start at :00, :15, :30, :45 — not :07).

For collective: every host must be free. For round-robin: at least one pool member must be free.


Public URL returns 404

Symptom: Hitting /b/{slug} shows "Event type not found".

Cause: One of:

  • The event type isn't published. Check status in the designer (top-right badge).
  • The event type was unpublished or closed.
  • The slug in the URL is wrong (typo or copy / paste truncation).
  • The team that owns the event type was deleted.

Fix: Open the designer and check the status. Republish if needed.


Calendar integration shows wrong free / busy

Symptom: A real meeting on your external calendar isn't blocking slots, or a deleted meeting is still blocking.

Cause: The cached free / busy hasn't synced. Webhooks usually catch this within seconds, but token expiry or quota issues can drop them.

Fix:

  1. Settings → Integrations → click the calendar → Re-sync now.
  2. If still wrong: Disconnect and Reconnect.
  3. If still wrong: check that the meeting in question is on a calendar you've selected for sync (multi-calendar Google accounts often have several).

Bookings stuck on "Confirming your booking…"

Symptom: Booker sees the loading spinner indefinitely after submitting.

Cause: The confirmation poller can't reach the booking status endpoint. Either:

  • The booking commit failed silently (server-side; rare — would show in workflow run log).
  • Browser network blocking the polling fetch.
  • A stale React Strict Mode artifact in dev mode.

Fix: Reload the page. The confirmation page can be reopened with the token from the booker's email — the underlying booking is usually fine, only the live page is stuck. If it persists, check the host's /calendar view — if the booking is there with status confirmed, the booker can use the email confirmation directly.


Twilio SMS not sending

Symptom: SMS workflow's run log shows failed deliveries.

Cause: Common Twilio gotchas:

  • Phone number missing on the booking (booker didn't fill it in, no required-phone setting, or international format mismatch).
  • Twilio account out of credit / suspended.
  • Twilio from-number not authorised to message the destination country (US numbers can't always SMS internationally without setup).
  • Trial accounts can only SMS verified numbers.

Fix: Check Settings → Integrations → Twilio for account-level errors. Inspect the run log entry — it includes Twilio's error code and message.


Stripe payment failed but slot is held

Symptom: Booker abandoned Stripe Checkout, but the slot still shows busy in the picker for ~15 minutes.

Cause: The pending hold timeout. By design, abandoned attempts hold the slot briefly to prevent double-checkout from the same booker hitting refresh.

Fix: Wait 15 minutes (or whatever you set the hold timeout to). Slot returns automatically. To override, the host can cancel the pending booking from the calendar workspace.


"You've reached your plan's event-type limit"

Symptom: Banner at the top of /booking, + Create event type button disabled.

Fix:

  • Close event types you're no longer using (Settings → Booking → designer → Close). Closing frees a slot without losing history.
  • Or upgrade your plan — the upgrade link in the banner takes you to the right place.

Round-robin keeps picking the same person

Symptom: One pool member runs every booking even though there are five members.

Cause(s):

  • The strategy is set to Priority order — that's the expected behaviour (always pick the first available).
  • Other pool members have no availability windows for the relevant times — confirm each member's availability schedule.
  • Other pool members have external calendar conflicts that exclude them at the moment of pick.

Fix: Check the booking's Routing log (booking side sheet) — it shows which members were considered and why each was excluded.


Embed iframe doesn't auto-resize

Symptom: Your embedded booking page has scrollbars or extra whitespace.

Cause: Auto-resize uses postMessage between the iframe and parent. Some embed contexts (security-strict CSPs, sandboxed iframes) block it.

Fix:

  • Make sure the iframe doesn't have sandbox attribute (or includes allow-scripts if you must sandbox).
  • Set a reasonable fixed height (e.g. 700px) as a fallback.
  • Check the browser console on the parent page for a CSP error mentioning frame-src or script-src.

Still stuck?

  • Check the booking's workflow run log — most "this didn't happen" issues show up there.
  • Check the analytics page — anomalies in cancellation / no-show rates often have a structural explanation (slots too tight, reminders disabled, etc.).
  • Email support@optivationai.com with the event type slug, the booking id (if applicable), and a screenshot.