Agentforce
Booking appointments with Agentforce: the Salesforce Scheduler actions, and where the agent stops
A customer wants to move Tuesday's appointment to Thursday, and most teams reach for Apex to find open slots. If you run Salesforce Scheduler, you don't. Four standard actions read your availability, territories, and work rules, and the whole build comes down to the running user and the channel.
A customer messages your site at 9pm, asking to move Tuesday’s mortgage review to Thursday afternoon. To answer, something has to know which advisor owns that appointment, what else is on their calendar Thursday, which branch or video room is free, and whether Thursday afternoon is even inside that advisor’s working hours. Most teams assume this means Apex, a callout, and a week of work.
If you already run Salesforce Scheduler, it means none of that. The availability logic exists, the calendars exist, the work rules exist. An Agentforce agent that books, reschedules, and cancels appointments is four standard actions wired to that engine, plus the two configuration decisions that decide whether it returns real slots or an empty list.
My rule going in: don’t write a line of Apex to find an open slot. The Scheduler engine already computes availability against resources, territories, and operating hours. Reaching past it for a hand-rolled SOQL query is how you ship an agent that offers a time the advisor can’t take.
Scheduler is not Field Service, and picking wrong is the first mistake
Two Salesforce products schedule things, and they solve different problems. Get this wrong and every downstream decision is wrong.
Salesforce Scheduler, the product once called Lightning Scheduler, books appointments between a customer and a person or resource: a banker, a financial advisor, an in-store specialist, a video consultation, a room. It handles inbound self-service booking and outbound appointment creation, reasoning over resource capacity, operating hours, and location availability. It is the right tool for “book me a 30-minute review with a mortgage advisor next week.”
Field Service dispatches a mobile workforce to a location instead: the technician who comes to your house, the crew that restores a line. It adds work orders, skills-based routing, inventory, and a mobile app, and it carries scheduling logic that only exists when a work order is in play. Field Service also has its own customer-initiated scheduling agent for that mobile-dispatch case.
If your appointment is a person meeting a customer at a branch, a desk, or on video, you want Scheduler and the actions below. If it’s a van going to a premises, that’s Agentforce for Field Service, and this is the wrong build. The rest of this post assumes Scheduler.
The four actions that are the whole build
Salesforce ships a set of standard Agentforce actions for Scheduler, and between them they cover book, reschedule, and cancel without custom code. You add them to a topic and write the instructions. You don’t author the scheduling logic.
Get Appointment Slots for Scheduler returns the open time slots for a work type group and service territory, in a stated time zone. It takes an earliestStartTime, so the agent can honor “Thursday afternoon” instead of dumping the next available slot.
Create and Schedule Appointment for Scheduler confirms the customer’s chosen slot and writes the Service Appointment. It doesn’t demand a first and last name unless its own output asks for one to resolve an error.
Get Appointment Details for Scheduler looks up an existing appointment, which is the first step of any reschedule or cancel. Get Appointment Time Slots for Scheduler then returns the alternatives when a customer wants to move a booking that already exists.
The reschedule flow is those actions in sequence, and it helps to see it as a chain, because that’s how the agent runs it: get the appointment details, fetch new slots around the customer’s preference, then create and schedule the new one. A cancel is the details lookup plus a cancel step. The agent decides when to call each action from the conversation. The actions decide what’s available.
That division is the whole point. When the agent offers a slot, it offers one the engine returned, not one the model invented. You are not trusting an LLM to know your advisors’ calendars. You’re trusting it to run a conversation and call typed actions, which is what it’s good at.
The actions read your config, so the config is the product
An action is only as good as what it reads. Get Appointment Slots doesn’t know your business. It queries the Scheduler objects you set up, and if those are thin, the slots are wrong.
Work Type and Work Type Group define what’s being booked and how long it takes. “Mortgage review, 30 minutes” is a work type; the group is what the customer picks from. Service Territory is the location or branch context, physical or virtual, that scopes which resources are eligible.
Service Resource is the bookable person or asset, carrying the operating hours and capacity that bound availability. Operating Hours and the Service Appointment record are the calendar and the booking the actions read and write.
The agent inherits all of it. Wrong operating hours, and the agent offers a time the advisor doesn’t work. Wrong work-type duration, and it books a 60-minute review into a 30-minute gap.
Before you touch Agentforce, book an appointment through Scheduler’s own flow as a human and confirm the slots are correct. An agent on top of broken Scheduler config is a faster way to make the same wrong booking.
Setup: the permission set, the routing, and the channel
Standing the agent up is a Service Agent build, so it follows that path. Three things have to be true before a customer ever reaches it.
The agent runs as a service agent user, and the Agentforce Service Agent User permission set is required for that user. This is the identity that calls the Scheduler actions, and its access is what the actions run under. Hold that thought, because it’s where the most common failure lives.
Routing is the second piece. In Messaging Settings, open the channel and set the Omni-Channel routing type to Agentforce, so inbound conversations reach the agent instead of a queue. Scheduler agents work across the standard messaging channels: Messaging for Web and in-app, SMS, WhatsApp, and the rest of the enhanced-channel set.
The third piece is who the customer is. A self-service booking agent usually serves people who aren’t logged in, which means routing guest users through an Experience Cloud site into the agent. That’s a deliberate architecture, and it changes the identity math in the next section.
The running-user trap that returns an empty slot list
Here’s the failure that eats an afternoon. The actions are added, the topic reads well, and the agent still says “there’s no availability” for a week that’s wide open. The Scheduler UI shows slots. The agent sees none.
The cause is identity, the same trap that catches External Services actions and any other action that reads data. A Scheduler action runs as the agent’s running user, not as you and not as the customer. If that user can’t see the service resources, the territories, or the appointment records, the availability query comes back empty. The agent then narrates the empty result as “no times available.”
Grant the running user real access to the Scheduler data model before you blame the actions: the resources, the territories, the work types, the operating hours. For a guest-facing agent, that access flows through the guest user and the sharing you’ve configured on the Experience Cloud site, which is stricter than an internal user’s and easier to get wrong. Test as the running user, not as an admin who can see everything.
Time zone is the quieter version of the same problem. Get Appointment Slots returns slots in a stated time zone, and if the agent presents them without reconciling the customer’s zone, you book a 2pm that lands at 2pm somewhere else. Decide whose time zone the conversation speaks in and hold it across every action in the chain.
Where the agent stops
An agent that can write to a calendar can write the wrong thing to a calendar, so the boundaries are part of the design, not an afterthought. This is the same human-in-the-loop discipline every write-capable agent needs.
Let the agent own the high-volume, low-judgment path: find a slot, book it, move it, cancel it, confirm it. That’s most of the queue, and it’s the part that doesn’t need a person.
Keep a human on the calls that carry judgment or risk. A double-booking override, a VIP who needs a specific advisor the engine didn’t surface, a cancellation inside a fee window, an accommodation request, a booking that should trigger a fraud or compliance check. These aren’t scheduling problems. They’re policy decisions wearing a scheduling costume, and the escalation path has to hand them off with full context so the human isn’t starting cold.
Guardrails do the enforcing. Scope the topic so the agent only books the work types you’ve approved for self-service, and write the action instructions so the reasoning engine calls the right action for the right intent. The instruction is the code that matters most: “Use Get Appointment Slots when the customer wants a new appointment; use Get Appointment Details first when they refer to an existing one” earns correct calls. A bare list of actions earns guesses.
The build, in order
Confirm Scheduler itself returns correct slots for a human. Add the four standard actions to a Service Agent topic and write instructions that tell the reasoning engine which action fits which intent. Set the running user’s access to the Scheduler data model, and test as that user. Wire the channel routing and, for self-service, the guest-user path through Experience Cloud. Decide the time zone the conversation speaks in.
Then draw the boundary between a booking and a decision, and send the decisions to a person. Do that, and the agent that answers “can I move Tuesday to Thursday” at 9pm is a week of configuration you mostly already own, not a scheduling engine you have to build and maintain.
Understanding the basics
Can an Agentforce agent book appointments without custom Apex?
Yes, if you run Salesforce Scheduler. Salesforce ships standard Agentforce actions for Scheduler, including Get Appointment Slots, Create and Schedule Appointment, and Get Appointment Details, that read your existing availability and write the Service Appointment. You add them to a topic and write instructions; you don’t code the scheduling logic. Apex only comes in when you need a custom eligibility rule or a filter the standard actions don’t offer.
What is the difference between Salesforce Scheduler and Field Service for an agent?
Salesforce Scheduler books a customer into an appointment with a person or resource, such as a banker, an advisor, or a video consultation, reasoning over capacity, operating hours, and location. Field Service dispatches a mobile workforce to a premises with work orders, skills routing, and inventory, and it has its own scheduling agent. Use Scheduler for branch, desk, and virtual appointments; use Field Service when a technician travels to the customer.
Why does my Scheduler agent say there are no available slots?
Almost always the running user’s access. A Scheduler action runs as the agent’s assigned user, and if that user can’t see the service resources, territories, or operating hours, the availability query returns nothing and the agent reports “no times available.” For a guest-facing agent, that access flows through the Experience Cloud guest user and its sharing. Confirm slots appear in the Scheduler UI, then test as the actual running user before you suspect the action.
Which channels can a Scheduler booking agent run on?
The standard Agentforce Service Agent channels, including web and in-app messaging, SMS, WhatsApp, and the other enhanced messaging channels, with routing set to Agentforce in Omni-Channel. Self-service booking for people who aren’t logged in runs by routing guest users through an Experience Cloud site into the agent. Verify channel availability against the current Agentforce for Scheduler considerations for your release before you commit a rollout date.
Deciding whether an appointment agent is four standard Scheduler actions or a custom build, and wiring the running user, the guest path, and the escalation line so it books real slots and hands off the rest? Talk to us. Getting an agent to safely touch the calendar that runs your business is exactly the work we do.