
Howdy, Tech Wizards!
Picking up the thread from last week, we will continue our Zoho CRM and Zoho Desk integration.
Now, let us take it a step further.
We will enable sales representatives to escalate critical support tickets directly from Zoho CRM.
This controlled escalation mechanism triggers the SLA in Zoho Desk and simultaneously creates a trackable work item in Zoho CRM. The work item captures additional notes from the Sales team, enabling immediate action by the support team. It also allows Sales to monitor escalation progress anytime.
Business Problem
At Zylker, the Sales team works in Zoho CRM to manage customer relationships and track ongoing deals, while the Support team uses Zoho Desk to manage customer issues and service requests. Now the sales representatives have visibility into open support tickets using the widget built in the
previous post. However, there is no structured way to escalate tickets from within Zoho CRM.
This leads to:
- Delayed escalations, increasing customer frustration.
- Lack of accountability when issues slip through the cracks.
- No audit trail of internal interventions for compliance and review.
Visibility alone is not enough. Sales teams need an actionable escalation mechanism within CRM.
Solution
We will extend the
existing Related List widget by adding an
Escalate button to each ticket row. On clicking this button, a confirmation
pop-up appears.
When the user clicks the Confirm button in the pop-up, the ticket status in Zoho Desk is updated to Escalation from Zoho CRM. This status change triggers the associated SLA configured in Zoho Desk.
As part of the SLA automation, the ticket priority can be updated to High, and the ticket owner can be notified. You can also configure additional actions based on your business requirements. If the Support team does not respond within the defined SLA time, the ticket can be automatically escalated to a manager or the escalation team.
After the ticket status is updated, the confirmation pop-up closes and an escalation form appears within the parent widget. This form allows the Sales team to capture additional details such as escalation reason, customer impact, and expected closure date. When the form is submitted, a record is created in a custom module called Escalation Work Items in Zoho CRM.
The Support team accesses only the Escalation Work Items module in Zoho CRM. This module acts as a shared escalation tracker between the Sales and Support teams. Support agents review the escalation details provided by Sales, take the required action in Zoho Desk, and update the escalation record in CRM. This allows the Sales team to track progress and stay informed before their sales call.
Prerequisites
- Related List Widget in CRM
- Two-way sync between Zoho CRM and Zoho Desk
- Existing Zoho Desk connection
- Working widget project
2. Update the existing Zoho Desk connection to include the Desk.tickets.UPDATE scope in addition to the existing Desk.tickets.READ and Desk.contacts.READ scopes.
Refer to the
Connections help doc for more information.
3. Create a custom module named Escalation Work Items in Zoho CRM to store escalation records.
- Go to Zoho CRM > Setup > Customization > Modules and Fields.
- Click Create New Module and enter Escalation Work Items as the module name.
- Add the following custom fields:
Fields | Date Type |
Contact Name | Lookup |
Customer Impact | Multiline |
| Desk Ticket | URL |
Escalation Reason | Multiline |
Expected Closure Date | Date Time |
Store these API names, as they will be used later in the widget implementation.
4. Create a custom ticket status in Zoho Desk to differentiate that the particular ticket is escalated from Zoho CRM.
- Log into Zoho Desk.
- Go to Settings > Customization > Layouts and Fields > Ticket Status and click Add Status.
- Fill in the Status Name, Status Type and click Save.
4. Create an SLA in Zoho Desk that triggers when the ticket status changes to Escalation from Zoho CRM.
- Go to Settings > Automation > Service Level Agreements and click New SLA.
- Provide Name and Description to the SLA.
- Choose the trigger condition as Field Update and select the Status field.
- Click Next and proceed configuring the target.
- Configure the escalation rules, response times, and resolution targets as per your business requirements.
5. Create two new files called escalate-popup.html and escalate-popup.js in the widget project. These files will handle the confirmation dialog UI and button actions.
This pop-up acts as a sub-widget of the parent Related List widget.
6.
Validate and Pack the parent widget with the empty files and upload it to Zoho CRM to register the sub-widget.
- Go to Zoho CRM > Setup > Developer Hub > Widgets and click Create New Widget.
- Provide the widget details and choose the widget type as Button.
- Set the file path of escalate-popup.html as the Index Page and upload the package.
- After saving the widget, navigate to the Widget Details page to find its API name. Store this API name, as it will be required in the parent widget to render the pop-up using the openPopup() method.

