Skip to main content

Uniphore Customer Portal

Working with Entities

This feature allows an Analyst to configure Entities such as Customer Name, Booking Date, Date of Birth, Room Rate, etc., based on the conversation between the Agent and the Customer. These Entities must be linked to the same Entity Type in the Entity Catalog. It helps auto-summarization of the contact in real-time.

For more information on Entity Catalog Controller, click here.

Types of entities

NLP Entity

Complex Entity

AI Entity

Rule Entity

What

Uses trained AI models that leverage keyphrases in the transcript

Retrieves data from external data sources

  • It is customer/industry vertical specific

  • Uses an AI model to extract entities from the transcript

  • Used to add constraints to entities using business rules

  • Uses all types of entities

  • Can be nested

When is it detected

Every turn

Every time on-demand summary is triggered or at end of call

Every turn

Every time on-demand summary is triggered or at end of call

Can be used in Rules?

Yes

Yes

Yes

Yes

Can be used in Contact Summary?

Yes

No

Yes

Yes

Important

NLP Entities and Rule Entities defined with 'Other' Entity Types will be listed on the X-Console Entities page, under the AI Model page, and mapped with the X‑Platform Session Variable.

Quick Navigation

Analyst can navigate to the following modules from the left pane.

Quick_navigation_23_2_1.png

image7.png Applications

Click to create/configure Alerts, ACW Contact Summary and ACW Conversation Disposition

  1. Alerts

  2. After Contact Work

    • Promise Definition

    • Contact summary

    • Conversation Disposition

    • Recently Edited

image8.png Entity Catalog

Click to display the list of entity catalogs with AI entities. The catalog reference list is at the Tenant level. Multiple entity catalog lists at organization/business process level are not allowed. Analysts cannot edit/add entities in the entity catalog reference.

image9.png Business Process

Click to setup a business process for an Organization

image10.png Question Mark

Click to navigate to the Help file.

image11.png Uniphore Logo

Click to navigate to the Home page.

At the bottom of left pane, Analyst can view the version of application.

View Business Process Dashboard

This is a dashboard for the Analyst to view details of configurations of Contact Summary and Conversation Dispositions. Tiles on the dashboard are ordered by how recently each business process was accessed by the user.

The search field allows you to search for Business Process, Entities, Categories. Enter a minimum of 3 characters to start searching for the same.

ACW_dashboard_23_2_1.png

Each tile has the following sections:

  • Promise Definition: It shows the number of promises configured for the Business Process, in Drafted, Submitted and Trained status. The total number of promises for a business process is displayed inside a doughnut chart. If you click the "Train" button next to the Submitted status, the submitted promises for the business process will be trained.

  • Contact Summary: It shows the number of entities configured for the Business Process, in Drafted, Submitted and Trained status. The total number of entities for a business process is displayed inside a doughnut chart. If you click the "Train" button next to the Submitted status, the submitted Entities for the Contact Summary will be trained.

  • Conversation Disposition: It shows the number of submitted Disposition Categories configured for the Business Process. If you click the "Train" button next to the Submitted status, the Categories for the Conversation Disposition will be trained.

  • Recently Edited: It shows the number of summaries, entities (non-Rule type), and dispositions in this Business Process that were edited by agents when they submitted the Contact Summary from within the Agent Console. You can select a date option to filter this number by date.

    • Today - Shows the number of summaries, non-Rule type entities, and dispositions within the business process that were edited in the last 24 hours. By default, this option is selected. 

    • WTD - Shows the number of number of summaries, non-Rule type entities, and dispositions within the business process that were edited from the beginning of the week (Monday 00.00.00 hours) till date.

    • MTD - Shows the number of number of summaries, non-Rule type entities, and dispositions within the business process that were edited from the 1st day of the month till date.

Define NLP Entity

NLP Entities are detected based on a combination of NER (Named Entity Recognition) models and configured key phrases in the transcript. The steps to define entity are listed below:

  1. In the Home page, select Applications > After Contact Work > Contact Summary from the left pane.

  2. In the top of the page, select Organization and Business Process from the drop-down list.

  3. Click Create Entity button to navigate to Define Entity page.

    image38.png
  4. Enter meta data of the intent in the Entity Name field. If you provide invalid characters, an error message will be displayed.

    valid_entity_name_2321.png
  5. Enter the description for meta data of the intent in the Description field.

  6. Select any one of the below data types from the Entity Type drop-down list. If you select the Entity Type as 'Number' mention the number of characters required for this type.        

    For more information on built-in Entity types, click here.

    Refer to the section "Configure entity types" for each entity type configuration with different use cases and examples.

  7. Select an associated entity catalog from the drop-down list to link the entity with the catalog.

  8. Click Next button to navigate to Search from conversation page.

    image39.png
    image40.png

    Note

    If you want to continue working on configuration of Entity at a later point of time, click Save as draft button to save Entity as a draft.

  9. The next step in entity definition is to manually add or import multiple keyphrases to the corresponding entity.

    image41.png
  10. By default, entity name is displayed at the top of the page.

  11. Enter the Keyphrases for the entity. Analyst can import multiple keyphrases at the same time from Excel, a .txt file or clipboard. These keyphrases should be separated by a new line character. If any duplicate keyphrases exist in the source, the keyphrases will not be imported. After importing keyphrases, a confirmation message showing the number of keyphrases successfully imported and number of duplicate keyphrases failed to be imported will be displayed. 

    image42.png

    For copying keyphrases from other Entities, click here.

  12. Double click on the keyphrases to make any changes and hit enter.

    keyphrase_edit_2321.png
  13. Select a speaker channel (Agent or Customer) in the Keyphrase Matching Channel field. 

    • Agent – Configured keyphrase will be detected in Agent Channel.

    • Customer – Configured keyphrase will be detected in Customer Channel.

  14. Select a speaker channel in the Entity Extraction Channel field. 

    • Agent – Entity value will be extracted from Agent Channel.

    • Customer – Entity value will be extracted from Customer Channel.

  15. Select the turn from which you want to extract entity valuesfrom the configured channel. Based on the selection, values are extracted in the turn relative to the turn where the keyphrase was found – preceding, succeeding or the same conversational turn.

    • Same - Entity value will be extracted from same conversation turn as the turn where the keyphrase was detected

    • Next - Entity value will be extracted from the turn succeeding  the turn where the keyphrase was detected

    • Previous - Entity value will be extracted from the turn preceding as the turn where the keyphrase was detected.

    Note

    For the purposes of entity configuration, a turn is a pair of utterances by each channel – agent and customer

    Selection of multiple values in a turn is not allowed.

    Selection of Entity Position (Prefix or Suffix) is allowed only for the turn option - "Same".

  16. Select any of the Entity Positions. By default, both the options are selected

    • Suffix – Entity value will be positioned after the keyphrase.

    • Prefix – Entity value will be positioned before the keyphrase.

    Note

    Selection of Prefix and Suffix is allowed only if the keyphrase matching channel and entity extraction channel are same.

  17. Select any one of the Matching options.

    • Fuzzy – Variants related to the configured keyphrase will be considered for the corresponding entity. It helps to detect the intents of the Agent and Customer on the call automatically with very minimal key phrase configuration by the Analyst.

      For example, if keyphrases “Date of Service” and “Service Date” are configured for Entity, it will automatically consider the keyphrase “Serviced on” from the call.

    • Exact – Accurate configured keyphrases will be considered for the corresponding entity.

      For example, if keyphrase “Date of Birth” is configured for Entity, it will only consider the keyphrase “Date of Birth” from the call.

  18. If you want to continue working on the configuration of Entity at a later point in time, click the Save as Draft button to save Entity as a draft. Otherwise, click the Submit button. The newly created entity will be listed in the Entity page. A confirmation message will be displayed as shown below, after submitting the entity.

    image43.png
  19. Based on the requirements, select any of the below options:

    • Go to Entity List - To navigate to the Entity List page.

    • Create New - To create a new entity.

    • Train Entity - To train the newly created entity.

Configure NLP entity types

Analyst can configure each entity type with different set of configuration parameters including keyphrase matching channel, entity extraction channel, turn from which entity value will be extracted, entity position and match type.

Given below are the NLP entity types described with different use cases and examples how the entity values are extracted based on the entity configuration:

Alphanumeric

Boolean

Number

Date

Date Time Duration

Duration

E-Mail

Float

Free Form

Location

Money

Organization

Percentage

Person

Relationship

String

Time

Website

Confirmation

Alphanumeric Entity

