36Sales Assistant

This chapter contains the following:

Oracle Sales Assistant is one of several available skills supported by Oracle Digital Assistant. The Sales Assistant skill is a chatbot designed to help salespeople perform daily tasks. It contains purpose-built, out-of-the-box sales functionality that provides the necessary information, reduces manual data entry, and makes it easier to view and update sales records through text or voice commands. It provides reminders and recommendations that accelerate time to close sales.

Here are the main features of Sales Assistant.

  • Deep Links Support

    Sales Assistant uses the Oracle CX Mobile app to display deep links for the SMS channel. Keep in mind that deep links are available only for certain intents. Deep links aren't available from Android devices for the SMS-only channel. If Microsoft Teams use either the web or a desktop client, then the deep links are to the CX Sales web app.

  • Upload Documents from Microsoft Teams

    Microsoft Teams users can share documents as attachments from the desktop or web with sales application users, if the applications are integrated. Use Sales Assistant to upload an attachment as a URL or as a file attachment to Opportunity and Account records.

  • Oracle DataFox Accounts

    If you have integrated Oracle DataFox with your sales application, then salespeople can view signal alerts, score, and tier details for Oracle DataFox accounts from Sales Assistant.

  • WebView Support

    When salespeople select the action to update an opportunity or close an opportunity, the sales assistant launches a WebView browser to update or close an opportunity. The form provides a specialized user interface to capture data for updates and is only applicable for the SMS channel.

  • Actions and Buttons

    In response to the list of supported Sales Assistant actions, SMS users send an index number. Users of Microsoft Teams respond with a series of clickable buttons.

  • Recall Records in Context

    Sales assistant recalls the context of records within a conversation between salespeople and the sales assistant. However, if they request a sales briefing, of if they haven't interacted with the bot within the previous 24 hours, the context of the conversation is cleared.

  • Search Based on Smart Lists

    If you have Adaptive Search enabled, Sales Assistant users can use smart lists to search the most relevant results based on object activity and context. Account, contact, and opportunity records are supported for user context saved searches based on smart lists.

Setup Considerations

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.

Set Up Sales Assistant

Here's how to access a provisioned digital assistant with the Oracle Sales Assistant skill:

  1. In Oracle Digital Assistant, select the Digital Assistant menu and open FADigitalAssistant.

  2. Click Train to train the skill with the Trainer Tm learning-based model.

  3. Click Channels in the left menu and then choose Users.

  4. 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.

Set Up Signal Alerts

Signals work like a news feed of key milestones of a company. You can get daily updates of significant changes to companies that matter to you. To view signal alerts, score, and tier details for Oracle DataFox accounts from Sales Assistant you must integrate Oracle DataFox with your sales application. Access to such details provides greater visibility to key information so that you can prioritize and target accounts to source more opportunities.

Before you can request details of an account enriched by DataFox, you must:

  • Subscribe to Oracle DataFox

  • Integrate DataFox to CX Sales

  • Enrich the CX Sales accounts either from CX Sales or from DataFox

For more information on how to subscribe and set up Oracle DataFox in Oracle CX Sales see the topic Integrate with Oracle CX Sales in the Using Oracle DataFox guide.

Here's how to set the skill Signal Filters setting in Oracle Digital Assistant under the Custom Parameters section.

  1. In Oracle Digital Assistant, select the Oracle Sales Assistant skill.

  2. Go to Skill > Settings > Configurations.

  3. Search for the Signal Filters setting under the Custom Parameters section.

  4. Set API tag values for the signal types you want to opt out of for the Sales Assistant.

    For example, enter the API tag joint-venture, market-share-growth.

  5. If there are no signal types to remove, then enter NO_FILTER, which is the default.

For a list of Account signal types and associated API tags, see the Using Oracle DataFox guide available on Oracle Help Center.

Set Up Other Integrations

If you have Adaptive Search enabled, Sales Assistant can use smart lists to search the most relevant results based on object activity and context. You can perform user context saved searches based on smart lists for account, contact, and opportunity records. For example, you can request sales Assistant to "View my smart list of opportunities". You can then select a record or further filter the smart list by clicking Search this List.

See the Enable Adaptive Search section of the Adaptive Search and Workspace chapter in the Implementing Sales guide for information.

Recommended Actions for Opportunities

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.

Details of the Intents

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.

Note: Oracle CX Mobile deep links are returned for certain intents, such as when viewing opportunity details for a specific opportunity. Deep links aren't available from Android devices because Android doesn't currently support oscm:// as a link in SMS messages.

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

ADDRESS

Identifies address details from the utterance. It extracts, Country, State, City values from the user query.

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."

Q_SmartList

Determines if the user is asking for smart list.

Q_SRForAccount

Identifies if the user is asking for Service Requests or issues related to an Account.

STOPWORDS

If Workspace is enabled, STOPWORDS other than ADDRESS are removed when a user performs a keyword search. Stop words include definite and indefinite articles, like "the", "a", and "is" and are usually ignored by the chatbot.

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.

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, reschedule appointment, 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_UpdateEndDateString

Used to identify if the user included strings like "end date" or "end time" in the utterance. This entity checks whether the user wants to update only the end date and time without changing the start date and time.

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.

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

"sectionId" : <value>


"Intents":{
    "Sales Briefing": {
      "Views": {
        "SalesBriefingView": {
          "OpportunityTitle": {
            "customProperties": {
              
            }
          }
        }
      }
    }
  }

Fields are grouped together under sections

Text Block

"type": "textblock"

textblock is the default type if "type" not mentioned

Text Size

    "size" : "S"
    "size" : "D"
    "size" : "M"
    "size" : "L"
    "size" : "XL"

Default for text size = "D"

Text Color

    "color" : "r"
    "color" : "g"
    "color" : "b"
    "color" : "y"

Optional

Text Limit

"lines" : <number>

Optional

Maximum number of lines to display.

Text Style

"bold" : "true"
"bold" : "false"

Optional

Image

"type": "imageblock"

Use to display images

Header

"header" : "S"
"header" : "D"
"header" : "M"
"header" : "L"
"header" : "XL"

Can be used in combination with textblock, punchout

Default style for header is "bold" = "true", "size" = "M"

Punchout

"type": "punchout"

Contains drill down links

Default style for punchout is "bold" = "true", "size" = "L"

InputDate

"type": "dateinput"

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

"type": "timeinput"

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

"type": "textinput"

None

InputNumber

"type": "numberinput"
"minInput": <min>
"maxInput": <max>

minInput and maxInput are optional

Default range = 0 : 1000

Multiline InputText

"type": "textinput"
"multiline" : true/false
"placeholder" : "placeholder text"

multiline is optional. placeholder is optional. Default is "".

Column Layout


"layout": "column"
"columnHeaders" : true/false

columnHeader is optional. The default is "false".

Uses "Name" value to create column header.

The default style for column header is "bold", "size" = "D" (non-updateable).

LOV drop down

"type": "dropdown"

The default value is dropdown.

If Field.Type = "SingleChoiceList" , then it's considered as "dropdown".

Default - Either Field.defaultValue or value from the payload is set.

LOV radio

"type": "radio"

If Field.Type = "SingleChoiceList" , then requires "type": "radio" in customProperties.

Default - Either Field.defaultValue or value from the payload is set.