Building an Anonymous Scheduler with Automatic Resource Assignment in Salesforce

A practical step-by-step guide to build a public (guest) appointment booking flow using Salesforce Scheduler, Flow, and Experience Cloud — with automatic resource assignment by territory, timezone and skills.

Why this matters

Public-facing booking flows let customers schedule appointments without authentication while ensuring the right technician is assigned automatically. This reduces friction for customers, increases booking conversions, and scales across territories and time zones.

Use case

Ben Laptops Inc. runs service centers in New York (Eastern) and Dallas (Central). Customers should book appointments online (no login required) and the system must:

  • Automatically assign technicians based on service territory, time zone, and availability.
  • Display appropriate time slots for the customer’s location.
  • Be embeddable on the corporate website or hosted in an Experience Cloud site.

Required licenses

  • Technician (Agent) — Scheduler License
  • Manager / Greeter — Greeter License
  • Customer (guest) — None (public flow)

Scheduler object model (high level)

Key objects to configure:

  • Operating Hours
  • Time Slots
  • Service Territory & Service Territory Member
  • Service Resource
  • Work Type & Work Type Group
  • Custom Metadata: Location → Time Zone mapping

Step-by-step implementation

1. Define Operating Hours

Create Operating Hours records for each territory or location. Include business days, hours, and holiday exceptions to control available booking windows.

2. Configure Time Slots

Time slots are generated from Operating Hours, Work Type duration, and resource availability. Ensure your Work Types include realistic durations and buffer times.

3. Create Service Territories

Create a Service Territory record for each physical/virtual region (e.g., Eastern, Central) and link the appropriate Operating Hours.

4. Create Service Resources

Create Service Resource records and associate them with User records. Set availability, skills, and capacity.

5. Assign Service Territory Members

Link Service Resources to their Service Territories using Service Territory Member records so time slots and routing work correctly.

6. Define Work Types and Groups

Create Work Types (e.g., Screen Repair — 60 mins, Diagnostics — 30 mins) and group related work types using Work Type Groups for simplified selection during booking.

7. Create Location-to-Time Zone Mapping (Custom Metadata)

Create a Custom Metadata Type Location_Timezone_Mapping__mdt with fields like State__c and Time_Zone__c (use IANA zone IDs such as “America/New_York”). This ensures time zones are consistently applied when presenting times to guests.

8. Build the Guest Scheduling Flow (Flow Builder)

Create a Screen Flow to collect customer details (name, email, phone) and location (zip/state). Use the Salesforce Scheduler “Select Service Appointment Time” component to show available slots. Key inputs for the component include:

  • Anonymous Booking Selected = True
  • Scheduling Policy = your Scheduling Policy Name
  • Disable Multi-Resource Scheduling = True
  • Filter By Resource IDs = service resources for the selected territory
  • Selected Time Zone = value from your Location_Timezone_Mapping__mdt
  • Service Territory, Work Type, Work Type Group = chosen by the customer or inferred by location

9. Connect the Save Appointment action

Use the Flow Action to create a ServiceAppointment and related records (Service Resource, ServiceAppointment fields). Pass the selected time zone and other attributes as JSON into the action where applicable.

10. Add the Guest Flow to an Experience Cloud Site

  • Create an Experience Cloud site and add the Flow component to a public page in Experience Builder.
  • Ensure the Guest User profile has access to the Flow, required objects/fields, and any Apex classes invoked by the Flow.
  • Save and publish the site so anonymous users can access the booking flow.

Embedding on an external website

To embed the booking flow on an external (non-Salesforce) site:

  • Whitelist your external site under CORS in Salesforce Setup.
  • Create a Lightning Out dependency app that exposes the Flow component to your site.

Lightning Out example (guest, basic)

<script>
	$Lightning.use("runtime_appointment booking: lightningOutGuest",
		function() { 	// Callback once framework and app load
			$Lightning.createComponent(
				"lightning: flow", 	// top-level component of your app
				{ }, // attributes to set on the component when created
				"lexcontainer", // the DOM location to insert the component
				function (component) { 	// API name of the Flow
				component.startFlow("Salesforce_Scheduler_Unauthenticated");
				}
			);
		}, 'https://YourSiteDomain/SiteURL/' // Site endpoint
	);
</script>

Extensions and next steps

Once core scheduling is live, consider:

  • Integrated payments (Stripe, PayPal)
  • Calendar sync (Google/Outlook)
  • SMS and email reminders
  • Post-booking feedback surveys

Best practices

  • Keep custom metadata mappings up to date for accurate timezone conversion.
  • Test scheduling behavior using guest user sessions (incognito) for each territory.
  • Use Flows to validate input and create or link contacts/person accounts during booking.

Conclusion

Anonymous scheduling using Salesforce Scheduler and Flow provides a scalable, configurable way to offer public booking while automatically routing appointments to the right resources. For admins and developers, this approach reduces friction and centralizes scheduling logic in Salesforce, making it easier to scale across locations and time zones.

Why it matters for Salesforce teams: Admins can manage policies and operating hours centrally; developers can extend logic with Flow and Apex; business users get predictable resource assignment and fewer manual routing tasks.