Entities which contain alphanumeric characters, i.e., numbers 0 to 9 and/or characters A to Z.

Example: X33456, M B H J 1106, E 66501, etc.,

Generic use case

  • Transcript: 

    • Agent: Please confirm your account number

    • Customer: Yes sure. It is A  one two four nine seven

  • Entity configuration: 

    • Name: Account Number

    • Entity Position: Both Prefix and Suffix

    • Keyword Matching Channel: Both Agent and Customer

    • Entity Extraction Channel: Customer

    • Configure Keywords: “account number” “account id” etc.,

  • Entity value: A12497

image44.png
Boolean Entity

Entity which returns a Boolean value.

(Affirmation based on the agent or customer’s colloquial response to a question – for example, yes/yup/yeah or no/nope response.)

Healthcare use case

  • Transcript: 

    • Customer: Is my claim approved?

    • Agent: Yeah, your claim is approved.

  • Entity configuration: 

    • Name: Claim Approved

    • Entity Position: Both Prefix and Suffix

    • Keyword Matching Channel: Agent channels are “checked”

    • Entity Extraction Channel: Agent channels are “checked”

    • Configured Keywords: “claim approved” etc.,

  • Entity Value: True

image45.png

Best Practice: More than other entities, this entity is more dependent on the configured keyphrases. So please pay attention to the keyphrases, as we rely on negation words to return True or False, which may not be predictable for other languages.

Number Entity

Entity which contains numerals that do not fall under any other entity type.

Generic use case

  • Transcript: 

    • Agent: Can you please confirm your mobile number?

    • Customer: Yes, it is nine eight seven six five four three two one zero

  • Entity configuration: 

    • Entity Name: Phone Number

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent and Customer channels are “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “phone number” “mobile number”

  • Entity Value: 9876543210

image46.png
Date Entity

Entity which contains any date or date range.

Example: 11/20/2020, 05/20/20 to 05/25/20.

Telecom use case

  • Transcript: 

    • Agent: We have identified that there is probably an issue with your modem. I have scheduled for an appointment to have one of our technicians visit your house and rectify the issue on Friday, the twenty fifth of September at Three pm. Is there anything else that I can assist you with

    • Customer: Nothing else. Thanks

  • Entity configuration: 

    • Entity Name: Appointment Date

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Agent channel is “checked”

    • Key Phrases added are: “appointment” “scheduled”

  • Entity Value: 09/25

image47.png

Best Practices:

Simple relative dates such as today, yesterday, last month, etc., are also covered.

Recommend to customers about training agents in such a way that dates are always spoken by agents in a prescribed structure for good accuracy in model detection.

Date Time Duration Entity

Entity which contains a combination of date, time, and duration, or any three of these Entity types individually. This Entity type helps to extract date, time and event duration values from transcripts using a prescribed structure.

Example: tomorrow | 5:00 p.m, 3/3/2024 , 8/25/ | 4:00 p.m, yesterday | 6:00 p.m

Telecom use case

  • Transcript:

    • Agent: We have identified that there is probably an issue with your modem. I have scheduled for an appointment to have one of our technicians visit your house and rectify the issue on Friday, the twenty fifth of September at three pm. Is there anything else that I can assist you with?

    • Customer: Nothing else. I am good

  • Entity configuration:

    • Entity Name: Appointment Time

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Agent channel is “checked”

    • Key Phrases added are: “appointment”, “scheduled”

  • Entity Value: Friday | 9/25 | 3 p.m

datetimeduration_entity.png

Best Practices:

Recommend to customers about training agents in such a way that date and time are always spoken by agents in a prescribed structure for good accuracy in model detection.

Duration Entity

Entity which contains a duration of time in days, weeks, months or years.

Example: 7 days, 5 business days, 2 to 3 weeks/months/years.

Travel use case

  • Transcript: 

    • Agent: Your check-in date is on the twenty-third of October. And for how many days will you like to have this sea view room booked?

    • Customer: Four days.

  • Entity configuration: 

    • Entity Name: Booking duration

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent and Customer channels are “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “room booked” “room booking” “check in” “number of nights” “number of days”

  • Entity Value: 4 days

image48.png
E-Mail Entity

Entity which defines any email id(s).

BFSI use case

  • Transcript: 

    • Agent: Can I please get your email id?

    • Customer: Yeah sure. It is j for January, o for October, h for Holland n for New York at gmail.com

  • Entity configuration: 

    • Entity Name: Email ID

    • Entity Position: Prefix and Suffix checked

    • Key-Phrase Matching Channels: Agent and Customer channels are “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “mail id” “email” “email ID”

  • Entity Value: john@gmail.com

image49.png

Best Practice: Do not use this entity type unless you absolutely need to. Please contact PM (Product Management) and DS (Data Science) before using.

Float Entity

Entity which contains any floating-point numbers.

Example: 7.8, 45.56, 5 point 6

Retail/Real Estate use case

  • Transcript: 

    • Agent: Can I have your document number?

    • Customer: sure it's forty three point fifty six

  • Entity configuration: 

    • Entity Name: Document Number

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “Can I have your document number” “Document number please” “please share your document number”

  • Entity Value: 43.56

image50.png

Best Practice:

  • Use a float and not number when decimal points are always discussed.

  • Use a float and not money when you have to extract a currency amount, when there is a possibility that the unit may not be discussed in the turn.

Free Form Entity

Entity which returns a string which is either a suffix or a prefix to a configured key word.

Telecom use case

  • Transcript: 

    • Customer: I'm calling because my internet has stopped working since Nine pm last night.

    • Agent: Apologies for the inconvenience ma’am. Let me help you resolve the issue.

  • Entity configuration:

    • Entity Name: Issue

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Customer channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “i'm calling because”, “the issue is”, “my problem is”

  • Entity Value: “internet has stopped working since 9pm last night.”

image51.png

Best Practice: We need to leverage AI intent model instead of Free Form Entity type.

Location Entity

Entity which is a geopolitical entity, i.e. countries, states, cities.

Utilities use case

  • Transcript:

    • Customer: I am calling you because I am shifting from Gujarat to Karnataka and hence, I would like to disconnect my gas connection.

    • Agent: Sure sir. Let me help you with that.

  • Entity configuration: 

    • Entity Name: From Location

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Customer channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “shifting”, “relocating”, “moving”

  • Entity Value: Karnataka

image52.png

Best Practice: There may be many instances of the location, and it is the keyphrases that limit the false positives of a possible location hit. Hence, we need to be careful about the keyphrases configured.

Money Entity

Entity which contains monetary values, including unit. This entity type currently supports US Dollars, Indian Rupees, Korean Von, Australian Dollar, British Pounds, Euros and Japanese Yen.

Healthcare use case

  • Transcript: 

    • Agent: Can you please mention the claim amount for the claim that you have submitted?

    • Customer: It was three thousand four hundred and thirty-two dollars.

  • Entity configuration: 

    • Entity Name: Claim Amount

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “claim amount”

  • Entity Value: 3432

image53.png

Best Practice: If the currency using is not spoken in the context then currency entity is not detected. Summaries should leverage rules where money and number entities are combined for such cases.

Organization Entity

Entity which contains the name(s) of companies, agencies or institutions.

Telecommunication use case

  • Transcript:

    • Customer : I am calling because your competing organization, Reliance Jio, is offering a plan of three nine nine rupees with much better benefits in comparison to the four nine nine plan that I have with you, and I wanted to check if you offer something similar.

    • Agent: Sorry sir, unfortunately we do not have such plans on offer.

  • Entity configuration: 

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent and Customer channels are “checked”

    • Entity Extraction Channel: Agent channel is “checked”

    • Key Phrases added are: “Competing organization”, “Other operator”, “Competing operator”, “Other mobile company”

  •  Entity Value: Reliance Jio

image54.png

Best Practice: Accuracy can be improved when the NER model is trained with more data. Contact Uniphore team when accuracy is found to be low.

Percentage Entity

Entity which contains any values in percentages. Example: 50%, 60 percentage, etc.,

Healthcare use case

  • Transcript: 

    • Customer: I would like to understand details of the copay amount regarding my insurance policy

    • Agent: Sure ma’am, I can help you with that. I see that the copay amount is twenty percent for your insurance policy.

  • Entity configuration:

    • Entity Name: Copay

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent and Customer channels are “checked”

    • Entity Extraction Channel: Agent channel is “checked”

    • Key Phrases added are: “copay” “copay percentage”

  • Entity Value: 20

image55.png
Person Entity

Entities which are names of people, including fictional names.

