---
schema_version: "1"
id: 3a76fd7e66d2c51bed4685cc6ea7e4be7c4eb06b1a43544a09909a6a8a0677ef
title: Create Scheduling Recipes for Common Events
collection: admin
version: current
locale: en-us
portal_url: https://docs.salesforce.com/admin/current/en-us/service/264-0-0/pfs_create_scheduling_recipe.md
canonical_url: https://help.salesforce.com/s/articleView?id=service.pfs_create_scheduling_recipe.htm&release=264.0.0&type=5
source_site: help.salesforce.com
content_type: documentation
content_hash: c3a9f487202c228c0a37bf66408dee8b85cf118e5478c5fac0ac6a087f6d4883
description: Tackle common Field Service scheduling challenges with simple optimization “recipes” that address what happens to your schedule after appointment cancellations, time changes, and overlaps. Cover all scenarios by creating multiple recipes for each category.
products:
  - Field Service
release: "264"
---
# Create Scheduling Recipes for Common Events

Tackle common Field Service scheduling challenges with simple optimization “recipes” that address what happens to your schedule after appointment cancellations, time changes, and overlaps. Cover all scenarios by creating multiple recipes for each category.

### Required Editions

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small edition"><colgroup><col></colgroup><tbody><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">Available in: both Salesforce Classic (not available in all orgs) and Lightning Experience</td></tr><tr class=""><td class="slds-cell-wrap" style="vertical-align:top;">The Agentforce Field Service and Operations core features, managed package, and mobile app are available in <strong>Enterprise</strong>, <strong>Unlimited</strong>, and <strong>Developer</strong> Editions.</td></tr></tbody></table>

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small permission">
        <colgroup>
          <col style="width:50%">
          <col style="width:50%">
        </colgroup>
        <thead class="slds-text-title_caps ">
          <tr class="">
            <th scope="colgroup" class="slds-cell-wrap" colspan="2" style="text-align:center;vertical-align:top;" id="d53643e72">User
              Permissions Needed</th>
          </tr>
        </thead>
        <tbody>
          <tr class="">
            <td data-label="User Permissions Needed" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e72 ">To create a scheduling recipe: </td>

            <td class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e72 ">Custom permission set: Field Service Admin Permissions</td>

          </tr>
        </tbody>
      </table>

![Package icon](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-service-support_field_service-264-0-0-production-enus/3f7dceb9-dd70-454a-b49e-bbb4526a158d/support_field_service/images/fs_package.png) _This is a Field Service managed package feature._

