Phase 3 - Adaptation & Development
This phase covers the technical implementation and customization of &bookme Scheduler.
Technical Implementation
Authentication Setup
- Legacy Auth Provider configuration
- Named Credentials setup
- Salesforce Connected App configuration
- Shared Activities setup
Data Provider Implementation
- Search Provider implementation
- SLA Utility implementation
- Meeting Configuration setup
- Competence provider configuration
Custom Metadata Configuration
- Brand Settings setup
- Booking Validation Rules
- Field mapping configuration
- Object relationship definitions
System Integration
User Management
- &bookme System User creation
- Permission set assignments
- Integration user setup
- Access control implementation
Salesforce Integration
Record Page Integration
- Opportunity Record Page
- Standard component embedding
- Context functionality extension
- Custom button configuration
- Event Record Page
- Component integration
- Workflow customization
- Field mapping setup
- Account Record Page
- Component embedding
- Context integration
- Custom functionality extension
Custom Label Configuration
- Terminology alignment
- Translation management
- Label overrides
- Text customization
Data Configuration
sObject Field Mapping
- AMB_Config__mdt setup
- AMB_SObject_Config__mdt configuration
- AMB_Config_Relation__mdt mapping
- Field mapping implementation
Competency Management
- Standard implementation setup
- Custom provider configuration
- Role-based assignments
- Validation rules
Location Management
- Location hierarchy setup
- Room mapping configuration
- Department structure
- Global/local settings
Component Configuration
BookmeCustomerFlow
- Experience site integration
- Parameter configuration
- Event handling setup
- Validation implementation
BookmeEmployeeFlow
- Record page integration
- Configuration options setup
- Event handling
- Custom functionality
Testing & Validation
Integration Testing
- Authentication verification
- Data flow validation
- Permission testing
- Component functionality
Configuration Testing
- Custom metadata validation
- Field mapping verification
- Location management testing
- Competency assignment validation
User Acceptance Testing
- Workflow validation
- Interface testing
- Permission verification
- Error handling
Success Criteria
- Technical Implementation
- All integrations functional
- Data providers implemented
- Custom metadata configured
- Security measures verified
- Component Integration
- Record pages configured
- Booking flows operational
- Event handling validated
- Custom functionality working
- Data Configuration
- Field mappings verified
- Competency management active
- Location structure implemented
- Custom labels configured
- Testing Completion
- All test cases passed
- User acceptance confirmed
- Performance validated
- Security verified
Detailed task description for Phase 3 – Adaptation and development
&bookme - Scheduler offers a wide range of configurations/customizations that ensure the product fits into your sales pipeline. In this section you will find the documentation for the fixes, configurations and customizations &bookme - Scheduler supports in relation to the implementation of the solution in complex organizations. You will also find guidelines for data quality and data relationships that must be met to get the most out of the solution.
&bookme Salesforce - Create your own configuration for sObject field mapping
It is possible to override &bookme – Scheduler’s access to standard objects via a no-code solution that can be extended with custom apex for transformations.
The no-code configuration is based on custom metadata types, so it can be easily migrated between systems and allows the creation of a configuration containing an activity object or an activity participant, as well as an Event. Each configuration of an sObject type is done by creating an AMB_SObject_Config_mdt record with the associated AMB_Config_field_Mapping__mdt.
This defines where &bookme – Scheduler can read and write from, and whether the individual field should be read with or without field level security. Each AMB_SObject_config__mdt can be created with or without sharing enabled.
Recommendation - We currently recommend leaving sharing disabled as customers will not normally have CRUD access to the sales pipeline.
Figure 1- Data model for sObject data access through configuration
Using amb_config__mdt
AMB_Config__mdt defines an Id for a given configuration consisting of 2 AMB_SObject_Config__mdt records. This Id can be specified as configId when using the BookmeCustomerFlow and BookmeEmployeeFlow LWC components
Amb_sobject_config__mdt
AMB_SObject_Config__mdt defines which fields should be read, written and updated on a given Event, Activity Participant or Activity Object record. It is also possible to define whether CRUD operations on the given sObject type should be performed with or without sharing rules.
Amb_config_relation__mdt
AMB_Config_Relation__mdt makes it possible to define a many-to-many relationship between an AMB_Config__mdt and an AMB_SObject_Config__mdt record. This makes it possible to create few AMB_SObject_Config__mdt records (e.g. one per record type) and reuse these across multiple configurations. An example here could be to create one record for CRUD operations on an Event and reuse this in configurations on Opportunity and Lead respectively.
Creating amb_config_field_mapping__mdt
AMB_Config_field_mapping__mdt contains a source to target field mapping between an AMBBookMeetingDTO object and a field on the given AMB_SObject_Config__mdt record. Each mapping can be done directly if the type of source and target respectively is compatible, or via a converter function that can map from Source to Target. The Apex function can also be used to aggregate data. Util_Class_Name__c must implement Salesforce’s Callable interface, which allows dynamic field access on Records. Util_Method_Name__c is a function that takes two inputs, a callable dto (AMBBookMeetingDTO) and a sourceName (string).
Deployment of the solution
In order for the solution to be deployed, certain data requirements must be met.
Account data requirements
- AMB_Location__c Must be populated with an AD location that matches advisors and premises exposed through Azure SCIM
- AMB_Customer_Category__c Must point to a Customer category from AMB_Taxonomy__c, synchronized from the &Money-Management configuration
User data requirements
- Advisor Email The advisor’s email field must match their AD email exposed via Azure SCIM to the &bookme – Scheduler backend
Competence data requirements
- AMBAdvisorCompetence__c must contain a many-to-many mapping between AMB_Taxonomy__c objects and advisor User Id
Location matching between Entra and Salesforce
In &bookme - Scheduler, 3 different location concepts are used.
Customer location | Advisor location | Meeting room location |
When booking a meeting for a given customer through Bookme – Scheduler, the customer’s location determines the availability of advisors and meeting rooms in the booking process.
The customer’s location is retrieved by default via the customer’s Salesforce account. An example of such a string could be “Finans Allé 1-3”. When the flow then displays available advisors under “department” or “global”, these advisors are filtered down to advisors who either have the same location as the customer, or are marked as global advisors.
The advisor’s location is given to &bookme - Scheduler through Azure SCIM. If this location exactly matches the text string displayed as the customer’s location, the advisor will be able to appear under “department” in the advisor flow.
The meeting room location is given to &bookme - Scheduler through Azure SCIM, and just like the advisor’s location, this is given via Azure SCIM. The list of meeting rooms in the advisor flow will therefore always be filtered down to meeting rooms whose location matches the customer’s location.
This means that if the customer’s location is “Finans Allé 1-3”, only exact syllables in the advisor and meeting room location match.
Location | Mathes the customer’s location |
---|---|
Finans Allé 1-3 | Yes ✅ |
Finans allé 1-3 | No ❌ |
Finans Allé 1 | No ❌ |
Finans Allé 3 | No ❌ |
Finans Allé1-3 | No ❌ |
Using custom labels
In the booking components we use “custom labels”, which means that you can overwrite the default values set for the text fields on various screens in the booking flow. Here you must use translations, by creating a translation in the language used in the org, for the custom label you want to overwrite. You should not go in and change the default values for booking custom labels directly, as these will be reset with each upgrade/installation of the package.
Documentation for naive competency management
As a starting point, &bookme – Scheduler uses the Andmoney__AMBAdvisorCompetence__c object to manage competencies for all employees in the solution. However, the management can also be implemented programmatically by implementing a Competence provider, so that the solution no longer looks up the individual advisor’s competencies in an object, but instead calculates them on-the-fly. Some customers today have a solution where, via the user’s job title, they have a standard group of meeting topics and customer groups that they return instead of looking them up in our object.
If you do not want to differentiate at all by customer categories or meeting types, competency retrieval can be turned off by short-circuiting the solution so that all advisors can advise in all customer groups and meeting topics. A less aggressive version would be, for example, to calculate the right customer categories, and then turn off meeting competencies by giving all competencies in the APEX class.
Exhibition of booking flows
The booking solution consists of 3 LWC components for customer-facing booking and advisor-facing booking and advisor-facing opportunity management, respectively.
BookmeCustomerFlow | BookmeEmployeeFlow | AMBMoveMeetingEventAction |
---|---|---|
LWC component that can be embedded in an experience site for customer-facing booking. This component is exposed in the Experience builder | LWC-komponent der kan indlejres i Account, Case og Opportunity record pages til rådgivervendt booking. Denne komponent er exposed i Page builderen. | Salesforce Flow Enabled LWC-komponent til brug i quick actions til at flytte events mellem account og opportunities |
Advanced configuration of BookmeCustomerFlow
Configurations on BookmeCustomerFlow are done via the public attribute Config, which allows you to provide a complex configuration object to the solution. Below are the options in the object
Mutual | Configuration | Description |
---|---|---|
No | advisorOptionWhitelist | Allows you to specify a whitelist of advisor options that are added as a filter on the backend configuration. This makes it possible to ensure that the customer is never offered a specific advisor option even if the customer is eligible for it in the Mgmt UI. Possible filter values: - PrimaryAdvisor - OtherAdvisors |
No | meetingTypeWhitelist | Allows you to specify a whitelist of meeting types that are added as a filter on the backend configuration. This makes it possible to ensure that the customer is never offered a specific meeting type even if the customer is entitled to it in the Mgmt UI. Possible filter values: - Physical - Online - Telephone - OffSite |
Yes | customflow | Property is used to control which custom flow is desired. This can have these valid values: withtheme: Used to start the booking flow with a pre-selected theme. - update: Used to go directly to the “reschedule” page in the experience flow for an existing meeting, or start an “edit” flow in the record-page flow for an existing meeting - cancel: Used to go directly to the “cancel meeting” page for an existing meeting |
Yes | meetingId | The ID of the meeting in &bookme - Scheduler with which you want to start an “update” or “cancel” flow |
Yes | subthemeid | The subtheme ID of the theme you want to start a flow with a preselected theme with |
Yes | disableprogressbar | Hides the progress bar at the top of the flow |
Yes | disablecustomermeetings | Hides the meeting overview at the start of the flow |
Yes | removeclosebutton | Hides the option to press the “Close meeting booking” button on the confirm page |
No | contactId | Required: contactId of the customer initiating the meeting booking |
Yes | accountId | Required: AccountId for the account the customer is associated with |
Advanced configuration on BookmeEmployeeFlow
Mutual | Configuration | Description |
---|---|---|
No | disableheaders | Hides header and back button in the flow |
No | disablecustommeetingtitle | Removes the feature to manually set/edit meeting title. |
No | meetingtitle | Start BookmeEmployeeFlow with a predefined meeting title |
No | disableadditionalcontacts | Hides the ability to add meeting contacts |
Yes | customflow | Property is used to control which custom flow is desired.This can have these valid values: - withtheme: Used to start the booking flow with a pre-selected theme. - update: Used to go directly to the “reschedule” page in the experience flow for an existing meeting, or start an “edit” flow in the record-page flow for an existing meeting - cancel: Used to go directly to the “cancel meeting” page for an existing meeting |
Yes | meetingid | The ID of the meeting in &bookme - Scheduler with which you want to start an “update” or “cancel” flow |
Yes | subthemeid | The subtheme ID of the theme you want to start a flow with a preselected theme with |
Yes | disableprogressbar | Hides the progress bar at the top of the flow |
Yes | disablecustomermeetings | Hides the meeting overview at the start of the flow |
Yes | removeclosebutton | Hides the option to press the “Close meeting booking” button on the confirm page |
Advanced configuration of AMBMoveMeetingEventAction
EventId | Salesforce event ID of event to be moved |
brand | Styling to be used |
disablerelationtoaccount | Remove the ability to relate the event directly to an account |
LWC Events
logerror | This event is executed every time an error occurs in the booking flow |
back | Executed when the “back” button is pressed in a custom flow |
close | Executed when the “Close meeting booking” button is pressed |
meetingbooked | Executed when a meeting has been booked or updated |
meetingcanceled | Executed when a meeting has been canceled |
&Bookme – setup requirements and points to consider
Requirements for setup:
- Salesforce permission sets MUST be set correctly for Advisor both in terms of the account and in terms of booking
- Advisor’s user email in Salesforce MUST match the advisor’s email as specified via the bank’s Entra
- Advisors, rooms and customers are matched together based on their location string. A match requires that the location string is 100% identical - otherwise rooms, advisors and customers cannot be linked together.
- Also always check the ‘Manage availability’ overview in the management UI - Red ‘crosses’ indicate problems that MUST be fixed
Points of attention
- &bookme - Scheduler synchronizes calendars up to n days into the future (default 60 days). This means that a meeting booked further into the future than n days will only take into account free time for other meetings booked through &bookme
- Repeated meetings and meetings over several days (e.g. vacation) that were booked before &bookme synchronization was enabled are currently not synchronized
- Past meetings cannot be edited via &bookme - Scheduler
- Advisors may only be created in one environment at a time (i.e. an advisor cannot be in both the test and production environments)
- If a search for an advisor returns too many results, you must use an email alias to find the advisor, i.e.
@.... - If other advisors are invited to the meeting, you can only see their acceptance of the invitation in Outlook
- If meeting creation in Salesforce fails, the meeting is not canceled in Backend/m365
Support tickets
- Describe the process in as much detail as possible so that we can recreate the experience (including what the expected result was)
- For troubleshooting in Salesforce, we often need to enable the debug log and then send the log to &bookme’s service desk.
- In case of errors on booked meetings, it is important to include the meeting’s bookingId for troubleshooting in the &bookme -Scheduler solution
Extraordinary calendar availability
This feature is used if an advisor wants to be available outside of the availability configured in the Management UI. To use the feature, the advisor must book the &bookme - Scheduler Integration User in their outlook calendar (the user that the bank has set up for the MS365 integration service - e.g. the bank’s IT department has the details of this user). This signals to &bookme - Scheduler that the advisor is available outside of normal availability, but only for online and telephone meetings.
Offer of advisor for given configuration
This section provides an overview of when appointments are scheduled for an advisor in different scenarios.
BookmeCustomerFlow
In BookmeCustomerFlow you can choose between ‘My Advisor’ and ‘Other Advisors’. The location sent when asking about available appointments is the one configured on the Account.
Offer as primary advisor
Location | My advisor | + Others |
---|---|---|
SCIM match | ✅ | ✅ |
Schedule match | s | ✅ |
No match | Physical ❌ ✅ |
Physical ❌ ✅ |
The primary advisor will be the advisor who is set as Account Owner for the customer’s Account.
Example of how to read the table: The table shows when the primary advisor’s times will be displayed.
- If the Account location matches the advisor’s SCIM location, times for the primary advisor will be displayed under ‘My Advisor’ and ‘Other Advisors’.
- If the Account location matches the location configured in the advisor’s schedule for that weekday, times for the primary advisor will be displayed under ‘My Advisor’ and ‘Other Advisors’.
- If the Account location does not match the primary advisor’s SCIM or Schedule location, only online and phone times will be displayed.
Tender as a local advisor
Location | My advisor | + Others |
---|---|---|
SCIM match | ❌ | ✅ |
Schedule match | ❌ | ✅ |
No match | ❌ | ❌ |
A local advisor will be an advisor who is NOT the Account Owner, but has the same SCIM/Schedule location as the one configured on the Account.
Tender as a global advisor
Location | My advisor | + Others |
---|---|---|
SCIM match | ❌ | Physical ❌ ✅ |
Schedule match | ❌ | Physical ❌ ✅ |
No match | ❌ | Physical ❌ ✅ |
A global advisor is an advisor who is configured as Global in the Booking Management UI. Appointments are displayed for these advisors even if their SCIM/Schedule location is different from the Account location.
BookmeEmployeeFlow
In BookmeEmployeeFlow you can search for times for either specific advisors, local advisors or all available advisors (Local and Global).
The tables below show when times are posted for the different scenarios.
Specific advisor
Location | My advisor | + Others | + Global |
---|---|---|---|
SCIM match | ✅ | ✅ | ✅ |
Schedule match | ✅ | ✅ | ✅ |
No match | ✅ | Physical ❌ ✅ |
Physical ❌ ✅ |
Local advisor
Location | My advisor | + Others | + Global |
---|---|---|---|
SCIM match | ❌ | ✅ | ✅ |
Schedule match | ❌ | ✅ | ✅ |
No match | ❌ | ❌ | ❌ |
Global advisor
Location | My advisor | + Others | + Global |
---|---|---|---|
SCIM match | ❌ | ❌ | Physical ❌ ✅ |
Schedule match | ❌ | ❌ | Physical ❌ ✅ |
No match | ❌ | ❌ | Physical ❌ ✅ |