Generic use case

  • Transcript: 

    • Customer: I am John Martins, and I am calling you about an issue which I raised with you last week.

  • Entity configuration: 

    • Entity Name: Customer Name

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Customer channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “I am” “my name is”

  • Entity Value: John Martins

image56.png

Best Practice: Accuracy can be improved when the NER model is trained with more data. Contact Uniphore team when accuracy is found to be low.

Relationship Entity

Entity which speaks of a relationship.

Example: father, spouse, friend, customer, manager, etc.,

Healthcare use case

  • Transcript:

    • Agent: May I know who is the primary insured member of the insurance policy?

    • Customer: I am the primary member.

    • Agent: And who is this insurance claim for? You or your dependent?

    • Customer: It’s for my son

  • Entity configuration:

    • Entity Name: Dependent

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “insurance claim” “dependent”

  • Entity Value: Son

image57.png
String Entity

Entity which returns a string with a match to configured keywords.

Retail use case

  • Transcript:

    • Agent: Can you please tell me if you are calling me for Televisions or Mobiles or Tablets?

    • Customer: I am calling regarding Tablets.

  • Entity configuration: 

    • Entity Name: Device type

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “Televisions” “Television” “Mobiles” “Mobile” ”Tablets” “Tablet”

  • Entity Value: Tablets

image58.png

Best Practice:

  • Fuzzy match will not work fully

  • Avoid using a lot of string entities. It leads to performance degradation of Summary generation. It is recommended to use AI entities for these use cases.

Confirmation Entity

Entity that contains speaker affirmation based on the key words like yes, yeah, okay, no, I don’t want to, etc.

BFSI use case

  • Transcript: 

    • Agent: Are you interested in this life time free credit card

    • Customer: Nope, I am not interested.

  • Entity configuration:

    • Name: Life-time free card

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent and Customer channels are “checked”

    • Entity Extraction Channel: Customer channel is “checked”

    • Key Phrases added are: “life time free” “credit card”

  • Entity Value: Nope

image60.png

Interesting Fact: This is different from Boolean entity. This purely captures what was confirmed (Yes / No) by the other speaker.

Time Entity

Entity that contains a time reading.

Telecom use case

  • Transcript: 

    • Agent: We have identified that there is probably an issue with your modem. I have scheduled for an appointment to have one of our technicians visit your house and rectify the issue on Friday, the twenty fifth of September at three pm. Is there anything else that I can assist you with?

    • Customer: Nothing else. I am good

  • Entity configuration:

    • Entity Name: Appointment Time

    • Entity Position: Prefix and Suffix “checked”

    • Key-Phrase Matching Channels: Agent channel is “checked”

    • Entity Extraction Channel: Agent channel is “checked”

    • Key Phrases added are: “appointment”, “scheduled”

  • Entity Value: 3pm

image59.png

Best Practice:

It is recommended to customers about training agents in such a way that dates and times are always spoken by agents in a prescribed structure for good accuracy in model detection.

Website Entity

Entity which contains a website or web address. This Entity type helps to extract website domain names from transcripts using a basic website pattern.

Example: google.com, wikipedia.org, www.google.com, www.facebook.com

Generic use case

  • Transcript:

    • Customer: Hi, I want to know if you have any special promotions on your website right now.

    • Agent: Sure! We currently have a promotion for 20% off on all items if you order through our website.

    • Customer: How do I apply the discount?

    • Agent: You can use the promo code "SAVE20" at checkout. Just visit our website at www.abcproducts.com to place your order.

  • Entity configuration:

    • Name: Website

    • Entity Position: Both Prefix and Suffix

    • Keyword Matching Channel: Both Agent and Customer

    • Entity Extraction Channel: Customer

    • Configure Keywords: “website” “web address” etc.,

  • Entity Value: www.abcproducts.com

website_entity_type.png
Copy Keyphrases from other Entities

Analyst can search for key phrases from other Entities and copy them to the current entity. 

  1. Click Copy Phrases from other Entities link.

    image61.png
  2. In the Search field, enter 3 characters to search for a keyphrase.

  3. Select the keyphrase from the list. The selected keyphrase will be listed at the bottom of the pop-up window. 

    image62.png
  4. Click Copy Input Keyphrases button to copy the keyphrases from other entities and display in the Keyphrase section.  

Complex Entity

Complex entities use REST APIs to retrieve data from various data sources like external CRM systems, other databases, and external APIs.

  • These entities are excluded in training the NLP models

  • These entities are excluded from the summary template and used only in rules

image63.png

In complex entities, we can also pass AI entities in addition to NLP entities for sending as rest API arguments to external systems.

While exporting complex entities and rule entities including nested AI entities, the application provides a warning message indicating that AI entities have to be imported first in the target environment for a successful import.

The steps to define complex entity are listed below:

  1. Select Organization from the drop-down list.

  2. Select Business Process from the drop-down list.

  3. Enter meta data of the intent in the Entity Name field.

  4. Enter the description for meta data of the intent in the Description field.

  5. Select Entity Type as 'Complex' from the drop-down list. 

    image64.png
  6. Click Next button to navigate to Map API screen.

    image65.png

Complex Entity - Map API

  1. On the left hand side, mention a valid URL in the Endpoint field. The URL should start with "http" or "https".

    Note

    Only the GET method is used in this configuration. Path variables are not supported.

  2. Select a Context Response Type - JSON, CSV or Text.

  3. On the right hand side, you are required to configure the request.

    • Type in a Request Key as a request parameter in the Request Key field.

    • Select the name of an entity or a metadata parameter from the "Entity / Metadata Name"drop-down field.

    • For every new request parameter, click the "Add New" button to add a row.

  4. After configuration, click either "Save as Draft" or "Submit". You can also go back to the previous screen using "Previous" or discard the entity using the "Discard" button.

    image65.png

Validations

Before you configure a Complex entity, the following checks need to be performed on the client-side as well as the server-side.

  • Entity name should be unique

  • Endpoint should be a valid URL and should start with "http" or "https"

  • There should be one or more GET method query parameters, and each name should be the unique and valid without any spaces and special characters.

Examples

GET Method

Request

Name

Description

Endpoint

Endpoint URL http://<host>:<port>/<path>

Content-Type

application/json

Query Parameters

One or more parameters id=1025&param2=value2

curl -H 'Content-Type: application/json' --request GET 'http://<host>:<port>/member-info?id=1025&param2=value2'

Response

Content Type

HTTP Status

Response Body

application/json

200

{  "result": {    "attr1": "value-1",    "attr2": "value-2",    "attr3": "value-3"  }}

3xx, 4xx, 5xx codes

{  "errors": [    {      "code": 1001,      "message": "Member not found"    },    {      "code": 1002,      "message": "Member id is invalid"    }  ]}

There can be one or more error codes depending on the specific implementation of API.

Rules Configuration

The complex entities can be referenced in rules configuration. The following is the syntax used to refer the complex entities.

Syntax

Description

$.complex('entity-name', 'json-path/column-name')

Reads a given column/attribute/path from the connector response.

$.complex('entity-name', 'json-path/column-name', 'index-type')

Reads given column/attribute/path with index type (all, first or last) from the connector response. If the given column/attribute/path not found returns empty. Allowed index types are:

  • all

  • first

  • last

The rule engine has also been enhanced to invoke and consume the response from a complex entity response, based on the content type:

  • JSON (application/json) - Extract the desired attributes

  • CSV (text/csv) - Extract the desired columns

  • Text (text/plain) - Entire data

Define Rule Entity

A "Rule" entity type allows a Business Analyst to create an entity based on the output of a rule engine. A rule is a set of conditions applied on NLP entities, AI entities, Complex entities or other Rule entities. When the condition is satisfied, then the configured output is calculated as the output of the rule entity. This evaluated rule entity value is used in the contact summary. The rule entities are used for the following use cases:

  • Summary template based on conditions

  • Synthesize entity value based on conditions

  • Call resolution based on conditions 

  • Prioritize entities

  • If two or more entities have to be sorted in any manner in order to extract one value

  • Usage of Negative phrases

  • Tokenizing native entities

Best practice:

Before each rule is created, we need to think twice if it is absolutely required. Accuracy improvement and tuning is much easier and cleaner when entities defined independently are used in summaries.