Scheduling recipes are an [optimization](https://help.salesforce.com/s/articleView?id=service.pfs_activate_optimizer.htm&release=264.0.0&type=5 "Configure optimization so you can schedule appointments and address last-minute challenges. You can set up optimization to run automatically, or run it manually. Activate optimization to create an optimization user and profile required for accessing a optimization services. When you’re using Enhanced Scheduling and Optimization, this activation isn't required, because Enhanced Scheduling and Optimization uses a Platform Integration User.") feature. They use resource schedule optimization, which means that only the affected service resource’s schedule is optimized. Scheduling recipes aren’t available when using Enhanced Scheduling and Optimization, which uses the [Fix Schedule Overlaps](https://help.salesforce.com/s/articleView?id=service.pfs_enhanced_fix_schedule_overlaps_flow.htm&type=5&language=en_US) automated flow instead.

![Note](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-service-support_field_service-264-0-0-production-enus/3f7dceb9-dd70-454a-b49e-bbb4526a158d/images/icon_note.png)

Note Several [fix overlaps features](https://help.salesforce.com/s/articleView?id=service.pfs_fix_overlaps_parent.htm&type=5&language=en_US) are available in Field Service.

1. From the App Launcher, find and open the **Field Service Admin** app.
2. Click the **Field Service Settings** tab, and then click **Automated Scheduling**.
3. In the New Recipe menu, select a category. We’ve provided some example recipes to get you started. You can activate them or create your own.
4. Customize your recipe’s settings. Then, activate and save it. Inactive recipes aren’t enforced.
    
    - The Status Categories field lets you limit which appointments the recipe applies to. For example, if you select only the Scheduled value on a recipe for shortened appointments, the recipe runs only if an appointment’s status is in the Scheduled [status category](https://help.salesforce.com/s/articleView?id=service.fs_status_categories.htm&release=264.0.0&type=5 "Service appointments, work orders, and work order line items have two status-related fields—Status and Status Category—which come with the same standard values. Status categories, which are referenced in many field service processes, allow you to use custom status values while maintaining a consistent work classification for tracking, reporting, and business process management.") when the appointment is shortened. Excluding the Canceled status category, the appointment’s status must also be a pinned status, which is set in **Field Service Settings** | **Optimization** | **Logic**.
    - The Initiating User Permission Set field lets you decide which users can trigger the recipe. For example, if you’re creating a recipe for canceled appointments, select **Community** to run the recipe only for appointments canceled by an Experience Builder site user (typically, a customer). The values in this field correspond to the permission sets provided by the managed package.<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
                <colgroup>
                  <col style="width:50%">
                  <col style="width:50%">
                </colgroup>
                <thead class="slds-text-title_caps ">
                  <tr class="">
                    <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d53643e191">Initiating User Permission Set Value</th>
                    <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d53643e193">Corresponding Permission Set</th>
                  </tr>
                </thead>
                <tbody>
                  <tr class="">
                    <td data-label="Initiating User Permission Set Value" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e191 ">Resource</td>
                    <td data-label="Corresponding Permission Set" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e193 ">Field Service Resource</td>
                  </tr>
                  <tr class="">
                    <td data-label="Initiating User Permission Set Value" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e191 ">Dispatcher</td>
                    <td data-label="Corresponding Permission Set" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e193 ">
                      <p>Field Service Dispatcher</p>
                      <p style="margin-bottom:0;">Field
                        Service
                        Community
                        Dispatcher</p>
                    </td>
                  </tr>
                  <tr class="">
                    <td data-label="Initiating User Permission Set Value" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e191 ">Call Center Rep</td>
                    <td data-label="Corresponding Permission Set" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e193 ">Field Service Call Center Rep</td>
                  </tr>
                  <tr class="">
                    <td data-label="Initiating User Permission Set Value" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e191 ">Admin</td>
                    <td data-label="Corresponding Permission Set" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e193 ">Field Service Admin</td>
                  </tr>
                  <tr class="">
                    <td data-label="Initiating User Permission Set Value" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e191 ">Community</td>
                    <td data-label="Corresponding Permission Set" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e193 ">Field Service Self Service</td>
                  </tr>
                </tbody>
              </table>
5. To change the priority order of recipes within a category, click ![Up and down arrows](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-service-support_field_service-264-0-0-production-enus/3f7dceb9-dd70-454a-b49e-bbb4526a158d/support_field_service/images/pfs_arrows.png) on the Automated Scheduling home page. Drag the recipes into the desired order and click **Save**.

Considerations for Scheduling Recipes

- You can create up to 75 active recipes per category, and up to 1000 recipes per org.
- For Shortened Appointment scenarios, scheduling recipes only try to fill one empty space per day for each service resource.
- For Shortened Appointment scenarios, scheduling recipes support only a single operating hours timeslot per day.
- Scheduling recipes support only operating hours and timeslots, not shifts.
- A triggering service appointment is the appointment that actually triggers resource scheduling optimization. For Shortened Appointments, Late-End Overlap, and Emergency Overlap scenarios, scheduling recipes are only triggered if the triggering service appointment's status has been selected as a pinned status for In-Day Optimization. The optimization engine then optimizes service appointments that are schedulable (not in a pinned status). We recommend leaving the Dispatch status deselected so dispatched work can be moved if a previous job runs late or emergency work is needed.
- If you have access to 2,000 or more service territories, the service territories list shows only selected territories. Use the search bar to find territories that aren't selected.

Scheduling Recipe Scenarios

Automate how Field Service handles common situations that cause gaps or overlaps in your schedule, like the following.

- An appointment is canceled
- A mobile worker finishes early
- A mobile worker finishes late and has overlapping appointments
- An emergency causes appointments to overlap

Certain conditions trigger a scheduling recipe, for example, appointment status categories. Recipes are triggered only for in-day of service changes to address last-minute issues to an individual service resource’s schedule.

You can set the scheduled appointment’s Status Category to change after optimization to Scheduled or Dispatched, and mark resulting unscheduled appointments as In Jeopardy with a jeopardy reason.

<table class="slds-table slds-table_bordered slds-max-medium-table_stacked slds-m-bottom_small ">
        <colgroup>
          <col style="width:20%">
          <col style="width:30%">
          <col style="width:50%">
        </colgroup>
        <thead class="slds-text-title_caps ">
          <tr class="">
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d53643e313">Scenario</th>
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d53643e316">Trigger Criteria</th>
            <th scope="col" class="slds-cell-wrap" style="vertical-align:top;" id="d53643e319">Expected Behavior (Result)</th>
          </tr>
        </thead>
        <tbody>
          <tr class="">
            <td data-label="Scenario" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e313 ">Canceled Appointment</td>

            <td data-label="Trigger Criteria" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e316 ">
              <ul>
                <li>Status Category = Canceled</li>

                <li>The service appointment is canceled on the day of service. </li>

                <li>Service appointments must meet the set recipe criteria.</li>

              </ul>
            </td>

            <td data-label="Expected Behavior (Result)" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e319 ">
              <ul>
                <li><strong class="uicontrol">Preserve Current Schedule</strong> - The
                  optimization minimizes any changes to the schedule by
                  leaving as many scheduled appointments as is, and filling
                  the gap with the best match from the next 100 appointments
                  scheduled for that resource.</li>

                <li>If the resource’s Last Known Location is valid (last updated
                  within the set time limit), this location is also considered
                  when scheduling to prevent unnecessary travel.</li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="Scenario" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e313 ">Shortened Appointment</td>

            <td data-label="Trigger Criteria" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e316 ">
              <ul>
                <li>Status Category = Completed/Cannot Complete/Canceled</li>

                <li>Service appointments must meet the set recipe criteria.</li>

                <li>The service appointment’s Scheduled End is shortened and the
                  gap created is large enough to fill. The minimum schedule
                  space created for the recipe to apply is 10 minutes (default
                  is 15 minutes).</li>

              </ul>
            </td>

            <td data-label="Expected Behavior (Result)" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e319 ">
              <ul>
                <li><strong class="uicontrol">Preserve Current Schedule and Fill
                    Gaps</strong> - Finishing work early frees up the
                  schedule. The optimization minimizes any changes to the
                  schedule by leaving as many scheduled appointments as is,
                  and filling the gap with the best match from the next 100
                  appointments scheduled for that resource.</li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="Scenario" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e313 ">Late-End Overlap</td>

            <td data-label="Trigger Criteria" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e316 ">
              <ul>
                <li>The service appointment’s Scheduled End is updated to a
                  later time. The minimum overlap for the recipe to apply is 1
                  minute (default is 10 minutes).</li>

                <li>Service appointments must meet the set recipe criteria.</li>

              </ul>
            </td>

            <td data-label="Expected Behavior (Result)" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e319 ">
              <ul>
                <li><strong class="uicontrol">Preserve Current Schedule</strong> - If an
                  appointment is taking longer than expected, the rest of the
                  day is at risk. The optimization minimizes any changes to
                  the schedule by leaving as many scheduled appointments as
                  is, and scheduling an appointment from the next 100
                  appointments scheduled for that resource. </li>

              </ul>
            </td>

          </tr>
          <tr class="">
            <td data-label="Scenario" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e313 ">Emergency Overlap</td>

            <td data-label="Trigger Criteria" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e316 ">
              <ul>
                <li>The service appointment’s Emergency = True, and the Status
                  Category = Scheduled/Dispatched.</li>

                <li>The minimum overlap for the recipe to apply is 1 minute
                  (default is 10 minutes).</li>

              </ul>
            </td>

            <td data-label="Expected Behavior (Result)" class="slds-cell-wrap" style="vertical-align:top;" headers="d53643e319 ">
              <ul>
                <li>Emergency dispatches can take the resource off-route. When
                  an emergency appointment is dispatched and results in
                  scheduling issues, optimization reschedules the rest of the
                  resource's day as needed in order to revolve around the
                  emergency location and other pinned service appointments,
                  while adhering to the scheduling policy objectives.</li>

                <li>The next appointment is scheduled from the next 100
                  appointments scheduled for that resource.</li>

              </ul>
            </td>

          </tr>
        </tbody>
      </table>

![Example](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-service-support_field_service-264-0-0-production-enus/3f7dceb9-dd70-454a-b49e-bbb4526a158d/images/icon_example.png)

Example Here’s a recipe that controls what happens to the assigned resource’s schedule when a solar appointment in the San Francisco service territory ends early and results in 60 unused minutes on the schedule.

![Sample scheduling recipe](https://sf-zdocs-cdn-prod.zoominsoftware.com/tdta-service-support_field_service-264-0-0-production-enus/3f7dceb9-dd70-454a-b49e-bbb4526a158d/support_field_service/images/pfs_recipe_example.png)