Enables business administrators with comprehensive control over form creation, management, and utilization. This offers flexible options to introduce new question types, structure content using sections, and assign weighted scoring to responses, which elevates both user experience and the depth of data insights.
Form types are deprecated.
There will be no form types available in the form builder from now onward. A form that is created will have no specific type and can be used in any case (pre-chat, survey, quality management).
Form Type is deprecated from CX4.10 and subsequent releases
The screenshot below provides a clear view of the redesigned form UI.
Refer to the user guide for detailed instructions on how to utilize the form.
Form Key Structures
Sections
Allow adding multiple sections
Questions (Attributes)
INPUT
alphaNumeric (Alpha Numeric Character)
alphaNumericSpecial (Alpha Numeric Special Character)
email (Email)
number (Number)
phoneNumber (Phone Number)
password (Password)
positiveNumber (Positive Number)
url (URL)
IP (IP address with or without port)
date (Date)
time (Time)
dateTime (DateTime)
shortAnswer (Short Sentence)
file (Media File)
OPTIONS
boolean (Yes/No) → Single Select
mcqs (Multiple Choice) → Single Select
checkbox (Checkboxes) → Multiple Select
dropdown (Dropdown) → Single Select
5-star-rating (5 Star Rating) → Single Select
nps (Net Promotor Score) → Single Select
TEXTAREA
paragraph (Long Sentences)
Weightage
Questionnaire weightage formula being used on section to question level =>, for example, if the section is assigned 50 weightage and the question is assigned 30 weightage, then the formula will look like: “ 30/100 * 50 ”
Sample Weighted Form:
Form → [100] ← Form Weightage
Section 1 → [30] ← Section Weightage
Question 1 → [20] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 5 → [0] ← Option Weightage
Question 2 → [40] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [0] ← Option Weightage
Question 3 → [40] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 3 → [0] ← Option Weightage
Section 2 → [40] ← Section Weightage
Question 1 → [50] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 3 → [0] ← Option Weightage
Question 2 → [50] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 3 → [0] ← Option Weightage
Section 3 → [30] ← Section Weightage
Question 1 → [30] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 3 → [0] ← Option Weightage
Question 2 → [30] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 3 → [0] ← Option Weightage
Question 3 → [40] ← Question Weightage
Option 1 → [100] ← Option Weightage
Option 2 → [50] ← Option Weightage
Option 3 → [0] ← Option Weightage
Question (Attribute) Level Weightage
(Allowed only on MCQ and Dropdown Type Questions)
Allow businesses to set weightage from the form level to the question’s option level.
Weightage values range from 0% to 100%
Weightage only applies to Multiple Choice (MCQs) and Dropdown (dropdown) type questions.
Max Character Limits
Form Title: 500
Form Description: 1000
Section Name: 500
Section Description: 500
Attribute Label: 500
Attribute Helping Text: 100
Category Label: 500
Option Label: 500
Prompts in Question (Attribute)
Audio File Attachments for Question Prompts
Against each question, one can add Audio-type file attachments to allow businesses to fulfill IVR prompt use cases.
The maximum file limit is 5MB
File Engine Supported audio file type: mp3.
Form Builder Restrictions
Sections
By default, sections will be disabled, but can be enabled. In case of the weighted form section is automatically enabled.
Weightage
By default, disabled, but it can be enabled.
Given weightage will only apply for single select MCQs/Dropdown type questions (weightage calculation will only apply to these), and should be fine if enabled.
When weightage is enabled, only multiple-choice and Dropdown value types are allowed.
Multiple Choice Categories
Enabled by default, can be disabled. Only available for checkbox-type questions.
Single Select
Single Select only applies to MCQs/Dropdown-type questions.
Multiple Select
Multiple Select only applies to Checkbox-type questions.
Questions (Attributes)
A detailed schema for all possible questions in a form with screenshots is available.
Value Type (Question)
Attribute Type (HTML)
Question (Attribute) Schema
Question (Attribute) Screenshots
alphaNumeric
alphaNumericSpecial
email
number
phoneNumber
password
positiveNumber
url
ip
date
time
dateTime
shortAnswer
INPUT
All Input Sample Schema
CODE
{
"_id": "65cc566711819b00328db0a9", // String (ObjectId)
"attributeType": "INPUT", // String (Field type)
"helpText": "Enter AlphaNumeric Text Here ..", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "what_is_your_name?", // String (Unique key for the attribute)
"label": "What is your name?", // String (Label for the attribute)
"valueType": "alphaNumeric", // String (Value type which will be added by customer)
"attributeWeightage": 10, // Number (Overall attribute weightage for the question)
"attributeAttachment": "https://file-server.expertflow.com/xyz" // String (Optional media file to be attached)
}
All input-type questions will have the same look and feel, except for the file-type question.
file (file upload)
INPUT
Input File Type Sample Schema
CODE
{
"_id": "65cc566711819b00328db0a9", // String (ObjectId)
"attributeType": "INPUT", // String (Field type)
"helpText": "Enter AlphaNumeric Text Here ..", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "what_is_your_name?", // String (Unique key for the attribute)
"label": "What is your name?", // String (Label for the attribute)
"valueType": "file", // String (Value type which will be added by customer)
"attributeAttachment": "https://file-server.expertflow.com/xyz", // String (Optional media file to be attached)
"fileData": {
"restrictFile": true, // Boolean (If set to false then no file type validation will be done)
"fileExtension": ["PNG", "JPG", "JPEG", "DOC", "MOV", "MP3"], // Array of Strings (Allowed file extensions)
"fileNumber": 5, // Number (Maximum 10 and minimum 1)
"fileSize": 5, // Number (in MB)
"destinationFolder": "https://file-server.expertflow.com/file/" // String (Destination folder for the file)
}
}
Allow users to upload a multi-media file with specific validations
paragraph
TEXTAREA
Paragraph Sample Schema
CODE
{
"_id": "65cc566711819b00328db0a9", // String (ObjectId)
"attributeType": "TEXTAREA", // String (Field type)
"helpText": "Enter Paragraph Text Here ..", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "what_is_your_name?", // String (Unique key for the attribute)
"label": "What is your name?", // String (Label for the attribute)
"valueType": "paragraph", // String (Value type which will be added by customer)
"attributeAttachment": "https://file-server.expertflow.com/xyz" // String (Optional media file to be attached)
}
Only Text Area Type Questions
boolean (Yes/No)
OPTIONS
Boolean Sample Schema
CODE
{
"_id": "65dc26ba07c232003325b8bf", // String (ObjectId)
"attributeType": "OPTIONS", // String (Field type)
"helpText": "Enter Customer Type Here...", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "customer_type", // String (Unique key for the attribute)
"label": "Customer Type", // String (Label for the attribute)
"valueType": "boolean", // String (Boolean, YES/NO Question valueType)
"attributeAttachment": "https://file-server.expertflow.com/xyz", // String (Optional Media File to be attached)
"attributeWeightage": null, // Null or Number (Overall attributeWeightage will be null or 0 in case of boolean)
"attributeOptions": {
"enableCategory": false, // Boolean
"enableStyle": true, // Boolean (Assuming style can be enabled for boolean)
"reverseOrder": false, // Boolean (If 'true' attributeData will be in reversed order)
"isMultipleChoice": false, // Boolean (will be false in case of boolean)
"attributeData": [
{
"label": "Label Name", // String
"values": [
{
"label": "Yes", // String
"value": true, // Boolean
"optionStyle": {
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": null // String
},
"optionWeightage": null // Null or Number (weightage will be null or 0 in case of boolean)
},
{
"label": "No", // String
"value": false, // Boolean
"optionStyle": {
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": null // String
},
"optionWeightage": null // Null or Number (weightage will be null or 0 in case of boolean)
}
]
}
]
}
}
Boolean Type Questions with/without emoji enable
mcqs (Multiple Choice → Single Select)
OPTIONS
Multiple Choice Sample Schema
CODE
{
"_id": "65dc26ba07c232003325b8bf", // String (ObjectId)
"attributeType": "OPTIONS", // String (Field type)
"helpText": "Enter Customer Type Here...", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "customer_type", // String (Unique key for the attribute)
"label": "Customer Type", // String (Label for the attribute)
"valueType": "mcq", // String (Multiple Choice, Single Select)
"attributeAttachment": "https://file-server.expertflow.com/xyz", // String or Null (Optional Media File to be attached otherwise "null")
"attributeWeightage": 10, // Number (Overall attributeWeightage for the question)
"attributeOptions": {
"enableCategory": false, // Boolean (In case of MCQ type question, category can be enabled)
"enableStyle": false, // Boolean (Emojis cannot be enabled for mcq)
"reverseOrder": false, // Boolean (Reverse Order cannot be 'true' in case of mcq type question)
"isMultipleChoice": false, // Boolean (will be false in case of mcq)
"attributeData": [
{
"label": "Label Name", // String
"values": [
{
"label": "One", // String
"value": null, // Null (value is not specified for mcq options)
"optionStyle": null, // It may be Null or Object with keys value null in it
"optionWeightage": 10 // Number (weightage can be enabled in case of mcq)
},
{
"label": "Two", // String
"value": null, // Null (value is not specified for mcq options)
"optionStyle": null, // It may be Null or Object with keys value null in it
"optionWeightage": 10 // Number (weightage can be enabled in case of mcq)
}
// More objects can be added here
]
}
// More objects will only be added in case of 'enableCategory' is 'true'
]
}
}
Multiple Choice Question with Attribute(Question) level weightage
checkbox (Multi-Select)
OPTIONS
Checkboxes Sample Schema
CODE
{
"_id": "65dc26ba07c232003325b8bf", // String (ObjectId)
"attributeType": "OPTIONS", // String (Field type)
"helpText": "Enter Customer Type Here...", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "customer_type", // String (Unique key for the attribute)
"label": "Customer Type", // String (Label for the attribute)
"valueType": "checkbox", // String (checkbox)
"attributeAttachment": "https://file-server.expertflow.com/xyz", // String or Null (Optional Media File to be attached otherwise "null")
"attributeWeightage": null, // Null or Number (Overall attributeWeightage for the question type checkboxes will be 'null' or 0)
"attributeOptions": {
"enableCategory": false, // Boolean (In case of checkbox type question, category can be enabled)
"enableStyle": false, // Boolean (Emojis cannot be enabled for checkbox)
"reverseOrder": false, // Boolean (Reverse Order cannot be 'true' in case of checkbox type question)
"isMultipleChoice": true, // Boolean (will be true in case of checkbox)
"attributeData": [
{
"label": "Label Name", // String
"values": [
{
"label": "One", // String
"value": null, // Null (value is not specified for checkbox options)
"optionStyle": null, // It may be Null or Object with keys value null in it
"optionWeightage": null // Null or Number (weightage for checkbox options)
},
{
"label": "Two", // String
"value": null, // Null (value is not specified for checkbox options)
"optionStyle": null, // It may be Null or Object with keys value null in it
"optionWeightage": null // Null or Number (weightage for checkbox options)
}
// More objects can be added here
]
}
// More objects will only be added in case 'enableCategory' is 'true'
]
}
}
Checkboxes Type Question with Category Enabled
dropdown (Multiple Choice → Single Select)
OPTIONS
Dropdown Sample Schema
CODE
{
"_id": "65dc26ba07c232003325b8bf", // String (ObjectId)
"attributeType": "OPTIONS", // String (Field type)
"helpText": "Enter Customer Type Here...", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "customer_type", // String (Unique key for the attribute)
"label": "Customer Type", // String (Label for the attribute)
"valueType": "dropdown", // String (dropdown)
"attributeAttachment": "https://file-server.expertflow.com/xyz", // String or Null (Optional Media File to be attached otherwise "null")
"attributeWeightage": 10, // Number (Overall attributeWeightage for the question)
"attributeOptions": {
"enableCategory": false, // Boolean (In case of Dropdown type question, category can be enabled)
"enableStyle": false, // Boolean (Emojis cannot be enabled for dropdown)
"reverseOrder": false, // Boolean (Reverse Order cannot be 'true' in case of dropdown type question)
"isMultipleChoice": false, // Boolean (will be false in case of dropdown)
"attributeData": [
{
"label": "Label Name", // String
"values": [
{
"label": "One", // String
"value": null, // Null (value is not specified for dropdown options)
"optionStyle": null, // It may be Null or Object with keys value null in it
"optionWeightage": 10 // Number (weightage can be enabled in case of mcq)
},
{
"label": "Two", // String
"value": null, // Null (value is not specified for dropdown options)
"optionStyle": null, // It may be Null or Object with keys value null in it
"optionWeightage": 10 // Number (weightage can be enabled in case of mcq)
}
// More objects can be added here
]
}
]
}
}
Dropdown Type Question with Attribute (Question) level Weightage
5-star-rating (5-Star Rating)
OPTIONS
5 Star Rating Sample Schema
CODE
{
"_id": "65dc26ba07c232003325b8bf", // String (ObjectId)
"attributeType": "OPTIONS", // String (Field type)
"helpText": "Enter Customer Type Here...", // String (Placeholder of field)
"isRequired": true, // Boolean (Check if field is required or not)
"key": "customer_type", // String (Unique key for the attribute)
"label": "Customer Type", // String (Label for the attribute)
"valueType": "5-star-rating", // String (5-star-rating)
"attributeWeightage": 10, // Number (Overall attributeWeightage for the question)
"attributeAttachment": "https://file-server.expertflow.com/xyz", // String or Null (Optional Media File to be attached otherwise "null")
"attributeOptions": {
"enableCategory": false, // Boolean (In case of Dropdown type question, category can be enabled)
"enableStyle": true, // Boolean (Emojis can not be enabled for dropdown)
"reverseOrder": false, // Boolean (Reverse Order can be 'true' in case of rating type question)
"isMultipleChoice": false, // Boolean (will be false in case of dropdown)
"attributeData": [
{
"label": "Label Name", // String
"values": [
{
"label": "Very Dissatisfied", // String
"value": 1, // Number
"optionStyle": { // Object
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": "#ffffff" // String
},
"optionWeightage": null // Null (weightage can be null)
},
{
"label": "Dissatisfied", // String
"value": 2, // Number
"optionStyle": { // Object
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": "#ffffff" // String
},
"optionWeightage": null // Null (weightage can be null)
},
{
"label": "Neutral", // String
"value": 3, // Number
"optionStyle": { // Object
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": "#ffffff" // String
},
"optionWeightage": null // Null (weightage can be null)
},
{
"label": "Satisfied", // String
"value": 4, // Number
"optionStyle": { // Object
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": "#ffffff" // String
},
"optionWeightage": null // Null (weightage can be null)
},
{
"label": "Very Satisfied", // String
"value": 5, // Number
"optionStyle": { // Object
"name": "Filled Smile", // String
"media": "https://cx-frontend.expertflow.com/unified-admin/assets/images/form-assets/emoticon-filled-1.svg", // String
"type": "filled", // String
"color": "#ffffff" // String
},
"optionWeightage": null // Null (weightage can be null)
}
]
}
]
}
}
{
"id": "65b248c710e57100322c5f88",
"state": "unpublished",
"formTitle": "Form Builder",
"formDescription": "",
"enableSections": true,
"enableWeightage": false,
"section":
[
{
"sectionName": "Section Name",
"sectionKey": "section_name",
"sectionWeightage": 100,
"attributes":
[
// ALL INPUT AND TEXTAREA AND OPTIONS TYPE QUESTIONS LEGAL in this FORM
]
}
]
}
Impacts of Form Type Removal
Impact Area
Details
1
Form Types
Form types removed.- No restrictions on selecting question types.
Generic forms support all question types.
2
Mixed Questions
Forms can include both weighted and non-weighted questions.
Single-select types (MCQs, dropdowns) can have optional weightage.
3
Section Behavior
New forms start with no sections.
When adding a section:
Two sections are created.
Existing questions go to the first section.
The second section is empty.
4
Weighted Form Behavior
Forms are non-weighted by default.
Enabling weightage:
Two sections are created.
Existing questions move to the first section.
The second section is empty.
5
General Impact
Features previously dependent on form types will be affected.
6
Web-Published Forms
All question types are supported.
Mixed forms are supported.
If weightage is enabled:
Scores are computed.
Non-weighted questions score 0.
7
Customer Widget
Supports all question types and sections.
Weighted forms are allowed, but score calculations are not considered.
8
Pre-Chat Form (Web Channel)
In multi-section forms:
All questions are extracted and sent as key-value pairs.
Sections are not preserved.
9
QM Forms
Support all question types and sections.
Mixed forms are allowed.
Non-weighted questions get a score of 0.
10
Wrap-Up Form
Auto-created on first launch.
Cannot be deleted, but can be edited.
Only supports:
Checkboxes,
MCQs,
Dropdowns.
Strictly non-weighted.
No sections allowed.
Upgrade Form Schema to New Forms
This update applies to CX4.10 and all subsequent releases.
Script# 1: Remove formType. Purpose: Removes the formType field from all documents in a collection. Usage: This aligns the documents with the new, more generic schema.
JS
const connection_string = "string_to_replace";
db = connect(connection_string);
function updateFormSchema() {
const result = db.getCollection('forms').updateMany(
{ "formType": { "$exists": true } },
{ "$unset": { "formType": "" } }
);
console.log(`${result.modifiedCount} documents have been updated.`);
}
updateFormSchema();
Downgrade Form Schema to Old Forms
Script# 2: Add formType: “Generic”. Purpose: Adds formType: "Generic" to all documents where it does not already exist. Usage: This is for reverting documents to a schema structure that expects a formType.
JS
const connection_string = "string_to_replace";
db = connect(connection_string);
function updateFormSchema() {
const result = db.getCollection('forms').updateMany(
{ "formType": { "$exists": false } },
{ "$set": { "formType": "Generic" } }
);
console.log(`${result.modifiedCount} documents have been updated.`);
}
updateFormSchema();
Note: Use the mongo shell terminal to execute the upgrade/downgrade commands. Replace the connection string with the actual one.
Introducing New APIs in Form Builder
Multi-level Pagination for Form Schema API
This update applies to CX4.10.3 and all subsequent releases.
Introduces multi-level pagination in the Form Schema API to optimize performance when handling large forms. Instead of returning the complete nested form structure in a single response, the API now supports incremental loading through four dedicated paginated endpoints
1. Paginate Sections in a Form
Endpoint:
CODE
GET {{unifiedAdminUrl}}/forms/paginatedForm/{formId}?level=sections&page=1&limit=10
Response: Returns a paginated list of sections with metadata. Each section includes a totalAttributes count instead of the full attribute array.
GET {{unifiedAdminUrl}}/forms/paginatedForm/{formId}?level=attributes§ionIndex=0&page=1&limit=10
Response: Returns a paginated list of attributes for the given section. Each attribute includes a totalCategories count instead of the full category array.
This update applies to CX4.10.3 and all subsequent releases.
Allows agents to search wrap-up codes (wrapcodes) within a form using a keyword. Instead of scrolling through long lists of codes, agents can type into a search bar and instantly filter the available wrapcodes. This improves efficiency, accuracy, and reduces Average Handle Time (AHT).
Endpoint:
CODE
GET {{unifiedAdminUrl}}/wrapupSearch/{formId}?q=<keyword>§ionIndex=<number>&attributeIndex=<number>&page=<number>&limit=<number>
Path Parameter
formId → Unique ID of the form.
Query Parameters
q → Keyword to search wrap codes (case-insensitive).
sectionIndex → Index of the section in the form schema.
attributeIndex → Index of the attribute inside the section.
page → Current page number for pagination.
limit → Maximum number of wrap codes per page (default/recommended: 20)
This update applies to CX4.10.3 and all subsequent releases.
Introduces partial updates for form schemas using the HTTP PATCH method. Instead of sending the full form object (via PUT), clients can now update only the specific fields that need modification.
This approach provides:
Efficiency: Only the changed data is sent, reducing payload size and bandwidth.
Lower Server Load: The server processes smaller updates instead of entire form documents.
Endpoint:
CODE
PATCH {{unifiedAdminUrl}}/forms/{formId}
Path Parameter
formId → Unique ID of the form to update.
Request Body (Patch Operations Array) Each operation follows the structure inspired by JSON Patch (RFC 6902).
op → The operation to perform (add, replace, or remove).
path → JSON Pointer string that specifies the target field.
value → The new value (only required for add and replace).
Example Patch Payloads
1. Replace a Form Title
CODE
[
{ "op": "replace", "path": "/formTitle", "value": "New Updated Form Title" }
]