Following are the steps to define a rule entity:

  1. Select Organization from the drop-down list.

  2. Select Business Process from the drop-down list.

  3. In the Entity Name field, mention the name of entity.

  4. In the Entity Description field, mention the entity description.

  5. In the Default text field, mention the default value to be shown in the summary if the entity does not trigger any values.

  6. From the Entity Type drop-down, select the entity type as "Rule".

    Rule_entity_type.png
  7. To enable Entity Sub Type drop-down, map an Experience to this Business Process in X-Console. For mapping of Experience to the Business Process, click here.

    If the mapping is not done, the rule is automatically categorized as “Other” type. This drop-down is only available for Rule entity type.

    Note

    • The rules which are already existing in the system are automatically assigned to the rule type “Other” after upgrading U-Assist application to the version 23.4.1.

    • Any previous version's JSON file containing the rule entities can be successfully imported into this version 23.4.1 with the rule type 'Other'.

  8. After mapping the experience to the Business Process, the Business Analyst has an option to select any one of the below rule types from the Entity Sub Type drop-down list:

    Entity_sub_type_selection_new.png
    • Call reason - Enables Analyst to define a rule with the 'Call reason' type. After syncing the U-Assist account with the AI Model, the rule categorized as "Call reason" is displayed on the X‑Console Intents list. If the rule is triggered, the name of the rule is displayed as the intent name on the X‑Console Agent Application. For more details on defining the call reason rule, click here.

      • The rule written with complex entities must have the Sub Type 'Other'. Complex entities are not processed (as conditions or outputs) in rules with Sub Type 'Call reason'.

      • Any rule nested with complex rule must have the Sub Type 'Other'.

      Important

      • In the X‑Console's Intents page, only the rule-based intents 'Call reason' that are in the trained status are listed.

      • In X-Console, a Flow Admin can define the call summary template to be displayed in real time to an agent during a call for the rule-based intent and also assign a flow which is to be triggered when this Intent is identified by U-Assist.

        For more details on creating an intent summary template, click here.

      Note

      The rule-based intents 'Call reason' are not displayed in the Intents page of the Experience.

    • Other - Enables Analyst to configure the rule in any way. However, this type of rule does not appear in the Intents list on X‑Console.

  9. Click Next to navigate to the Search from Conversation page.

  10. The default entity name is displayed at the top of the page. Mention input parameters in JSON format in Rule Definition section. Every rule can have multiple rule components. Each component can be defined as a rule.

    Rule_definition_JSON.PNG

    Call reason rule definition

    If a "Call reason" rule has different output values in different components, the intent name on X‑Console is always be the overall rule name (i.e., a single rule can not provide multiple intents). For each intent that needs to be detected, the Business Analyst must write a separate rule.

    For example, in the below given rule, the name of the rule intent is displayed as "Customer request" on X‑Console:

    {
          "type": "Call-reason",
          "id": 0,
          "ruleName": "Customer request",
          "skipOnFirstRuleApplied": false,
          "skipOnFirstNonTriggeredRule": false,
          "priorityThreshold": 100,
          "delimeter": ",",
          "components": [
            {
              "name": "Canceled Line or Account",
              "description": "Canceled Line or Account - Customer Request",
              "priority": 1,
              "condition": "$.entity('cancel_line').isTrue()",
              "actions": [
                "$.output='Canceled Line'"
              ]
            },
            {
              "name": "Account Number Provided",
              "description": "Account Number Provided",
              "priority": 2,
              "condition": "$.entity('acct_number').isTrue()",
              "actions": [
                "$.output='Account Number Provided'"
              ]
            },
            {
              "name": "Device - IMEI/SIM Updated",
              "description": "Device - IMEI/SIM Updated",
              "priority": 3,
              "condition": "$.entity('sim_updated').isTrue()",
              "actions": [
                "$.output='Device - IMEI/SIM Updated'"
              ]
            },
            {
              "name": "Restore from Suspend - Customer Request",
              "description": "Restore from Suspend - Customer Request",
              "priority": 5,
              "condition": "$.entity('restore_from_suspend').isTrue()",
              "actions": [
                "$.output= 'Restore from Suspend - Customer Request'"
              ]
            },
            
          ]
        },
        "apiConfig": null,
        "nestedEntities": [
          "cancel_line",
          "acct_number",
          "sim_updated",
          "restore_from_suspend",
          
        ]
      }
  11. Click Validate to validate the rules.

    {
     "delimeter": ",",
     "priorityThreshold": 10,
     "skipOnFirstNonTriggeredRule": true,
     "skipOnFirstRuleApplied": true,
     "components": [{
     "actions": [
     "$.output=$.valueOf('<entity name>')"
     ],
     "condition": "$.entity('<entity name>').isTrue()",
     "description": "Enter description here",
     "name": "Enter name here",
     "priority": 1
     }
     ],
     "type": "Call-reason"
     } 
  12. After validating the rules, click Submit. The newly created entity is listed in the Entity page. A confirmation message is displayed as shown below, after submitting the entity.

    rule_entity_submit_message.PNG
  13. Based on the requirements, select any of the below options:

    • Go to Entity List - To navigate to the Entity List page.

    • Create New - To create a new entity.

    • Train Entity - To train the newly created entity.

Structure of JSON Rule

image68.png

Parameters

Parameter Values

Data Types

delimeter

Symbol used as a boundary between multiple rule conditions output. It is used to concatenate multiple component outputs.

String

priorityThreshold

Positive integer. Stop evaluation of the rules, if rule priority exceeds the defined threshold.

Integer

skipOnFirstNonTriggeredRule

When any rule component evaluates to false, skip evaluation of rest of the components

Boolean  (True / False)

skipOnFirstAppliedRule

When any one of the components is evaluated to true, then skip evaluation of further rule components

Boolean (True)

components

Part of a rule which includes a condition and an output. Sample JSON.

[{             "actions": [                 "$.output=$.valueOf(' ')"             ],             "condition": "$.entity(' ').isTrue()",             "description": "Enter description here",             "name": "Enter name here",             "priority": 1         }     ] }

JSON array of objects

actions

A set of actions to be performed when the conditions are satisfied.

String

condition

A set of conditions to be applied for a rule. Rule condition must result either in True or False.

String

description

Description of rule component.

String

name

Name of the rule component. It must be unique for each rule component.

String

priority

Rule component priority. It must start from 1. For each rule component, priority is increased by one.

Integer

type

Type of rules.

String

Best practices:

  • Skip rule computation wherever possible using skiponfirstruleapplied and skiponfirstruletriggered

  • Use rules only where necessary. Avoid large number of components

  • After import from another environment, ensure to re-train all entities.

Refer to the page "Create rules with different conditions" for rule input.

Rules can also be written using AI entities in addition to rules on NLP and complex entities which were earlier supported. A subset of the functions supported for NLP entities can also be supported for AI entities.

Refer to the page "Rule Configuration for AI entities" for configuration of different conditions and outputs.

Create rules with different conditions

Analyst can define set of conditions and corresponding actions. The evaluated end result of the rule can then be used to publish the Contact Summary.

Given below are some examples of conditions and their corresponding rule inputs:

String Search
  • Rule with 'containsAnyKeyPhrases' and logical operator 'AND'

The given rule condition evaluates to true, when any of the input key phrases is detected in the turn(s) where the entity/entities was/were detected and the applied conditions are satisfied.

{
      "skipOnFirstRuleApplied": true,
        "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
       "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAnyKeyPhrases('How may I help you', 'This problem is still not resolved').isTrue() && $.entity('Customer Name').isTrue()",
            "actions": [
                "$.output=$.value()"
            ]
        }
    ]
}
  • Rule with 'containsAllKeyPhrases'

The given rule condition evaluates to true, when all the input key phrases are detected in the turn transcript.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAllKeyPhrases('How may I help you', 'This problem is still not resolved', 'didn't get a message').isTrue()",
            "actions": [
                "$.output=$.value()"
            ]
        }
    ]
}
  • Rule with 'containsAllKeyPhrases' and 'minOccurs'

This rule condition evaluates to true, when all the input key phrases are detected in the turn transcript and the number of occurrences of these key phrases is greater than or equal to the minimum occurrence value.

