Concierge Integration - Salesforce ServiceCloud
Power-up 🚀 your ServiceCloud Case management system with Moveworks concierge. Using this integration, your employees can manage all their ticketing support — natively in-chat — via natural language.
Note: In Salesforce ServiceCloud tickets are referred as cases.
Using Moveworks Concierge, your employees can do the following:
- File cases
- Receive notifications about
- Case comments
- Case resolutions
- Case nudges
- View cases
- Add comments to a case
- Close cases
- Reopen cases
File Cases
Behind the scenes
Whenever a user requires help with Case Creation, Moveworks will create a case in ServiceCloud on behalf of the user.
Fields populated on Case Creation
.
Case Object Details
Field | Standard Field/ Custom Field | Definition | Value | Field populated by Moveworks or Customer | Comments | Restrictions |
---|---|---|---|---|---|---|
ContactId | Standard | 15 Char Id of the SF user filing the case | 15 char unique userID | Moveworks | 15 Char ID of SF employee who is filing the ticket. Fetch the ID from OKTA. Okta Field name = Supportforce Contact ID OR use ServiceCloud user object to get the ID and store it within Moveworks we will store user object details and use the ID. Object = Contact Field = Id, Name | |
Subject | Standard | Title of the case | "User Utterance" | Moveworks | Short Description of the ticket | length: 255 |
Description | Standard | Long description of the case | "User Utterance" | Moveworks | Description of the ticket | length: 32000 |
Origin | Standard | Moveworks system used to file the ticket | TBD | Moveworks | Name of the system which filed the ticket. Ex : moveworks / Moveworks Slack/Moveworks Web | |
Priority | Standard | The Priority of the new case | 3-Standard | Moveworks | Default priority is "3-Standard" | |
Status | Standard | Status of the created case | New | Moveworks | All new filed ticket has a status=New | |
OwnerId | Standard | Assignment group/ queue for the the newly filed case | Salesforce to use ContactId and trigger a logic to populate OwnerID | Customer | The owner is the ticket assignment group. for a new ticket, the owner is in a queue and then once an agent picks up the ticket, the owner changes to the individual agent id/nameLogic to select Owner Queue : It depends on location of the user who is filing the ticket. Ex : Location = Amer Then Owner = TF AMER , Location = Europe then Owner = TF EMEA | |
RecordTypeId | Standard | - | Default value = Ticket Record | Moveworks | Default value = Ticket Record Type | |
Internal_Support_Category__c | Custom | - | Concierge Uncategorized | Moveworks | This value is pre-populated based on Knowledge article being used to file the ticket. For Generic ones " Concierge Uncategorized: is used | |
Type | Standard | Identifies an Incident Case type vs. Request Case type | 1. Incident 2. SERVICE REQUEST | Moveworks | Moveworks will Triage and accordingly set the value |
API used for case creation:
curl --location --request POST 'https://{{base_url}}/services/data/v54.0/sobjects/Case' \
--header 'Authorization: Bearer {{auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"ContactId":"0037g00000q8KcVAAU",
"Origin": "Moveworks",
"Subject": "I am having issues with my VPN",
"Description":"for some reasons my VPN stopped working",
"Priority":"3-Standard",
"Status":"New",
"RecordTypeId":"0120000000000BSAAY",
"Internal_Support_Category__c":"Concierge Uncategorized"
}'
Uploading Attachments
End user are able to add attachments
while:
- Creating a new case
- Updating an existing case
API used for updating a case:
curl --location --request PATCH 'https://{{base_url}}/services/data/v54.0/sobjects/Case/{{case_id}}' \
--header 'Authorization: Bearer {{auth_token}} ' \
--header 'Content-Type: application/json' \
--data-raw '{
"Description": "for some reasons my VPN stopped working"
}'
API used for adding attachments:
curl --location --request POST 'https://{{base_url}}/services/data/v54.0/sobjects/Attachment?Body' \
--header 'Authorization: Bearer {{auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"ParentId":"{{case_id}}",
"Name":"Pls find attachment",
"Body": "I wanted to share more information with the team. It may help in faster resolution"
}'
Name of the attachment will be auto generated.
Limitations
- Size: we will put a limit of 32MB attachment upload. This is configurable as per customer requirement.
- Format: No format check at Moveworks end. If the API response is an error then accordingly we will notify the end user
- Number of attachments per ticket: No restrictions. we will allow multiple attachments per case. This is configurable.
Case Updates
Users adding a public comment
API used for adding public comments:
curl --location --request POST 'https://{{base_url}}/services/data/v54.0/sobjects/CaseComment' \
--header 'Authorization: Bearer {{auth_url}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"ParentId": "{{case_id}}",
"IsPublished": true,
"CommentBody": "Need the issue resolved to be resolved this week. we have customer webinar next week",
"IsNotificationSelected": true
}'
Check Status
Checking status using a specific case number
API used for case status for a case number:
curl --location --request GET 'https://{{base_url}}/services/data/v54.0/query/?q=SELECT+Status,Subject+from+Case WHERE CaseNumber='\''{{case_id}}'\''' \
--header 'Authorization: Bearer {{auth_token}}'
Checking status of all open cases
API for checking status of all open cases:
curl --location --request GET 'https://{{base_url}}/services/data/v54.0/query/?q=SELECT+CaseNumber+from+Case WHERE ContactId='\''{{contact_id}}'\''' \
--header 'Authorization: Bearer {{auth_token}}'
Checking status using a keyword
We will use our natural language understanding (NLU) engine to get the relevant tickets and show the status.
On all case status enquiries , assignee name is shown along with the latest status. We will use “Case_Owner__c” field from Case object to extract assignee name and show it to the user.
Case closed by a user
API used for closing a case:
curl --location --request PATCH 'https://{{base_url}}/services/data/v54.0/sobjects/Case/5007g00000BPKcyAAH' \
--header 'Authorization: Bearer {{auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"Status": "Closed - By User"
}'
Case reopened by the user
API used for Reopening a case:
curl --location --request PATCH 'https://{{base_url}}/services/data/v54.0/sobjects/Case/5007g00000BPKcyAAH' \
--header 'Authorization: Bearer {{auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"Status": "Reopened"
}'
Important note for case closure/Re-open: Case Facet object type within ServiceCloud host the logic of status transition and limitations on ticket types and user action relation. Ex: For certain ticket types, users are not allowed to close the ticket. Moveworks will rely on Customer to apply this logic at the data layer. Moveworks will allow users to take action all action on all tickets. If an API response is an error based on the logic, then we will inform the user accordingly.
API error message in response
Case Notifications
Case status is moved to = Waiting for user response, Waiting for customer response
Moveworks will notify the user on the status change and request that they add relevant information using “add comment” call to action.
We will also add a work note so that the Agent can see the notifications being delivered to the end user
API used to add worknote:
curl --location --request POST 'https://{{base_url}}/services/data/v54.0/sobjects/CaseComment' \
--header 'Authorization: Bearer {{auth_token}}' \
--header 'Content-Type: application/json' \
--data-raw '{
"ParentId": "{{case_id}}",
"IsPublished": false,
"CommentBody": "Adding a Private Comment",
"IsNotificationSelected": false
}'
Agent adds a public comment
Moveworks polls all the tickets and associated comments. For all new public added comments by Agents, Moveworks will notify the user.
API used to fetch comments:
curl --location --request GET 'https://{{base_url}}/services/data/v54.0/query/?q=SELECT+CommentBody+from+CaseComment WHERE ParentId='\''{{case_id}}'\''' \
--header 'Authorization: Bearer {{auth_token}}'
No activity on case by user from past number of days ago
The number of days are configurable here:
Moveworks will also add a work note on the case.
When user submits a case from a non-Moveworks channel
Moveworks will notify the user and also add a work note on the case.
Case closed by an Agent
User will be notified by the bot. Moveworks will also add a worknote.
API details to fetch all cases closed by an agent:
curl --location --request GET 'https://{{base_url}}/services/data/v54.0/query/?q=SELECT+Subject+from+Case' \
--header 'Authorization: Bearer {{auth_token}}'
Updated 9 months ago