32Sales Assistant
This chapter contains the following:
Overview of Sales Assistant Intents, Entities, and Custom Components
Intents categorize the actions and tasks that the Oracle Sales Assistant skill can perform. The sales assistant supports these intents:
-
Sales Briefing
-
Get Sales Records
-
Get Another Record
-
Create Sales Records
-
Update Sales Records
-
Unresolved Actions
-
Cancel Transactions
Intents map words and phrases to a specific action. Entities add context to the intent itself. They help to describe the intent more fully and enable your sales assistant skill (bot) to complete a user request. These intents support the standard entities the sales assistant uses to identify the key pieces of user input that let the skill fulfill tasks.
The intents also support custom components that interact with Oracle CX REST APIs to retrieve and update sales data.
These intents and their entities and custom components are described in the topics that follow.
oscm://
as a link
in SMS messages.
Setup Considerations
Configure Sales Assistant
For the "See recommendations" action on an opportunity, the recommended actions require that the Enable Adaptive Intelligence profile option is enabled to integrate with Oracle Adaptive Intelligent Apps for Customer Experience. However, even if you don't license the Adaptive Intelligent apps, then your users can still get the benefits of using Sales Coach. For example, if there are no recommended actions from the Adaptive Intelligent apps, then the sales assistant application offers the Sales Coach actions to users.
For more information about recommended actions from Oracle Adaptive Intelligent Sales Apps for Customer Experience, see the Using Adaptive Intelligent Sales guide or see the Opportunities chapter, Recommended Actions section of the Implementing Sales guide. For more information about Sales Coach for opportunities, see the Implementing Sales guide, Opportunities chapter, Sales Methods, Sales Stages, and Sales section.
Set Up Sales Assistant
You must have Oracle Digital Assistant and Oracle Identity Cloud Service provisioned, as well as digital assistant roles assigned to your users, before you can use the sales assistant.
Here's how to access a provisioned digital assistant with the Oracle Sales Assistant skill:
-
In Oracle Digital Assistant, select the Digital Assistant menu and open FADigitalAssistant.
-
Click Train to train the skill with the Trainer Tm learning-based model.
-
Click Channels in the left menu and then choose Users.
-
Using the details from your Twilio account, create and enable the SMS channel:
-
Click Add Channel.
-
In the Create Channel dialog, enter a name and then choose Twilio SMS from the Channel Type menu.
-
Enter the Account SID, Authorization Token and Twilio Number.
-
Select Channel Enabled.
-
For more information, see Using Oracle Digital Assistant guide and Oracle Adaptive Intelligent Apps for CX - Using Adaptive Intelligent Sales guide on Oracle Help Center.
Details of the Intents
Sales Briefing Intent
This intent handles the sales briefing functionality.
Sales Briefing Entities
The Sales Briefing intent doesn't have any entities.
Get Sales Records Intent
This intent handles all the flows related to the read flows. It allows the sales representative to query for open opportunities based on close period, opportunities based on name, open tasks, overdue tasks, account details, appointments, contacts and so on.
Get Sales Records Entities
Here are the Get Sales Records entities:
Entity Name | Description |
---|---|
CURRENCY |
Captures currency values. This system entity extracts currency when the user queries for opportunities based on revenue amount. |
CX_ActivityTypes |
Identifies which activity type the user requests. The activity type includes appointment, task, and call report. |
CX_DirectActions |
Identifies the specific action for an object from the user query. For example, it includes add note, opportunity for account, update opportunity, close opportunity, opportunity recommended actions, quote for opportunity, account for opportunity, account for contact, opportunity for contact. |
CX_objects |
Helps identify which object the user is querying and routes accordingly. Objects include opportunity, account, contact, appointment, and tasks. |
DATE |
Captures date information. This system entity is used across activities to read date information such as appointment start date, appointment end date, and task due date. |
DATE_EQ |
Captures a date entity with preceding phrases such as: equals, equal to, on, as, close date, is, =, equals the date, and so on. |
DATE_GE |
Captures a date entity with preceding phrases such as: greater than or equals, greater than or equal to, more than or equals, and so on. |
DATE_LE |
Captures a date entity with preceding phrases such as: less than or equals, less than or equal to, on or before, and so on. |
DATE_GT |
Captures a date entity with preceding phrases such as: greater than, more than, after, and so on. |
DATE_LT |
Captures a date entity with preceding phrases such as: less than, before, lesser than, below, and so on. |
DATE_WI |
Captures a date entity with preceding phrases such as: between, with in, within, and so on. |
DURATION |
Captures duration information in tasks. This system entity is used when the user queries for tasks in a range such as tasks due next week or tasks due last week. |
NUMBER |
A system entity to capture a number. |
Q_AccountName |
Captures the organization name and allows the user to search for it. |
Q_AppointmentQueryType |
Determine whether the user is requesting for current appointment or next appointment. |
Q_ClosePeriod |
Used to search for opportunities based on the close period. It stores a list of possible close period values such as current fiscal quarter, next fiscal quarter, previous fiscal year and so on. |
Q_ContactName |
Captures the contact name and allows the user to search for it. |
Q_IsBiggest |
Determines whether the user is asking for biggest opportunities based on keywords such as "top", "biggest" and so on. |
Q_IsCancel |
Identifies if a user wants to cancel out of the current flow. It includes words like exit, cancel, I don't want to, Don't create, and so on. |
Q_OpportunityName |
Captures the name of the opportunity to be searched. |
Q_OptyCloseDateOperator |
Identifies the operator to be used against the Close Date for adaptive search on opportunities. |
Q_OptyRevenueOperator |
Retrieves the biggest opportunities or biggest opportunity. Used to sort the opportunity list based on revenue. |
Q_Overdue |
Used to identify if the user searches for overdue tasks based on keywords like "overdue" and "past due." |
Get Another Record Intent
This intent handles a user requesting a different record than the record currently presented to the user.
Get Another Record Entity
Here are the Get Another Record entities:
Entity Name | Description |
---|---|
CX_objects |
Helps identify which object the user is querying and routes accordingly. Objects include opportunity, account, contact, appointment, and tasks. |
Q_IsCancel |
Identifies if a user wants to cancel out of the current flow. It includes words like exit, cancel, I don't want to, Don't create, and so on. |
Create Sales Records Intent
This intent handles all create flows. It includes actions such as create follow up appointment, create follow-up task, create follow-up call report.
Create Sales Records Entities
Here are the Create Sales Records entities:
Entity Name | Description |
---|---|
CX_ActivityTypes |
Identifies which activity type the user requests. The activity type includes appointment, task, and call report. |
CX_DirectActions |
Identifies the specific action for an object from the user query. For example, identifies such actions as add note, update opportunity, close opportunity. |
CX_objects |
Helps identify which object the user is querying and routes accordingly. Objects include opportunity, account, appointment, contact and tasks. |
Q_AccountName |
Captures the organization name and allows the user to search for it. |
Q_AddNoteRecordName |
Extracts the record name directly from the user query. It can be an account name, opportunity name or contact name. |
Q_ContactName |
Captures the contact name and allows the user to search for it. |
Q_CreateTypes |
Helps to identify whether the new item is created as follow up on appointment. |
Q_IsCancel |
Identifies if a user wants to cancel out of the current flow. It includes words like exit, cancel, I don't want to, Don't create, and so on. |
Q_IsCreate |
Matches keywords such as "create" or "add" from the user query |
Q_OpportunityName |
Captures the name of the opportunity to be searched. |
Q_ServiceRequestTitle |
Captures the service request title. |
Q_TaskSubject |
Captures the task subject. |
Q_TaskDueDate |
Captures a date entity with the preceding phrases such as: due, due on, due date, completed by, and so on. |
Update Sales Records Intent
This intent handles all the flows related to sales update flows. It includes actions such as update opportunity, close opportunity and so on.
Update Sales Records Entities
Here are the Update Sales Records entities:
Entity Name | Description |
---|---|
AccountName |
Captures the organization name and allows the user to search for it. |
CXActivityTypes |
Identifies which activity type the user requests. The activity type includes appointment, task, and call report. |
CXDirectActions |
Identifies the specific action for an object from the user query. For example, identifies such actions as add note, update opportunity, close opportunity. |
CXobjects |
Helps identify which object the user is querying to return the correct queried object data. Objects include opportunity, account, appointment, contact and tasks. |
DATE |
Captures date information. This system entity is used across activities to read date information such as appointment start date, appointment end date, and task due date. |
OpportunityName |
Captures the name of the opportunity to be searched. |
Q_Overdue |
Used to identify if the user searches for overdue tasks based on keywords like "overdue" and "past due. |
Q_UpdateFromStartDate |
Captures the current start date and time of an appointment. |
Q_UpdateToStartDate |
Captures the start date and time to reschedule an appointment. |
Q_UpdateToEndDate |
Captures the end date and time to reschedule an appointment. |
Q_UpdateStartDateString |
Used to identify if the user included strings like "start date" or "start time" in the utterance. |
Q_UpdateEndDateString |
Used to identify if the user included strings like "end date" or "end time" in the utterance. |
Unresolved Intent
Enter the unresolved intent when no other intent can be resolved from user input. A help message is displayed with suggestions for alternative requests to use. There are no entities for this intent.
Cancel Transactions
Use this intent to exit any flow you don't want to continue. You can use words such as "cancel" or "exit". There are no entities for this intent.
Common Custom Components
All of the supported intents can use these common custom components:
Common Component Name | Description | Path |
---|---|---|
CacheRB |
Caches the resource bundle from the skill and keeps it in the custom component to avoid the overhead of retrieving each key separately when it's being used. |
package/components/cache-resource-bundle.js |
FetchRecordsCC |
Identifies whether the flow should be routed toward UpdateDateCC or ProcessPostbackCC according to data entered by the user. This component is called when user requests to get information such as sales briefing, pipeline, accounts, contacts, opportunities and so on. |
package/components/data-fetch-component.js |
FetchRBKeys |
Extracts the keys for strings used in the custom components. The strings are then resolved from the resource bundle using these keys. |
package/components/fetch-resource-bundle-keys.js |
oAuthSecurity |
Determines which mode of authentication to use for the skill based on the configuration. It checks the host for configured authentication service with the name 'IDCS_OAuthForFA'. If the service is found, it uses the configured IDCS service to authenticate the user. If an authentication service isn't found, it checks the da.IsJWTEnabled component. If da.IsJWTEnabled is enabled, it uses HedTokenGenerationServlet to authenticate the user. If da.IsJWTEnabled is disabled and no authentication service is found in the host, it uses a predefined username/password in the custom component to make subsequent REST requests. |
package/components/authentication/authenticate-user.js |
ProcessPostbackCC |
Processes the previous state action and routes to the state of the action the user selects. |
package/components/postback-action-component.js |
ProcessWebviewResponse |
Supports all the WebView components used in the skill. When the actions are completed on the WebView, a callback is received in the skill and is then transitioned to this component to process the response data. |
package/components/webview-component.js |
UnResolvedIntentCC |
Responds with help message for all the utterances that aren't understood by the skill. |
package/components/unresolved-intent-component.js |
UpdateDataCC |
Sets variables with the data extracted from the data entered by the user. Any entities or missing information required for completing a particular action is identified and prompted. |
package/components/data-update-component.js |
ValidateJwtToken |
Checks if the existing JWT Token is valid or not. If it's invalid, the login prompt is displayed. Otherwise, it continues with the execution. |
package/components/authentication/jwt-token-refresh.js |
Sales Assistant Metadata
The sales assistant metadata is split into .json files: the model-configuration.json deals with all the model configurations such as REST attributes, child objects and query handling while the intent-configuration.json contains all the intent configurations. The msteams-intent-configuration.json file contains the Microsoft Teams channel specific intent configurations and the teams-templates.json file handles the styling that needs to be done on the view items. The metadata files are consumed by the framework to construct the response from the custom component to the channel specific adapters. These files are located in package/metadata/.
-
model-configuration.json
This file contains information related to each resource such as its attributes, children and so on. The "Queries" section within the model contains the necessary information to construct a query based on the attributes, query parameters, and finders specified within the query.
-
intent-configuration.json
This file contains information required to construct the response object. The response object is then passed to the channel specified adapters to construct the final response based on the templates for the channel. An intent can contain multiple views from which one or more views can be built based on
NavigationRules
. Here's the basic structure of an intent.{ "IntentId": "GetOpportunities", "Enabled": true, "DisplayLabel": "Opportunities", "NavigationRules": [ ], "Entities": [ ], "QueryGroups": [ ], "Views": [ ] }
The IntentMapping section of the intent-configuration.json contains information required to route to an Intent in the metadata based on the intent and entities resolved by skills. You can switch to different intents in the metadata in two ways:
-
Either directly based on the intent that's resolved by the skill from the utterance, or
-
Based on the values of entities that are resolved
-
-
msteams-intent-configuration.json
This file contains information related to the configuration file for the Microsoft Teams channel. The view from intent-configuration.json is updated with the content present in this file. Users can add, modify and delete configuration in here. It follows the same structure as that of the intent-configuration.json file and resides in the same folder.
-
teams-templates.json
This file is the template for Microsoft Teams. Users can define custom properties on each view item and can manage the styling. Some example include grouping multiple items under sections, using bold for content, controlling the text size and defining punchouts. This file is accessed from package/response/adapter/teams/teams-templates.json
Here's the basic structure of an intent for the Microsoft Teams template file:
"Intents":{ "Sales Briefing": { "Views": { "SalesBriefingView": { "OpportunityTitle": { "customProperties": { } } } } } }
Custom Properties for Microsoft Teams Template Configuration
You can add customProperties to regular fields, header fields, and actions as required to the Microsoft Teams template configuration file.
Feature | Attributes in customProperties | Comments |
---|---|---|
Section |
|
Fields are grouped together under sections |
Text Block |
|
|
Text Size |
|
Default for text size = "D" |
Text Color |
|
Optional |
Text Limit |
|
Optional Maximum number of lines to display. |
Text Style |
|
Optional |
Image |
|
Use to display images |
Header |
|
Can be used in combination with Default style for header is "bold" = "true", "size" = "M" |
Punchout |
|
Contains drill down links Default style for punchout is "bold" = "true", "size" = "L" |
InputDate |
|
Field.type = "DateTime" is automatically considered as "dateinput" field Explicit customProperties.type attribute isn't required The default value is set using user time zone : format YYYY-MM-DD Default - Either Field.defaultValue or value from payload is set. |
InputTime |
|
Field.type = "Time" is automatically considered as "timeinput" field Explicit customProperties.type attribute isn't required The default value is set using user time zone : format YYYY-MM-DD Default - Either Field.defaultValue or value from the payload is set. |
InputText |
|
None |
InputNumber |
|
Default range = 0 : 1000 |
Multiline InputText |
|
|
Column Layout |
|
Uses "Name" value to create column header. The default style for column header is "bold", "size" = "D" (non-updateable). |
LOV drop down |
|
The default value is If Field.Type = "SingleChoiceList" , then it's considered as "dropdown". Default - Either Field.defaultValue or value from the payload is set. |
LOV radio |
|
If Field.Type = "SingleChoiceList" , then requires "type": "radio" in customProperties. Default - Either Field.defaultValue or value from the payload is set. |