In the below example, both the key phrases 'How May I help you', 'I have an issue' should have at least 3 occurrences in the turn transcripts from the NLP output.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAllKeyPhrases('How may I help you', ‘I have an issue').minOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAnyKeyPhrases' and 'minOccurs'

This rule condition evaluates to true, when any of the input key phrases are detected in the turn transcript and the number of occurrences of these key phrases are greater than or equal to the minimum occurrence value.

In the below example, any of the key phrases 'How May I help you', 'I have an issue' should have at least 3 occurrences in the turn transcripts from the NLP output.
{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAnyKeyPhrases('How may I help you', 'I have an issue').minOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAllKeyPhrases' and 'maxOccurs'

This rule condition evaluates to true, when all the input key phrases are detected in the turn transcript and the number of occurrences of these key phrases are lesser than or equal to the maximum occurrence value.

In the below example, both the key phrases 'How May I help you', 'I have an issue' should have at most 3 occurrences in the turn transcripts from the NLP output.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAllKeyPhrases('How may I help you', 'I have an issue').maxOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAnyKeyPhrases' and 'maxOccurs'

This rule condition evaluates to true, when any of the input key phrases are detected in the turn transcript and the number of occurrences of these key phrases are lesser than or equal to the maximum occurrence value.

In the below example, any of the key phrases ‘How May I help you', 'I have an issue' should have at most 3 occurrences in the turn transcripts from the NLP output.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAnyKeyPhrases('How may I help you', 'I have an issue').maxOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
String Search - Regex
  • Rule with containsAllRegexKeyPhrases and max occurs

This rule condition evaluates to true, when all the input key phrases are detected in the turn transcript and the number of occurrences of these key phrases are lesser than or equal to the maximum occurrence value.

In the below example, both the key phrases 'How May I help you', 'I have an issue' should have at most 3 occurrences in the turn transcripts from the NLP output.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue'). containsAllRegexKeyPhrases('How may I help you', 'I have an issue').maxOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAnyRegexKeyPhrases' and 'maxOccurs'

This rule condition evaluates to true, when any of the input key phrases are detected in the turn transcript and the number of occurrences of these key phrases are lesser than or equal to the maximum occurrence value.

In the below example, any of the key phrases 'How May I help you', 'I have an issue' should have at most 3 occurrences in the turn transcripts from the NLP output.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue'). containsAnyRegexKeyPhrases('How may I help you', 'I have an issue').maxOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAllRegexKeyPhrases' and each 'maxOccurs'

This rule condition evaluates to true, when all the input key phrases are detected in the turn transcript and the number of occurrences of each of the key phrases is lesser than or equal to the maximum occurrence value.

In the below example, both the keyphrases 'How May I help you', 'I have an issue' should be detected in the turn transcript and each keyphrase occurrence count should be at most 3.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue'). containsAllRegexKeyPhrases('How may I help you', 'I have an issue').eachMaxOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAnyRegexKeyPhrases' and 'each max occurs'

This rule condition evaluates to true, when any of the input key phrases are detected in the turn transcript and the number of occurrences of detected key phrases is lesser than or equal to the maximum occurrence value.

In the below example, any of the keyphrases 'How May I.*', 'I have.*' should be detected in the turn transcript and detected keyphrase occurrence count should be at most 3.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue'). containsAnyRegexKeyPhrases('How may.*', 'I have.*').eachMaxOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAllRegexKeyPhrases' and 'each minOccurs'

This rule condition evaluates to true, when all the input key phrases are detected in the turn transcript and the number of occurrences of each of the key phrases is greater than or equal to the minimum occurrence value.

In the below example, all the keyphrases 'How May I.*', 'I have.*' should be detected in the turn transcript and each keyphrase occurrence count should be at least 3.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue'). containsAllRegexKeyPhrases('How may I.*', 'I have.*').eachMinOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}
  • Rule with 'containsAnyRegexKeyPhrases' and 'each min occurs'

This rule condition evaluates to true, when any of the input key phrases are detected in the turn transcript and the number of occurrences of detected key phrases is greater than or equal to the minimum occurrence value.

In the below example, any of the keyphrases 'How May I.*', 'I have.*' should be detected in the turn transcript and detected keyphrase occurrence count should be at least 3.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue'). containsAnyRegexKeyPhrases('How may.*', 'I have.*').eachMinOccurs(3).isTrue()",
            "actions": [
                "$.output=$.firstValue()"
            ]
        }
    ]
}

Best Practice:

Regex functions are useful to handle multiple patterns in keywords.

Rules with different conditions
  • Rule with 'value' and 'contains'

Value can be used along with containsAllKeyPhrases, containsAnyKeyPhrases, minOccurs, maxOccurs, eachMinOccurs, eachMaxOccurs. It collects all the values of entity / entities used in the matched conditions. Values are separated by comma.

Contains will validate if the input is present in the extracted entities of the matched conditions.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAllKeyPhrases('How may I help you').value().contains('I have lost my card')",
            "actions": [
                "$.output=$.value()"
            ]
        }
    ]
}
  • Rule with value and matches

Matches can have regex condition as an input.

{
    "skipOnFirstRuleApplied": true,
    "skipOnFirstNonTriggeredRule": false,
    "priorityThreshold": 10,
    "delimeter": ",",
    "components": [{
            "name": "Complaint",
            "description": "bill payment issue",
            "priority": 1,
            "condition": "$.entity('Customer Issue').containsAllKeyPhrases('How may I help you').value().matches('I have.*')",
            "actions": [
                "$.output=$.value()"
            ]
        }
    ]
}
  • Rule with special ‘validate’ function for date entities

The date entity has a special validate function to check if the format and values of the date detected in the NLP layer is valid or not. i.e. if date is more than 31 or month more than 12 we have an issue.

image69.png

Best Practice: Leverage special functions like Date Validate function

  • Output value of Entity in Title Case

If the first name and last name detected have to be presented in title case, of capital letter in the summary, such functions can be leveragedimage70.png

  • Rule with Case insensitive match against a string literal

If the entity value needs to be checked against a string literal without being worried about the case then equalsIgnoreCase which is one among the several possible string functions that can be usedimage71.png

Terminology Check-in

Contributed word: The key phrase that was used to detect the entity from the transcript. This is one of the key phrases that was used to configure the entity.

Phrase: Any one of the key phrases that are being used in the Rule

Entity value: The value of the extracted entity

Distance: Number of words separating two values in a turn

Best Practice:

Using Proximity functions as an alternate to capturing variations of Key phrases should be avoided

It drastically increases rule complexities and becomes very difficult to tune, manage and improve accuracy

Proximity Check: Contributed Word & Phrase
  • Rule with contributedWordAfterPhrase('distance','<Key-phrase>')

This rule condition evaluates to true, when the input key phrase is detected after the contributed word and within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').contributedWordAfterPhrase('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with contributedWordAfterPhrase('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').contributedWordAfterPhrase('-1','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with contributedWordBeforePhrase('distance','<Key-phrase>')

This rule condition evaluates to true, when the input key phrase is detected before the contributed word and within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').contributedWordBeforePhrase('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with contributedWordBeforePhrase('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').contributedWordBeforePhrase('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
Proximity Check: Phrase & Entity Value
  • Rule with phraseAfterEntityValue('distance','<Key-phrase>')

This rule condition evaluates to true, when the input key phrase is detected after the entity value and within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').phraseAfterEntityValue('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with phraseAfterEntityValue('distance','<Key-phrase>'); If the distance is not required then give -1

This rule condition evaluates to true, when the input key phrase is detected after the entity value and within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').phraseAfterEntityValue('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with phraseBeforeEntityValue('distance','<Key-phrase>')

This rule condition evaluates to true, when the output key phrase is detected before entity value and within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').phraseBeforeEntityValue('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with phraseBeforeEntityValue('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').phraseBeforeEntityValue('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
Proximity Check: Phrase, Contributed Word & Entity Value
  • Rule with phraseBetweenContributedWordAndEntityValue('<Key-phrase>')

This rule condition evaluates to true, when the output key phrase is detected between the contributed word and the entity value.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit'). phraseBetweenContributedWordAndEntityValue('limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with phraseBetweenEntityValueAndContributedWord('<Key-phrase>')

This rule condition evaluates to true, when the output key phrase is detected between the entity value and contributed word.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').phraseBetweenEntityValueAndContributedWord('limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
Proximity Check: Entity Value & Contributed Word
  • Rule with contributedWordAndEntityValueRange(distance)

This rule condition evaluates to true, when the output entity value is detected after contributed word within a specific distance as passed in the condition. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Plan Paid Amount').contributedWordAndEntityValueRange(1).isTrue()",
      "actions": [
        "$.output=$.value()"
      ]
    } 
  ]
}
  • Rule with entityValueAndContributedWordRange(distance)

This rule condition evaluates to true, when the output contributed word is detected after entity value within a specific distance as passed in the condition. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Plan Paid Amount').entityValueAndContributedWordRange(2).isTrue()",
      "actions": [
        "$.output=$.value()"
      ]
    } 
  ]
}
Proximity Check: Negative phrases
  • Rule with neContributedWordAfterPhrase('distance','<Key-phrase>')

