WorkestraDocs
PlatformCalendar & Scheduling

Round-Robin Team Links

Share one URL across a team — Workestra rotates through your reps, skipping anyone out-of-office or already busy.

Round-Robin Team Links

A round-robin link is one public URL backed by a pool of hosts. When someone books, Workestra picks the next available rep — round-robin order, then OOO-filtered, then busy-filtered. The attendee sees one slot picker; the rep who gets the booking is decided at the moment of confirmation.

This is the standard pattern for inbound sales (any rep can take a discovery call), customer success (any CSM can take a renewal), or recruiting (any interviewer can take a screen).

Round-robin link config

Screenshot needed — link form with link_type=team_round_robin and the member list

Same flow as a personal link (/settings/booking-linksCreate link), with two differences:

  1. Set Link type to Team round-robin instead of Personal.
  2. Add members to the rotation pool.

Members are workspace users — pick by name in the picker. Order in the list = rotation position. The first-added is position 0, the next is 1, and so on.

How rotation works

When a slot is booked:

  1. Pool lookup — fetch the active members in rotation order
  2. Filter out-of-office — anyone whose out_of_office_until is in the future is skipped
  3. Filter busy — anyone with a confirmed scheduling_calendar_events row that overlaps the requested slot (with buffer expansion) is skipped
  4. Walk the ring from the last-assigned pointer — the first rep that passes both filters wins
  5. Update the pointer — the chosen rep is recorded as last_assigned_user_id for the next round

If every rep is OOO or busy at the picked slot, Workestra falls back to the next pointer position regardless — the booking still succeeds, with a warning logged. (Availability calculation already filters slots where every rep is busy, so this is a very narrow race.)

Availability is the union

A slot is shown on the public page if at least one rep in the pool is free. So if Alice is free Tuesday at 2pm but Bob isn't, the 2pm slot is still bookable — and Alice gets it.

This is what makes the round-robin model safe under load: you advertise the union, and assignment goes to one specific free rep at confirmation time. Two attendees can never double-book the same rep at the same slot, because the slot re-verification (step 4 in booking-links) runs against the chosen host's calendar.

Per-member calendar fan-out

Workestra checks each rep's own connected calendar when computing availability — not just the link owner's. The pool can mix providers freely:

Each rep's free/busy is read from their own provider, and a slot is shown if at least one rep is free. At confirmation, the chosen rep's calendar is re-checked against the exact requested slot — so if Alice's gcal got an event 30 seconds before her rep slot got picked, the booking falls through to Bob instead of double-booking her.

The booking link's Calendar provider dropdown still exists, but in a round-robin context it acts as a default for reps who haven't set their own provider. Most teams leave the link's provider field on the most-common rep's choice and let per-rep settings override.

Out-of-office handling

Workestra reads user_preferences.out_of_office_until. If you (or a rep) sets a date in the future, you're automatically excluded from rotation through that date. No need to remove yourself from the pool manually before going on vacation.

The same OOO field is used by the inbound email + ticket router, so setting it once covers everywhere.

Reordering rotation

Drag-and-drop the member list in /settings/booking-links/<id> to change rotation order. Position 0 always tries first; position N tries last (modulo the pointer).

To temporarily remove someone (e.g. they're on a project for two weeks), uncheck their active flag rather than deleting them — the rotation pointer stays sensible, and re-activating slots them back into their old position.