Step-by-Step Implementation
In the existing widget project directory, we will add the escalation functionality.
Step - 1: Add the Escalate Button to the Ticket Table
In the renderTickets function, add an escalate button alongside the view link for each ticket row. On clicking, the button has to call the escalateTicket function that opens a pop-up.
Step - 2: Create the Escalation Confirmation Pop-up
Add the HTML and CSS for the pop-up in the escalate-popup.html and the button functions in the escalate-popup.js file.
ZOHO.embeddedApp.on("PageLoad", function(data) { console.log("Escalation popup loaded with data:", data); }); ZOHO.embeddedApp.init(); // Confirm escalation - close popup and return confirmed: true document.getElementById('confirmBtn').addEventListener('click', function() { $Client.close({ confirmed: true }); }); // Cancel escalation - close popup and return confirmed: false document.getElementById('cancelBtn').addEventListener('click', function() { $Client.close({ confirmed: false }); }); |
Use the
$Client.close() in pop-up to return data back to the parent widget. When the user clicks
Confirm, it returns
{ confirmed: true }, and when they click Cancel, it returns
{ confirmed: false }.
Step - 3: Implement the Escalate Ticket Function
In the
escalateTicket function, use the
openPopup method to open the
escalate-popup.html file and render the confirmation dialog.
When the user clicks
Confirm, call the
Zoho Desk Update Ticket API to change the ticket status to
Escalation from Zoho CRM. This status change automatically triggers the configured SLA in Zoho Desk.
// Escalate a ticket using openPopup async function escalateTicket(ticketId, subject) { try { // Open the escalation confirmation popup widget var result = await ZDK.Client.openPopup({ api_name: 'Zoho_Desk_Pop_Up', type: 'widget', animation_type: 6, header: 'Escalate Ticket', bottom: 'center', height: '250px', width: '400px' }, { ticketId: ticketId, subject: subject }); console.log("Popup result:", result); // If user clicked Confirm if (result && result.confirmed) { ZDK.Client.showLoader('Escalating ticket...'); // Update ticket status to "Escalation from Zoho CRM" using Desk Update Tickets API const updateResponse = await deskZrc.patch('/tickets/' + ticketId, { status: 'Escalation From Zoho CRM' }); console.log("Update Ticket Response:", updateResponse); ZDK.Client.hideLoader(); ZDK.Client.showMessage('Ticket escalated successfully'); // Show escalation details form var ticketUrl = 'https://desk.zoho.com/agent/zylkerpvtltd/zylker/tickets/details/' + ticketId; renderEscalationForm(ticketId, ticketUrl, subject); } } catch (error) { ZDK.Client.hideLoader(); console.error('Error escalating ticket:', error); ZDK.Client.showAlert('Failed to escalate the ticket. Please try again.', 'Error'); } } |
After the ticket status is successfully updated, render an escalation form within the parent widget to capture additional details.
The form should pre-populate the ticket subject and ticket URL as read-only fields. It should also allow the user to enter the customer impact, escalation reason, and expected closure date.
Step - 4: Create an Escalation Entry in Zoho CRM
The Save button should trigger the saveEscalationRecord function. The function validates that all fields are filled and formats the datetime with timezone offset as required by Zoho CRM. The Contact_Name field relates the escalation record to the current Contact using the entityId captured during page load.
// Save escalation record to Zoho CRM async function saveEscalationRecord(ticketUrl, ticketSubject) { var customerImpact = document.getElementById('customerImpact').value.trim(); var escalationReason = document.getElementById('escalationReason').value.trim(); var expectedClosureDate = document.getElementById('expectedClosureDate').value; if (!customerImpact || !escalationReason || !expectedClosureDate) { ZDK.Client.showAlert('Please fill in all fields before saving.', 'Validation Error'); return; } // Format datetime with timezone offset for CRM var dateObj = new Date(expectedClosureDate); var tzOffset = -dateObj.getTimezoneOffset(); var tzSign = tzOffset >= 0 ? '+' : '-'; var tzHours = String(Math.floor(Math.abs(tzOffset) / 60)).padStart(2, '0'); var tzMins = String(Math.abs(tzOffset) % 60).padStart(2, '0'); var closureDate = dateObj.getFullYear() + '-' + String(dateObj.getMonth() + 1).padStart(2, '0') + '-' + String(dateObj.getDate()).padStart(2, '0') + 'T' + String(dateObj.getHours()).padStart(2, '0') + ':' + String(dateObj.getMinutes()).padStart(2, '0') + ':' + String(dateObj.getSeconds()).padStart(2, '0') + tzSign + tzHours + ':' + tzMins; var recordData = [{ "Name": ticketSubject, "Customer_Impact": customerImpact, "Escalation_Reason": escalationReason, "Expected_Closure_Date": closureDate, "Desk_Ticket": ticketUrl, "Contact_Name": { "id": entityId } }]; try { ZDK.Client.showLoader('Saving escalation record...'); const crmResponse = await zrc.post('/crm/v8/Escalation_Work_Items', { data: recordData }); console.log("CRM Insert Response:", crmResponse); ZDK.Client.hideLoader(); ZDK.Client.showMessage('Escalation record created successfully'); // Go back to tickets list await loadTickets(); } catch (error) { ZDK.Client.hideLoader(); console.error('Error creating escalation record:', error); ZDK.Client.showAlert('Failed to create escalation record. Please try again.', 'Error'); } }
|
Step - 5: Validate and Pack the Widget
Follow the steps given in the
Widget help page to validate and pack the widget. A complete working code sample is provided as attachment at the end of this post.
Step - 6: Update the Widgets in Zoho CRM
Since we have added new functionality to the widgets, we need to update it in Zoho CRM.
- Go to Zoho CRM > Setup > Developer Hub > Widgets.
- Locate the existing Related List widget and pop-up widget.
- Click the settings icon and select Edit.
- Update the package in both the widgets and click Save.
Try it Out!
Let us look at the escalation flow from the Contacts detail page in Zoho CRM.
Key Points to Remember
- The Desk connection must include Desk.tickets.UPDATE scope in addition to Desk.tickets.READ and Desk.contacts.READ scopes.
- The custom module API name Escalation_Work_Items and field API names like Customer_Impact, Escalation_Reason, Expected_Closure_Date, Desk_Ticket, and Contact_Name are organization-specific. Replace them with your actual API names in the saveEscalationRecord function.
- The pop-up widget must be registered separately in the Widgets page, and its API name must be used in the openPopup method. Update the api_name parameter in line 229 with your pop-up widget's API name.
- Update the Desk URL pattern in lines 182 and 266 with your portal name and company name.
- Ensure the SLA in Zoho Desk is configured to trigger when the status changes to Escalation from Zoho CRM.
- If you have a large number of contacts or tickets, implement pagination using from and limit parameters as mentioned in the previous Kaizen.
We hope this Kaizen empowers your sales team to take immediate action on critical support issues without leaving Zoho CRM. The combination of visibility and controlled escalation ensures that no customer issue falls through the cracks.
Have questions or suggestions? Drop them in the comments or write to us at
support@zohocrm.com.
On to Better Building!
-----------------------------------------------------------------------------------------------------------
Related Reading
-----------------------------------------------------------------------------------------------------------
Recent Topics
Limiting the form - Zoho People
Hi Team, I would like to limit the number of form/request submissions for employees within a given month. For example, if an employee has already submitted 3 requests in the current month, they should not be allowed to submit any further requests. An
Introducing PDF conversion in Deluge
Hello everyone, We're pleased to introduce built-in PDF conversion capabilities in Deluge with the launch of the convertToPDF task. As PDF is one of the most widely used formats in professional environments, this task helps streamline document generation
Introducing our new 'Extension Development' Series!
Hello users, We're excited to launch a new series on 'Building Extensions in Zoho Sprints' where the workspace owner or developers can learn to customize the workspace to meet their unique or niche requirements. Each post in this series will guide you
Product Updates in Zoho Workplace applications | March 2026
Hello Workplace Community, Let’s take a look at the new features and enhancements that went live across all Workplace applications for the month of March. Zoho Mail Create Collections Under Categories in Bookmarks Create multiple collections under categories
How to install Widget in inventory module
Hi, I am trying to install a app into Sales Order Module related list, however there is no button allow me to do that. May I ask how to install widget to inventory module related list?
Credit card transactions are backwards after importing statements
I am new to Zoho Books so I'm importing my firm's bank and credit card statements in. My credit card statements have a single column with negative numbers so that is the option I chose. But when I went to categorize the credit card transactions, I can
BMO bank connection not working with either Yodlee or Plaid
Been experiencing this issue for almost a month now. Anyone else?
How to reduce inventory valuation when not tracking individual items?
We purchase clothing items wholesale, embroider them with a company's logo, then resell. The garment style, size, color, etc. changes according to a customer's desire, so we don't track the individual item's purchase within Zoho Inventory unless there's
Email templates for estimates
Hi there, When I send an estimate the option to choose a template appears. However it is common to need to make some minor personalizations and modifications to the email before sending ie. adding a second person to the greeting, or adding a small note
Stage-probability mapping feature in custom module
Hi, I'm building a custom module for manage projects. I would like to implement the stage-probability feature that Potentials has. Is this possible?
Mastering Zia Match Scores | Let's Talk Recruit
Feeling overwhelmed by hundreds of resumes for every job? You’re not alone! Welcome back to Let’s Talk Recruit, where we break down Zoho Recruit’s features and hiring best practices into simple, actionable insights for recruiters. Imagine having an assistant
Zoho Books - France
L’équipe de Zoho France reçoit régulièrement des questions sur la conformité de ses applications de finances (Zoho Books/ Zoho Invoice) pour le marché français. Voici quelques points pour clarifier la question : Zoho Books est un logiciel de comptabilité
Zoho Home Tasks View - any way to add conditional formatting?
Hello! Is there any way to add conditional formatting to the tasks window under Home Page? Id like tasks to be shown in green/yellow and red depending on its task date. I know Classic View shows colorfull icons: But its not possible to add any custom
User Name in Zoho Cliq Not Updating Across Apps?
We updated the name of a user in Zoho. (From Sue to Taylor) Her name has not been updated in Cliq on all apps. When in Zoho One, if I go to Cliq directly, it is correct, but if I am in another app, and the Cliq bar pops up on the bottom, it will be the
Set Default Status of Assembly to "Assembled" When Entered in UI
I've just discovered the new "confirmed" status of Assemblies within Inventory. While I understand the intent of this (allowing for manufacturing planning and raw material stock allocation), it was initially confusing to me when manually entering some
New Customization options in the module builder: Quick Create and Detail view
Hello everyone, We have introduced two new components to the module builder: Quick create and Detail view. The Quick Create Component It is a mini form used to create a record and associate it to the parent record from a lookup field. For example, if you have a Deals lookup in the Contacts module, then you can associate existing deals or create a deal and associate it with the contact. You can customize this Quick Create form by adding standard as well as custom fields. There is no limit to the number
Items Landed Cost and Profit?
Hello, we recently went live with Zoho Inventory, and I have a question about the Landed Cost feature. The FAQ reads: "Tracking the landed cost helps determine the overall cost incurred in procuring the product. This, in turn, helps you to decide the
How do I automate my package and shipment process
Hey, I have a very basic problem regarding automating my package and shipment. My business does not require me to have those modules and manage them currently and since I'm new to zoho I want to start with just the basics. I just need to automatically
Announcing Zoho Sheet desktop app for macOS and Windows (Beta)
Hello Sheet users, We know you’ve been waiting for this one. It has always been the top priority on our roadmap to provide a single native desktop app for macOS and Windows that works both online and offline. Today, we are excited to announce that the
zoho creator panel add formula
Hello. I'm using zoho panels which works good for me but i need to add an extra calculation the predefined sum function provided by zoho. not sure if this is possible? The code zoho is generating for the sum is as follows; <text margin='0px' padding='0px'
How to take result of calculation in a form and subtract from a value in another form
I'm using the following code on successful form submission to perform a calculation and enter the result into a field a shown below input.Space_Used = ifNull(input.Area_In_Square_Meters,0) * ifNull(input.Total_Stock,0); I now need the result above, the
Re: Application Architecture in Zoho Creator — A Platform-Specific Deep Dive
A recent community post on application architecture made some excellent points about planning architecture early in Zoho Creator projects. The core message is right — Creator applications have a habit of growing organically into maintenance nightmares,
Missing Fields in Lead Conversion Mapping
I’ve been using Zoho CRM since 2013 to manage leads and convert them into contacts and jobs. When I convert a lead to a customer, I create a new contact and a job. Previously, this process automatically transferred key information from the lead to the
Mass email from Report output
Hi, I'd like to send a mass email based on a report output. The report is pulling multiple information from linked modules. Each line of the report ends up with a contact name, email and multiple field values pulled from the linked modules (some are custom
What's New in Zoho Analytics - February 2026
Hello Users! We're back with another round of updates for Zoho Analytics. This month's release focuses on giving you greater flexibility in how you visualize, manage, and act on your data - with new features like custom visualizations, remote MCP server,
Understanding tasks
So we have a module linked to contacts called Equipment and that in turn has a related module called service calls. Often on a service call we want add a task but we are not able. I think it needs a link to the contact. WE therefore tried to add tasks
Cross Module Filtering – Use Fields from Lookup modules in Custom Views criteria and Advanced Filters
Hello everyone, Zoho CRM now enables you to achieve deeper filtering of records in a module, using fields of a lookup, thereby enhancing your data management experience manifold. This filtering based on lookup module fields is now available in advanced
Related Lists in Email Templates
Hi Zoho team, I would love to see a feature where related list information can easily be added to an email template (instead of mail merge). I have a client who books flights for their customers. They do this through a Flights module so all booked flights
Auto-sync field of lookup value
This feature has been requested many times in the discussion Field of Lookup Announcement and this post aims to track it separately. At the moment the value of a 'field of lookup' is a snapshot but once the parent lookup field is updated the values diverge.
Introducing SlyteUI : From Idea to a Working Interface in Minutes
Hello everyone! Are you spending hours building basic UIs? Does even the smallest customization feel like a major task? CRM customization should feel intuitive and straightforward, not time consuming or exhausting. SlyteUI makes this possible by simplifying
need to add tax in servce and items
please give access to add gst or tac to add in service and parts
Blueprint transitions on locked records
We use the ability to automatically lock records (quotes, sales orders, etc.) based on criteria, such as stage. For instance, if a quote has been sent to a client, the quote is then locked for further edits. Our ideal quote stage process is: Draft>Sent>Won.
Lead Entry Strategy
Hi there. Was wondering if anybody could share their strategy around lead entry into Zoho CRM. One of the challenges with Zoho CRM is a lead requires a last name. We want to capture companies that operate within our addressable market, and we often don't
Social posts not saving as drafts or posting
Over the past two days, I have written and modified the same post for 5 different channels 4 different times. They will neither save as draft, nor go through and load in the scheduler, nor will they post when I try to push it live now. In every case,
Introducing user groups, roles, and profiles in Zoho Sign
Hello, Today, we're excited to unveil user groups, roles, and profiles to offer granular access controls in Zoho Sign. These help administrators manage document visibility and accessibility based on assigned user roles and permission sets. User groups:
On Duty Requests - Zoho People Data
Hello Team, We are currently using the On Duty Form to record Work From Home (WFH) requests in our organization. However, we are facing an issue where pending On Duty requests are not appearing in the Attendance Module. For example, if I submit On Duty
Add org-specific data with Custom modules
Zoho Sprints offers a wide range of default modules designed to support agile project management. However, some projects or organizations may require additional modules to store project-specific or organization-specific data. To address this, Zoho Sprints
All new Address Field in Zoho CRM: maintain structured and accurate address inputs
Availability Update: 29 September 2025: It's currently available for all new sign-ups and for existing Zoho CRM orgs which are in the Professional edition exclusively for IN DC users. 2 March 2026: Available to users in all DCs except US and EU DC. 24
【無料/オンライン】4/30開催|Zoho ワークアウト(オンライン勉強会)
ユーザーの皆さま、こんにちは。 コミュニティグループの中野です。 4月開催の「Zoho ワークアウト」のご案内です。 本イベントは、Zohoユーザー同士で交流しながら 設定・運用・活用に関する課題解決を目指すオンライン勉強会です。 「設定を進めたいけれど、一人だと手が止まってしまう」 「他社がどう活用しているのか知りたい」 「相談できる相手がおらず、運用に悩んでいる」 そんな方におすすめのイベントです。 ▶︎参加登録はこちら(無料) https://us02web.zoom.us/meeting/register/qIH1ut8aTnq-R7-21eF3BQ
Give your organization a branded login experience with White Labeling
When users log in to their email, the URL they land on is often the first thing they notice. A generic login page can feel disconnected from your organization's identity, especially when you have already established a strong brand presence. For administrators,
Next Page