Revenue Grid API Calls for Salesforce Scheduler¶
For users of the Email Sidebar on:
13 min read
Starting with Salesforce Spring 2021 update, customers who use Salesforce Scheduler can do the following via Revenue Grid’s Salesforce Scheduler adapter (SSA):
- parse own and colleagues’ actual calendar availability data from their MS Outlook calendars to be used in Salesforce Scheduler
- easily down-sync to MS Outlook calendar their Salesforce Events created with Scheduling App, this way ensuring that their calendars are always up to date and in sync
Tip
Also see this Revenue Grid article for more information on using Salesforce Scheduler
Revenue Grid ensures this possibility by establishing interaction between Salesforce Scheduler and the users’ Exchange accounts over several API endpoints. This article explains how these API methods and properties work.
Tip
Also see this video https://youtu.be/D6betOrxAwo to learn in detail how the users work with RG Email Sidebar in Salesforce Scheduler
Specific calendar actions performed over API¶
- Read, Create, Update, Delete calendar items on MS Exchange servers. This also includes: attendees availability spans parsing from their calendars; adding a booked Appointment based on a Salesforce Scheduler Event to the attendees’ calendars
- Checking if the above listed actions were performed successfully; troubleshooting possible errors, e.g. Exchange data access issues
- Indicating which attendee is the meeting’s organizer
Prerequisites:
Slightly different sets of prerequisites are required to perform the call Read (retrieve availability) and the calls Create, Update, Delete.
For Read method the prerequisites are:
- Create a Revenue Grid Profile which the attendees belong to
- Revenue Grid access_token acquired for a special user, a user belonging to the same RG Profile with a valid MS Exchange credentials setup
- Other users whose availability is retrieved should belong to the same Exchange Org as the special user
For Create, Update, Delete calls, the prerequisites are as follows:
- Create a Revenue Grid Profile authorized via a service Impersonation Account which the attendees belong to
- All users whose Salesforce Scheduler Events will be down-synced to Outlook should belong to the same Revenue Grid Profile
- Revenue Grid access_token acquired for a user belonging to the same RG Profile that has Profile Admin permissions in the RG Profile (the updateOrganization setting)
- Note that users mailboxes’ email aliases are not supported for these methods: each Salesforce user is matched with a single Revenue Grid user / email address
Special notes:
All date and time properties in the calls and responses are set in the ISO 8601 standard: YYYY-MM-DDThh:mm:ssZ
All input and output dates and times are set in GMT time zone.
Access authorization token¶
Access authorization required to work with MS Exchange data is granted using an access_token acquired by Revenue Grid Sync Engine.
Salesforce Scheduler - Exchange downsyncing
When Events created in Salesforce Scheduler get down-synchronized to MS Outlook calendar, due to a technical limitation in MS Exchange Revenue Grid creates a set of overlapping Appointments instead of a Meeting for every Attendee and the Event’s Organizer.
Endpoint 1: attendees’ calendar availability retrieval from Outlook calendar (Read)¶
This call is used to collect available slots data from an attendee’s MS Exchange calendar data. It has the following properties:
Tenant_URL stands for the URL of RG Tenant which the organizer belongs to
From and to availability dates/time span defining the time period during which a meeting is possible, e.g. from=2020-10-15T00:00:00Z&to=2020-10-17T12:00:00Z
salesforceCorrelationId is an extra technical property which is acquired by Salesforce Scheduler, it is used for troubleshooting purposes
The API Read call’s body includes the following properties:
email the email addresses of attendees from the same MS Exchange Org. Clauses on different attendees’ availability are included as separate clauses in brackets
serviceResourceId is a technical property required by the Salesforce Scheduler
isOrganizer indicates if the attendee is the meeting’s Organizer; this additional property is included for future use possibilities
A sample Read request¶
POST {TENANT_URL}/api/salesforce/scheduler/availability?from=2020-10-15T00:00:00Z&to=2020-10-17T12:00:00Z&salesforceCorrelationId=abcdefg
Body:
[
{
"email": "[email protected]",
"serviceResourceId": "12345",
"isOrganizer": true
},
{
"email": "[email protected]",
"serviceResourceId": "54321"
}
]
The API Read response includes the following data retrieved for every attendee listed in the call:
serviceResourceId is a technical property required by the Salesforce Scheduler
errorCode indicates an error code for troubleshooting, if an error occurred. NoError is displayed if there were no errors; other error indicators are also self-explanatory
unavaialbleTimeSlots is the retrieved data on the occupied slots in the attendee’s calendar over the period specified in the call, in supported format YYYY-MM-ddThh:mm:ssZ. Data on different occupied slots is listed as separate clauses in brackets
TimeMin is the date and time of the start of an occupied span in the attendee’s calendar in supported format YYYY-MM-ddThh:mm:ssZ
TimeMax is the date and time of the end of an occupied span in the attendee’s calendar in supported format YYYY-MM-ddThh:mm:ssZ
A sample Read response¶
[
{
"serviceResourceId": "12345",
"errorCode": "NoError",
"unavailableTimeslots": [
{
"timeMin": "2020-10-16T10:00:00Z",
"timeMax": "2020-10-16T12:00:00Z",
},
{
"timeMin": "2020-10-16T14:00:00Z",
"timeMax": "2020-10-16T15:00:00Z",
},
]
},
{
"serviceResourceId": "54321",
"errorCode": "NoError",
"unavailableTimeslots": [
{
"timeMin": "2020-10-16T10:00:00Z",
"timeMax": "2020-10-16T16:00:00Z",
}
]
},
]
Endpoint 2: saving a Salesforce Scheduler Event as an Appointment in Outlook calendar (Create)¶
This call is used to create (down-sync) an Appointment in MS Exchange based on a Salesforce Scheduler Event. It has the following properties:
Tenant_URL stands for the URL of RG Tenant which the organizer belongs to
API call’s body includes the following properties:
id alphanumerical value, unique ID of the Salesforce Scheduler Event that a matching Outlook Appointment should be created for
organizerEmail email address of the Event’s Organizer
body body (description) of the Appointment to be created
subject subject of the Appointment to be created
location location of the Appointment to be created
startTime start date/time of the Appointment to be created in supported format YYYY-MM-ddThh:mm:ssZ
endTime end date/time of the Appointment to be created in supported format YYYY-MM-ddThh:mm:ssZ
salesforceCorrelationId is an extra technical property which is acquired by Salesforce Scheduler, it is used for troubleshooting purposes
attendees list of attendees of the Appointment to be created
email email addresses of the attendees from the same MS Exchange Org. Clauses on different attendees are included as separate clauses in brackets.
isRequired defines if an attendee is required or optional: true or false
A sample Create request¶
POST {TENANT_URL}/api/salesforce/scheduler/postback
Body:
{
"id": "abcde-fghij-klmno-pqrst-uvwxyzfb3f11e",
"organizerEmail": "[email protected]",
"body": "meeting description",
"subject": "meeting subject",
"location": "meeting room 1",
"startTime": "2020-10-16T10:00:00Z",
"endTime": "2020-10-20T23:00:00Z",
"salesforceCorrelationId": "ac3b40b4-2c33-463b-8bfe-8bcf077d7539",
"attendees": [
{
"email": "[email protected]",
"isRequired": "true",
},
{
"email": "[email protected]",
"isRequired": "false",
}
]
}
The API Create response includes the following data retrieved for every attendee included in the call:
email is the email addresses of attendees. Responses on different attendees’ availability are included as separate clauses in brackets
errorCode indicates an error code for troubleshooting, if an error occurred. NoError is displayed if there were no errors; other error indicators are also self-explanatory
A sample Create response¶
[
{
"email": "[email protected]",
"errorCode": "NoError"
},
{
"email": "[email protected]",
"errorCode": "ErrorMailRecipientNotFound"
},
{
"email": "[email protected]",
"errorCode": "NoError"
}
]
Endpoint 3: updating an Appointment in Outlook calendar (Update / Modify)¶
Tenant_URL stands for the URL of RG Tenant which the organizer belongs to
API call’s body includes the following properties:
original fields of the item before updating / modifying
id alphanumerical value, unique ID of the Salesforce Scheduler Event whose matching Appointment should be updated / modified
organizerEmail email address of the Event’s Organizer
body body (description) of the Appointment to be updated / modified
subject subject of the Appointment to be updated / modified
location location of the Appointment to be updated / modified
startTime start date/time of the Appointment to be updated / modified, in supported format YYYY-MM-ddThh:mm:ssZ
endTime end date/time of the Appointment to to be updated / modified, in supported format YYYY-MM-ddThh:mm:ssZ
attendees list of attendees of the Appointment to be updated / modified:
email the email addresses of attendees from the same MS Exchange Org. Clauses on different attendees are included as separate clauses in brackets
isRequired defines if an attendee is required or optional: true or false
new updated fields of the item
Note: only the updated new values differ from the original values, but the call’s syntax requires including the unchanged values as well
organizerEmail email address of the Event’s Organizer
body (description) updated body of the Appointment
subject updated subject of the Appointment to be updated / modified
location updated location of the Appointment to be updated / modified
startTime updated start date/time of the Appointment to be updated / modified, in supported format YYYY-MM-ddThh:mm:ssZ
endTime updated end date/time of the Appointment to to be updated / modified, in supported format YYYY-MM-ddThh:mm:ssZ
attendees updated list of attendees of the Appointment:
email the email addresses of attendees from the same MS Exchange Org. Clauses on different attendees are included as separate clauses in brackets
isRequired defines if an attendee is required or optional: true or false
salesforceCorrelationId is an extra technical property which is acquired by Salesforce Scheduler, it is used for troubleshooting purposes
A sample Update request¶
PUT {TENANT_URL}/api/salesforce/scheduler/postback
Body:
{
"original": {
"id": "abcde-fghij-klmno-pqrst-uvwxyzfb3f11e",
"organizerEmail": "[email protected]",
"body": "meeting description",
"subject": "meeting subject",
"location": "meeting room 1",
"startTime": "2020-10-16T10:00:00Z",
"endTime": "2020-10-20T23:00:00Z",
"attendees": [
{
"email": "[email protected]",
"isRequired": "true",
},
{
"email": "[email protected]",
"isRequired": "false",
}
]
},
"new": {
"organizerEmail": "[email protected]",
"body": "meeting description",
"subject": "meeting subject",
"location": "meeting room 1",
"startTime": "2020-10-16T10:00:00Z",
"endTime": "2020-10-20T23:00:00Z",
"attendees": [
{
"email": "[email protected]",
"isRequired": "true",
},
{
"email": "[email protected]",
"isRequired": "false",
}
]
}
"salesforceCorrelationId": "ac3b40b4-2c33-463b-8bfe-8bcf077d7539"
}
The API Update response includes the following data retrieved for every attendee included in the call:
email is the email addresses of attendees. Response on different attendees are included as separate clauses in brackets
errorCode indicates an error code for troubleshooting, if an error occurred. NoError is displayed if there were no errors; other error indicators are also self-explanatory
A sample Update response¶
[
{
"email": "[email protected]",
"errorCode": "NoError"
},
{
"email": "[email protected]",
"errorCode": "NoError"
},
{
"email": "[email protected]",
"errorCode": "ErrorMailRecipientNotFound"
}
]
Endpoint 4: deleting an Appointment from Outlook calendar (Delete)¶
Tenant_URL stands for the URL of RG Tenant which the organizer belongs to
id alphanumerical value, unique ID of the Salesforce Scheduler Event whose matching Appointment should be deleted
organizerEmail email address of the Event’s Organizer
attendees list of the attendees of the item to be deleted; their emails are listed in quotation marks, no separate clauses required
A sample Delete request¶
DELETE {TENANT_URL}/api/salesforce/scheduler/postback
Body:
{
"id": "abcde-fghij-klmno-pqrst-uvwxyzfb3f11e",
"organizerEmail": "[email protected]",
"attendees": [
"[email protected]",
"[email protected]"
]
}
The API Delete response includes the following data retrieved for every attendee included in the call:
email is email addresses of the attendees. Responses on different attendees included as separate clauses in brackets
errorCode indicates an error code for troubleshooting, if an error occurred. NoError is displayed if there were no errors; other error indicators are also self-explanatory
A sample Delete response¶
[
{
"email": "[email protected]",
"errorCode": "NoError"
},
{
"email": "[email protected]",
"errorCode": "NoError"
},
{
"email": "[email protected]",
"errorCode": "ErrorMailRecipientNotFound"
}
]