Intro
3B comes with a built-in session scheduling module that allows anyone to book a time slot based on a pre-defined schedule or based on a user’s calendar availability. This module can be used to allow appointment, events, interviews and meeting booking.
Implementation
You would need to first create a Salesforce guest site / guest community *(link to article) and grant access to the apex classes b3o.GlobalRemotingInterface which is responsible for handling the communication between the self-booking plugin*(article link) and Salesforce. Secondly, if you are using the out of the box self booking page b3o__SelfBookingConsole.page or you have created your own branded Visualforce Page embedding the self-booking plugin*(article link), then you will need to grant guest user access to those pages as well.
Session Types
Out of the box, we support two session types distinguished by their Record Type:
Based on Set Schedule
This session type is used when a session needs to be created with a pre-defined schedule, such as Monday, Wednesday and Thursday, at 9am. You can use the built in Session Scheduler with this session type in order to quickly create a schedule. Out of the box, the Session Scheduler is a tab on the Session record, however it is also a LWC component that can be embedded elsewhere.
Using the Session Scheduler, you can a plan of the oppointment slots by simply using a drag and drop interface. You may notice that you will be asked to set a number of openings for each schedule – this is important as it allows you to restrict how many people can “take” this slot. The self-booking component will prevent people from over-booking.
Based on Calendar Availability
This session type allows you to link a Salesforce user’s calendar to the self-booking component in order to provide an on-demand schedule with available slots. When creating the session using this type, you will be asked to set business hours, session length and days of the week in which you want to allow people to create a new appointment.
Object Model
The following objects are part of the self-booking utility. Below is a table that describes their usage.
Object Name | Description |
Session | Sessions are a description of the event/schedule/appointment for which you are expecting people to self-book for. |
Session Invitation | Session Invations are records that are created as a result of a successful invitation to book for a session or as a result of a successful booking |
Session Schedule | A schedule is used when the session type is “Based on Set Schedule” and it is responsible for determining what days and times are available for self-booking. |
Site | This object holds location based data and is used throughout 3B Onboarding. |
Workflow
We support two different workflows for allowing people to self-book.
Invitation-Only Workflow
This workflow requires that a Session Invitation record is created serving as an “invitation” to a particular session, regardless of the type of the session. This workflow requires that an alert email/SMS is built to notify the contact invited to the session that they have a pending invitation. By default, this is not available out of the box and it is part of the implementation process of the application.
Open Season Workflow
This workflow allows anyone with a link to a session to self-book and works much like calend.ly*(link to external provider). This workflow is enabled by the “Allow Registration to Book” checkbox on the Session record. If this setting is enabled, we will need to register users who book for a session for minimum required information at the time of booking, such as First/Last Name, Email, Mobile and potentially other fields that may be made required in the salesforce org. To configure what fields are available on the registration page, use the Custom Metadata Type “New Registration Fields”
Configuration
For the purposes of this article, we will assume that you are using the out of the box Visualforce page b3o__SelfBookingConsole.page.
Calendar Availability Options
Field Name | Description | Required |
Session Name | This is the identifier of the session. This can be something like “Job Interview”, “Meeting with Joe Bloggs”, “Assessment Centre” etc. | true |
Booking Confirmation Message | Once a successful booking is made, this will be the message displayed to the user. | false |
Description | A rich text information that will be displayed to the person booking prior to them booking for the session. | false |
Site | This is the location of the session. Can also be a link to a virtual room/teams link. Will be displayed to the person booking prior to them booking for the session. | true |
Session Leader | This is the user whose calendar we will pull appointment availability from | true |
Days Limit | How far in the future can one book for | true |
Minutes Buffer Before Booking | How many minutes before the booking can one actually self-book and create an event | true |
Mon-Fri Start and End Times | If provided, the day will be made available and anyone can book between the start/end times as long as the booking doesn’t overlap with another appointment | true |
Set Schedule Options
Field Name | Description | Required |
Session Name | This is the identifier of the session. This can be something like “Job Interview”, “Meeting with Joe Bloggs”, “Assessment Centre” etc. | true |
Booking Confirmation Message | Once a successful booking is made, this will be the message displayed to the user. | false |
Description | A rich text information that will be displayed to the person booking prior to them booking for the session. | false |
Site | This is the location of the session. Can also be a link to a virtual room/teams link. Will be displayed to the person booking prior to them booking for the session. | true |
Session Leader | This is the user who will be the “leader’ of the session. Optional | false |
Days Limit | How far in the future can one book for | true |
Minutes Buffer Before Booking | How many minutes before the booking can one actually self-book and create an event | true |
Timezone Handling
All times are stored in UTC in the database, however when the self-booking plugin is viewed by a user, we will offset the times based on their timezone. This happens automatically, however a user can change their timezone (for an example if it is wrongly identified).
Completing a Booking
When a booking is completed a new Session Invitation record will be created (or an existing one will be updated) where the booked times are stamped on the Session Inviation and if the booking is for a Set Schedule type session, we will link the Session Schedule record selected to the session invitation.
Search and Match
You can use the Search*(link to article) mechanism to find candidate(s) and contacts to invite for a session. Simply navigate to the “Candidate Search” tab in the session record and start a new search. If there are successful matches identified, you can select the record(s) that you want to invite to the session and click on the “Add” button. This depends on the out of the box delivered LWC component that handles creating Session Invitations from search results. You can extend this functionality by creating your own LWC component that can handle search results*(Link to article).
App Builder Customization
When placed on a Salesforce record page using the Lightning App Builder, administrators can configure several properties to tailor the component's behavior and appearance to their organization's needs. These properties include:
- First Day: Sets the first day of the week.
- Timezone: Determines the calendar's timezone.
- Slot Duration: Specifies the duration of time slots in the calendar.
- Business Hours Start/End: Defines the start and end times of business hours.
- Week/Day View Header Format: Sets the format for calendar headers in week/day views.
- Calendar Height: Controls the calendar's height.
- Calendar Start/End Time: Defines the range of hours displayed in the calendar.
- Event Colors: Configures colors for new, edited, and standard events.
Invitations Manager
We have built a neat component to that displays all active bookings and even lets you reject/revoke bookings at bulk. This component adds Monthly, Weekly and Daily views that users can switch between.
Assigning Document Packs
You can assign document pack(s)*(link to document packs) to invitees directly from the session record. Click on the “Assign Documents” button and follow the on-screen instructions.
Link to Google Cal / Outlook Cal
You can use the default built-in integration in Salesforce in order to sync your Outlook *(link to sf support page) and/or Google*(link to sf support page) calendars with your Salesforce Calendar in order to provide an up to date availability.
We also recommend that during the implementation of 3B Onboarding, whenever a successful booking is made, that we automatically create an event in the Salesforce Calendar for the user appointed as the session leader. This will enable a bi-lateral integration (if enabled) to block out slots in the user’s calendar and create an event.
Implementation
You can use our default out of the box page “b3o__SelfBookingConsole.page” that handles self-booking for external users or you can embed the self-booking plugin on any page or application in Salesforce or externally. Refer to our plugins*(link to article) article for an API guide.