32Sales Assistant

This chapter contains the following:

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.

Setup Considerations

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:

  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.

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.

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.

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.