This rule condition evaluates to true, when the input key phrase is not detected after the contributed word and not within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').neContributedWordAfterPhrase('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with neContributedWordAfterPhrase('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').neContributedWordAfterPhrase('-1','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with nePhraseAfterEntityValue('distance','<Key-phrase>')

This rule condition evaluates to true, when the input key phrase is not detected after the entity value and not within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').nePhraseAfterEntityValue('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with nePhraseAfterEntityValue('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').nePhraseAfterEntityValue('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with neContributedWordBeforePhrase('distance','<Key-phrase>')

This rule condition evaluates to true, when the input key phrase is not detected before the contributed word and not within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').neContributedWordBeforePhrase('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with neContributedWordBeforePhrase('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').neContributedWordBeforePhrase('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with nePhraseBeforeEntityValue('distance','<Key-phrase>')

This rule condition evaluates to true, when the output key phrase is not detected before entity value and not within the given distance. Distance denotes number of words.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').phraseBeforeEntityValue('3','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with nePhraseBeforeEntityValue('distance','<Key-phrase>'); If the distance is not required then give -1

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').nePhraseBeforeEntityValue('-1 ','limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with nePhraseBetweenContributedWordAndEntityValue('<Key-phrase>')

This rule condition evaluates to true, when the output key phrase is detected between the contributed word and the entity value.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit'). nePhraseBetweenContributedWordAndEntityValue('limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}
  • Rule with nephraseBetweenEntityValueAndContributedWord('<Key-phrase>')

This rule condition evaluates to true, when the output key phrase is detected between the entity value and contributed word.

{
    "skipOnFirstRuleApplied": true,
  "skipOnFirstNonTriggeredRule": false,
  "priorityThreshold": 10,
  "delimeter": ",",
    "components": [
   {
      "name": "Rule0 and Rule1",
      "description": "string",
      "priority": 1,
      "condition": "$.entity('Max Visit Limit').nePhraseBetweenEntityValueAndContributedWord('limit per person','per calendar year','max limit per person','maximum limit per person','max per calendar year','maximum per calendar year','limit','per').isTrue()",
      "actions": [
        "$.output='Max visit limit is ' + $.value()"
      ]
    } 
  ]
}

Best Practice: Use cases leveraging Java String manipulation functions. Documentation of all the available java string functions can be found in the following location: https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Configure rules with keyphrases

Given below is a summary of the various conditions that can be used in rule configuration.

Keyphrase Parameter Conditions

Input Value

Condition = True

containsAllKeyPhrases 

One or many key phrases. Multiple keyphrases are separated by comma.

All the provided key phrases are detected in the turn transcript

containsAnyKeyPhrases 

One or many key phrases. Multiple keyphrases are separated by comma. 

Any of the provided key phrases are detected in the turn transcript

containsRegexKeyPhrases

One or many key phrases

All the provided regex patterns are detected in the turn transcript

containsAnyRegexKeyPhrases

One or many key phrases

Any of the provided regex patterns are detected in the turn transcript

minOccurs

Minimum number of occurrences of keywords

Number of occurrences of key phrases must be greater than or equal to the minimum occurrence value.

maxOccurs

Maximum number of occurrences of keyword

Number of occurrences of key phrases must be lesser than or equal to the maximum occurrence value.

eachMinOccurs

Minimum number of occurrences of each keyword

Number of occurrences of each key phrase must be greater than or equal to each min occurrence value

eachMaxOccurs

Maximum number of occurrences of each keyword

Number of occurrences of each key phrase must be lesser than or equal to each max occurrence value

isTrue ()

It can be used with any of the above conditions to provide the results

Configured rule conditions output

contributedWordAfterPhrase('distance','<Key-phrase>')

Given keyphrase and then contributed words

Input key phrase is detected after the contributed word and within the given distance. Distance denotes number of words.

phraseAfterEntityValue('distance','<Key-phrase>')

Entity value and then given keyphrase

Input key phrase is detected after the entity value and within the given distance. Distance

denotes number of words.

contributedWordBeforePhrase('distance','<Key-phrase>')

Contributed words  and then given keyphrase

Input key phrase is detected before the contributed word and within the given distance.

Distance denotes number of words.

phraseBeforeEntityValue('distance','<Key-phrase>')

Given phrase and then entity value

Output key phrase is detected before entity value and within the given distance. Distance

denotes number of words.

phraseBetweenContributedWordAndEntityValue('<Key-phrase>')

Given phrase between contributed word and entity value

Output key phrase is detected between the contributed word and the entity value.

phraseBetweenEntityValueAndContributedWord('<Key-phrase>')

Given phrase between entity value and contributed word

Output key phrase is detected between 

the entity value and

the contributed word.

contributedWordAndEntityValueRange('distance')

Distance between contributed word and entity value

Output entity value is detected after contributed word within a specific distance as passed in the condition. Distance denotes number of words

entityValueAndContributedWordRange('distance')

Distance between entity value and contributed word

Output contributed word is detected after entity value within a specific distance as passed in the condition. Distance denotes number of words.

neContributedWordAfterPhrase('distance','<Key-phrase>')

The given key phrase should not be placed before contributed word

Input key phrase is not detected after the contributed word and not within the given distance. Distance denotes number of words.

nePhraseAfterEntityValue('distance','<Key-phrase>')

The given entity value should not be placed before contributed word

Input key phrase is not detected after the entity value and not within the given distance. Distance denotes number of words.

neContributedWordBeforePhrase(distance,'<Key-phrase>')

The contributed words should not be placed before the keyphrase

Input key phrase is not detected before the contributed word and not within the given distance. Distance denotes number of words.

nePhraseBeforeEntityValue('distance','<Key-phrase>')

The given key phrase should not be placed before entity value

Output key phrase is not detected before entity value and not within the given distance. Distance denotes number of words.

nePhraseBetweenContributedWordAndEntityValue('<Key-phrase>')

The given key phrase should not be between contributed word and entity value

Output key phrase is detected between the contributed word and the entity value.

nePhraseBetweenEntityValueAndContributedWord('<Key-phrase>')

The given key phrase should not be between entity value and contributed word

Output key phrase is detected between the entity value and contributed word.

Note

If the distance is not required for evaluation then give -1.

Rule output

Analyst can define the value to be shown in contact summary section in 'action' parameter, if more than one value is detected for entity / entities in the conversation. For example, if more than one date is detected for an entity "Date of Service", the date which is to be shown in the contact summary will be configured in the "action" parameter.

The following table shows the various output actions that can be configured in rules.

Actions

Input

Output

firstValue

N/A

Collect the first value of entity / entities used in the condition. Values are separated by comma.

lastValue

N/A

Collect the last value of entity / entities used in the condition. Values are separated by comma.

firstValueOf

one or more entities

Collect the first value of entity / entities extracted, when the applied conditions are satisfied. Values are separated by comma.

lastValueOf

one or more entities 

Collect the last value of entity / entities extracted, when the applied conditions are satisfied. Values are separated by comma.

value

 N/A

Collect all the values of entity / entities used in the condition. Values are separated by comma.

valueOf

one or more entities 

Collect all the values of entity / entities extracted, when the applied conditions are satisfied. Values are separated by comma.

Rule output ordering configuration

Rule output ordering is a feature that allows the analyst to sort the output (entities) of Rules based on the chronological order of the turns in the conversation, which provides a more intuitive summary and better user experience to the agent.

Actions

Input

Output

$.value().orderByTimeAsc()

More than one entity

Collect all the values of entities used in the condition.

Sort the entities extracted from multiple turns in ascending order.

$.value().orderByTimeDesc()

More than one entity

Collect all the values of entities used in the condition.

Sort the entities extracted from multiple turns in descending order.

Rule Output Ordering is applicable for all output methods like firstValue, lastValue, value, valueOf, lastValueOf, fistValueOf.

Example for Rule output ordering:

Conversation between customer and an agent

Agent: Hello, I am Michael. How can I help you?

Customer: Hi Michael, my name is Sarah.  I am calling to find out about my claim benefit.

Agent: Sure, I can help you.

Action

Keywords with Turn IDs

Output

$.value().orderByTimeAsc()

Michael (1, 2)

Sarah (2)

Michael, Sarah

$.value().orderByTimeDesc()

Michael (1, 2)

Sarah (2)

Sarah, Mic

hael

Refer to the page "Create rules with different conditions" for details of Rule input.

Rule output with split configuration

Rule output with split configuration allows analyst to split the output (entities) of rules in two ways that help an agent to capture a specific portion of the customer conversation.

  1. Split the rule output with respect to start index and end index values.

  2. Split the rule output with respect to regex pattern provided in the output.

Actions

Input

Output

$.valueOf('entity name').split(int startIndex, int endIndex)

Entity name and start index and end index values at which position the split will occur

Collect the values of entity used in the condition.

Split the entity values extracted from the call.

$.valueOf('entity name').split(string regexpattern)

Entity name and regexpattern

Collect the values of entity used in the condition.

Extract the pattern provided in the rule output

Rule output with split configuration is applicable for all output methods like firstValue, lastValue, value, valueOf, lastValueOf, fistValueOf.

Example for split rule output with respect to start index and end index values:

Conversation between customer and an agent

Agent: Thanks for calling XXX, let me know what is your query?

Customer: I have called to cancel my room booking.

Agent: Sure, I can help you. Can I have your phone number?

Customer: 1234567890

Let us suppose we want to extract the last 4 digits of the pone number. This can be accomplished as follows:

Action

Entity values

Output

$.valueOf('phonenumber').split(7,10)

1234567890

7890

Example for split rule output with respect to regex pattern:

Agent: Hello, I am Michael. How can I help you?

Customer: Hi Michael, my name is Sarah. I am calling to find out about my claim benefit.

Agent: Sure, I can help you. Can I have your claim ID?

Customer: ABCD6789XYZ

Let us suppose we want to extract the starting numeric value of claim ID. This can be accomplished as follows:

Action

Entity values

Output

$.valueOf('claimid').split('\\d+')

ABCD6789XYZ

6789

In this example, the regular expression '\\d+' extracts numeric characters from the given input.

Refer to the page "Create rules with different conditions" for details of Rule input.

Rule Output with Uppercase Configuration

The Analyst can configure Rule output (i.e., Entities) to be displayed with uppercase letters, based on a customer's requirements. The Agent will see the extracted Entity values in any of the following ways:

  • FIRST_OF_EACH_WORD (foew) - Capitalizes the first letter of each word in the extracted Entity value.

  • FIRST_WORD_OF_VALUE (first) - Capitalizes the first letter of the first word only in the extracted Entity value

  • all - Capitalizes all letters of the extracted Entity value

Actions

Input

Output

$.valueOf('entityname').capitalizedText('foew')

Entity name and the style in which text should be capitalized.

Collect the Entity value used in the condition, and capitalize the first letter of each word.

$.valueOf('entityname').capitalizedText('first')

Entity name and the style in which text should be capitalized.

Collect the Entity value used in the condition, and capitalize the first letter of the first word only.

$.valueOf('entityname').capitalizedText('all')

Entity name and the style in which text should be capitalized.

Collect the Entity value used in the condition, and capitalize all letters.

Rule output with uppercase configuration is only applicable for output method valueOf.

Examples:

Action

Entity Value

Output

$.valueOf('Disp_resellername').capitalizedText('foew')

american home shield

American Home Shield

$.valueOf('Disp_resellername').capitalizedText('first')

american home shield

American home shield

$.valueOf('Disp_resellername').capitalizedText('all')

american home shield

AMERICAN HOME SHIELD

Configure rules with conversation disposition

Business Analyst can now create rules by passing conversation disposition values as inputs to the rule engine. Earlier, rules could only be configured using entity values.

Note

A conversation disposition is a label that identifies the category or outcome of a call. Conversation dispositions can be configured in U-Assist Aftercall, and each disposition consists of levels of categories (5 levels are allowed in U-Assist Aftercall).

Examples of how this feature will be beneficial are:

  • If you want a specific summary template to be generated for each disposition type

  • If you want a particular entity value set according to the call disposition detected

Consider a hospitality client that takes calls to reserve rooms as well as cancel reservations.

An analyst can configure the rules to do the following:

  • If a call was identified to be of the category "Reservation / Booking" (i.e., Level 1 of the disposition hierarchy is Reservation and Level 2 is Booking), then set the summary template as follows:

Customer Name <>. Guest type <> Member number <> No. of rooms <>. Hotel location <>. Phone number <>. No. of days <>. No. of guests <>  Arrival date <> Departure date <>  email ID <>. <Phone # shared>. Call transferred <to Dept> for further assistance.

  • If a call was identified to be of the category "Reservation / Cancel" (i.e., Level 1 of the disposition hierarchy is Reservation and Level 2 is Cancel), then set the summary template as follows:

Customer Name <>. Guest type <> Member number <> Booking ref no. <>. Phone number <>. Reason for cancellation <> email ID <>. <Phone # shared>. Call transferred <to Dept> for further assistance.

How to use this feature:

In the below conversation, the call disposition is identified to be "Benefit Verification". .

Agent: Thanks for calling XXX, let me know what is your query?

Customer: I have called to verify my benefits.

Conditions

The following are the different conditions applied in the rule.

$.disposition().containsLevel1(‘Benefit Verification’).isTrue()

$.disposition().containsHierarchy(‘Benefit Verification’, ‘Dental’).isTrue()

$.disposition().containsLevel1(‘Benefit Verification’).size() == 1

Other operators can be used place of ==, for example - >=, >, <=, <.

The parameters used in this feature are:

containsLevel<num>: Contact categorization in level <num> (e.g. usage: $.disposition().containsLevel1(‘Benefit Verification’).isTrue())

containsHierarchy: Contact categorization hierarchy (e.g. usage: $.disposition().containsHierarchy(‘Benefit Verification’, ‘Dental’).isTrue()

size: The level of the contact categorization to be considered (e.g. usage: $.disposition().containsLevel1(‘Benefit Verification’).size() == 1)

Nested Rules

Rules can be nested within other rules. While creating nested rules, the following criteria are required.

  • Entities and Rules should be created before a nested rule is included in the rule configuration.

  • Drafted entities cannot be used in the rule configuration.

  • Entities once included in the rule configuration cannot be drafted or deleted.

  • To draft or delete an entity, the entity should be removed from the rule configuration.

  • Rule configuration must be validated for submitted / drafted entities.

  • Conditions that can be applied on nested rules are is True() / value().

  • containsAllKeyPhrases / containsAnyKeyPhrases cannot be applied on the nested rules.

AI Entity

It uses an AI model to extract entities from the transcript.

Rules can also be written using AI entities in addition to rules on NLP and complex entities which were earlier supported. A subset of the functions supported for NLP entities will be supported for AI entities.

While exporting complex entities and rule entities including nested AI entities, the application provides a warning message indicating that AI entities have to be imported first in the target environment for a successful import. For Rule and Complex Entity, U-Assist Aftercall will import the nested AI entities with a validation.

  • If the AI entities are present in target organization and business process then the application allows the user to import the rule or complex entity.

  • If the AI entities are not present in target organization and business process then the system throws an exception and prompts the user to create dependent AI entities.

Refer to the page "Rule Configuration for AI entities" for configuration of different conditions and outputs.

Rule Configuration for AI entities

The following are the different conditions and outputs that can be configured for the AI entities. Similar to NLP entities, Rule conditions are applied on the turn transcripts which are obtained as part of the AI entity extraction response.

All function which work based on contributed words will not be applicable and cannot be used for AI entities

AI Entity Extraction Response: [{   "id": "5068",   "modelType": "ai",   "intentChannel": "Customer",   "entityType": "MONEY",   "asrValue": "two hundred and fifty six",   "preprocessedValue": "256",   "normalizedValue": "256",   "valid": true,   "channel": "Customer",   "intentTurnNo": 0,   "turnId": [     3   ],   "asrValueCharSpan": {},   "position": 0,   "detectedSentence": "Customer: i'll go in for the 256 gigabyte iphone 12 ." }]

  • normalizedValue - Normalized value, which will be used in the rule output.

  • turnId - Turn id of the transcription.

  • detectedSentence - Turn transcript.

  • intentChannel - Keyphrase identified channel.

  • channel - Entity extracted channel.

  • isValid - True/False - True indicates if the date value extracted by the NLP is valid - mm/dd/yyyy.

  • preprocessedValue - Value as extracted present in the turn transcript. It is used in the rule condition execution.

AI Entity Rule Configuration:

Contains

Negations

Condition

Output

containsAnyKeyPhrases

nePhraseBeforeEntityValue

isTrue

isTrue

containsAnyRegexKeyPhrases

phraseBeforeEntityValue

value

value

containsAllKeyPhrases

nePhraseAfterEntityValue

data

firstValue

containsAllRegexKeyPhrases

phraseAfterEntityValue

lastValue

firstValueOf

lastValueOf

valueOf

Negations

Distance

KeyPhrases

Description

nePhraseBeforeEntityValue

Y

Y

All the keyphrases provided should not be present before entity value in the turn transcript. Distance indicates the number of words till the search should be executed.

phraseBeforeEntityValue

Y

Y

Any of the keyphrases provided should be present before entity value in the turn transcript. Distance indicates the number of words till the search should be executed.

nePhraseAfterEntityValue

Y

Y

All the keyphrases provided should not be present after entity value in the turn transcript. Distance indicates the number of words till the search should be executed.

phraseAfterEntityValue

Y

Y

Any of the keyphrases provided should be present after entity value in the turn transcript. Distance indicates the number of words till the search should be executed.

Note

To differentiate between AI and NLP entity in a condition of Rule Configuration, a new API named 'aiEntity' is introduced. All AI entities must use this API method to configure the Rule.

For example, Phone_Number is an AI entity so the configuration should start with aiEntity.

Entity Catalog

It is a catalog of entities specific to a particular deployment. The entities in the entity catalog are used to create an AI model for the particular client.

The entity catalog allows the Business Analyst to import entities that have been pre-trained by AI models, which simplifies and reduces the time to configure entity and intent recognition which will improve overall system operation. The catalog reference list will be at the Tenant level. Multiple entity catalog lists at organization/business process level are not allowed. Analysts cannot edit/add entities in the entity catalog reference.

Any change to catalog reference should be considered as an implementation change request as it will have significant impacts to annotation for model training and accuracy calculations.

image126.png

In the Search field, enter a minimum of 3 characters to search by entity name and entity type from the list.

View Entity Details

Analyst can view the list of entities along with description, entity source (NLP, Rule or AI), entity catalog reference, entity type and status for the business process. All the entities which are imported using the Import from Model option will have the source as “AI” in the "Source" column. All the other methods of entities which were created prior to 2.4 will have a source as “NLP”. For entities which are created with 'Rule' type, the source will be displayed as "Rule". For all the AI entities, you can view only the status "Trained". For NLP and Rule entities, you can view the following values in the status column.

  • Draft - Entities which are saved as draft while being defined or configured

  • Submitted - Entities which are successfully submitted

  • Trained - Entities which are trained.

The number of entities drafted, submitted and trained for business process will be displayed on the right side of page.

image72.png
Filter Entities

Analyst can filter the list of entities based on Status and Entity Type.

  • Status - Draft, Submitted, Trained

  • Entity Type - List of all Entity Types

image73.png

The filtered set of Entities will be listed. If Draft is included in filter option, then Draft will be displayed on top followed by Submitted and Trained.

Filter preferences can be retained for the user during the session when the user is logged in.

Search Entity

Analyst can search for an Entity from the list of Entities within a Business Process. 

image74.png

In the Search field, enter a minimum of 3 characters to search by Entity Name and Description from the list.

Sort Entities

Analyst can sort the Entities alphabetically in both ascending and descending order by Entity Name, Description, Entity Type and Status. 

image75.png

By default, Analyst can see the list of Entities with Draft status with the most recently created on top of the list.

Copy Entities from Business Process

Analyst can copy a set of entities from a Business Process to multiple Business Processes. 

  1. Select the list of entities from the source business process by choosing the check boxes and click Copy to Business Process button.

    image76.png
  2. The number of entities selected will be displayed as shown below.

    image77.png
  3. Select the organization from the left pane. The corresponding business processes will be displayed based on the organization selected.

  4. In the Search field, enter a minimum of 3 characters to search for a specific business process.

  5. Select the business processes from which the set of entities is to be copied. The number of business processes selected will be displayed at the bottom of the window.

    image78.png
  6. Click Copy Entity button to copy the selected entities into business processes.

  7. Click Cancel button to cancel the selection of  entities.

Train, Edit and Delete Entities

Analyst can edit, train and delete all the NLP and Rule entities from the Entity list page. For AI entities, you have an only option to delete the entities. 

  1. Click Edit button to edit the entity which is in draft status.

  2. Click View Details button to view the configured entity details such as Entity Type, Match Type, Entity Extraction Channel, Keyphrase Matching Channel, Entity Position, etc.

    image79.png
  3. Click on this ellipsis icon image34.png in respective to the NLP and Rule entities to edit, delete or copy entities in Submitted, Trained, Draft status.

  4. Select the check boxes corresponding to the NLP and Rule Entities which are in Submitted status and click Train button on top of the page to train the Entities. After training, the status will be changed from 'Submitted' to 'Trained' and a confirmation message will be displayed as "Entity Trained Successfully." When the Entities are being Trained through the NLP layer, Analyst cannot perform any actions within the Business Process.

    image80.png
  5. If the language mapping is not available for the selected business process, a warning message will be displayed while training the entities. Information on how to map languages to business processes can be found in the "U-Assist Aftercall Admin Guide".

    image81.png
Export and Import of Entities
Export Entities

Analyst can export only NLP and Rule entities. For AI entities, Export option is disabled.

  1. Select the entity to be exported.

  2. Click Export button.

  3. The selected entity will be downloaded in JSON format. This JSON file includes CTI language code, ISO language code, entity name, description, entity type, catalog reference, status and other configuration details.

    export entity.png

Sample JSON file:

{  "ctiLanguageCode": "EUU",  "isoLanguageCode": "en-us",  "exportEntityBeans": [    {      "defineEntity": {        "id": 0,        "referenceName": "My Name",        "name": "My Name",        "description": "My Name",        "entityType": "PERSON",        "noOfChar": 0,        "defaultValue": "",        "boolTrueValue": null,        "entityTextIfFalse": null,        "catalogReference": "Name",        "sourceType": "NLP",        "trained": true,        "saved": true      },      "configureEntity": {        "name": "My Name",        "inputParams": [          {            "keyPhrases": [              {                "keywordName": "my name is",                "isNew": null,                "categoryId": 0              }            ],            "keyphraseMatchingChannel": "Agent",            "entityExtractionChannel": "Agent",            "entityPosition": "Suffix",            "turnPosition": "Same",            "fuzzyMatch": true          }        ],        "outputParams": {          "keyPhrase": null,          "entityPosition": null        }      },      "ruleConfig": null,      "apiConfig": null,      "nestedEntities": null,      "nestedAiEntities": null    }  ]}

While exporting complex entities and rule entities including nested AI entities, the application provides a warning message indicating that AI entities have to be imported first in the target environment for a successful import.

image89.png
image90.png
Import Entities

Analyst can import entities from a file, and can also import entities that have been pre-trained by AI models. The latter is done by using the Import from Model functionality in the Entity listing page. In the Entity Listing page, all the entities which are imported using the Import from Model option will have the source as “AI” in the 'Source' column

Click Import button. You have an option to import AI entities and NLP entities. 

image82.png
Import from file
  1. Select Import from file option. The window to select file will open.

  2. Select the entity file (JSON file) and click OK. The imported entities will be listed in the Entity List page.

    image87.png

Note

  • Exported files from previous versions need to be in the current JSON structure for successful import into U-Assist 23.2. Refer to the "Sample JSON file" in the Export Entities section.

  • Entities which are created prior to 2.4 cannot be imported to version 2.4.x and above.

For Rule and Complex Entities, U-Assist Aftercall will import the nested AI entities with a validation.

  • If the AI entities are present in target organization and business process then the application allows the user to import.

  • If the AI entities are not present in target organization and business process then the system prompts the user to create dependent AI entities.

Import Conditions:

  • Language of the import file should be same as language of the target environment.

  • Only valid JSON file should be imported.

If any of the above conditions are not satisfied, a warning message will be displayed.

Warning

Please do not edit an exported JSON file unless you have to modify the contents for a cross-version import. Errors in the JSON structure or contents will cause imports to fail.

Import from model
  1. Select Import from model option. You can view the list of AI entities model. Each model includes version number, number of entities and date when the model is tested. 

    image83.png
  2. Click on the model to view all the AI entities available in this model. You can also view the entity catalog reference and the status of each entity whether it is already exist in the business process or not.

  3. If the entity is already exist in the respective business process, the status is shown as "Imported". If the entity does not exist in the business process, the status is shown as "Not Imported". You can only import entities which are not present in the destination business process. Intent is also imported as an Entity.

    image84.png
  4. Select the entities to be imported into the business process and click Import entities button.

    image85.png
  5. After successfully importing entities, you can view the imported entities in the Entity list page.

    image86.png