
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
Shared Mailbox in iOS app
Hi, On the desktop I am using a Shared mailbox for our company's general mailbox that somebody else should be able to view. In the iOS app however I can't find it? Old sources on the internet says this isn't possible but that can't be right? Somebody
Issues with Zoho Insights and email template web links
Is anyone else out there having the same issue we're experiencing? When we send out an email template, Zoho insights is converting the URLs from the URL we insert in to the template in to one of the form https://mailer1.zohoinsights.com/ocgeturl/2d6f.327230a?l=0ed7f050-5b31-11eb-a1a...
UCP: Why We Killed the Multi-Portal Mess and Simplified Customer Self-Service
Let's talk about the multi-portal mess nobody wants to admit that it exists. Your customer needs an invoice from one app, wants a ticket update from another, and has a project waiting in a third, each behind its own login, its own UI, its own "was it
Object-level edit permissions
Hi, we are currently running into a limitation with permissions inside larger workspaces. Our use case is a central Analytics workspace that contains many tables, Query Tables, reports and dashboards used by different teams. We would like to allow certain
inventory removal at packing list or shipment.
currently our system is set to remove inventory at invoice. This is creating an inventory nightmare? Is it possible to change the settings to remove the item from inventory at either the packing slip stage or shipping the item.
Item description is not displayed
I added the item description while importing the new item through the bulk item Excel sheet, and the import was completed successfully. However, I cannot see the description in the item details under Inventory. Could anyone please advise how to make the
Shared inbox unable to see replies
Hi we are a small company me and someone else, we have a shared inbox for our sale@ and contact@ however we have this issue where by if i reply to an email or the other person reply to the email, it does not show it to them and therefore we end up replying
Record Payment - Auto Populate Amount as payments are selected
When recording payments you have the option of clicking on "Pay in Full" next to the bill which automatically adds the total at the bottom of the page next to "Amount used for payments" but this should also auto populate / update the total at the top
Can't set conditional layout rule on lookup field in Zoho CRM
Namaskaram Zoho CRM team, Usually any fields of module except mandatory fields can be hide using conditional layout rules. But that can't be set on lookup fields event that is not a mandatory fields. Many users are in need of that. Crafted with ❤️ Zoho
[Request] Pivot filter date option : from set date to relative value ie from 01Jan to LastMonth
I don't think I can currently do this... but it's worth asking if it's possible. My use case is concerning annual leave which is calculated from the beginning of the calendar year (01Jan) then each month I want to have details of leave taken etc... In
Need to be able to apply layout rules to 'Multi Pick List'
Currently, we are unable to apply layout rules to fields that are 'Multi Pick List'. This means we have to instead use checkbox fields, but they are inefficient. For example, we use the Multi Pick List to list our products. However, we're unable to apply
Announcing the new SKILL.md for Zoho CRM and the updated OAS repository!
We are introducing a new zoho-crm skill to make working with Zoho CRM Developer tools (like APIs, functions, widgets, client scripts, queries etc) easier and faster, with the help of AI in your preferred AI harness like Claude Code, Codex, Cursor, VSCode
My "trigger" panel disappear from my workflow ...
Hello, I want to add a trigger to an email sequence, but the "trigger" panel has disappeared when I want to modify ...I used a predefined template to create this sequence, is that because of that? Thank you. I have attached a screenshot to you
Workflow Automation Not Triggering
My Zoho CRM workflow sometimes doesn’t trigger when a record is updated, even though the workflow criteria appear to be met. What should I check to find out why the workflow is being skipped?
How can I add a Custom Field (or Customer_name) to a picklist?
Our workflow is Shopify-->SO -->Picklist-->Package-->Shipment. We would like to have the Picklist template to include a custom field "Customer_Notes" (we have created this field already). This way we get alerted when a customer has notes on their account.
AI Calling
Hi, does anyone have experience or any thoughts on AI Calling. Getting AI to make calls on behalf of your company. We are looking into it, but are finding it difficult to get info and providers that can assist.
Zoho Sheet as KB Document
It would be nice if Zia Agents could take Zoho Sheets as part of the knowledge base. The use case here is that it's infinitely easier for humans to maintain a spreadsheet table than any .md / TAML / JSON document. For situations where humans are responsible
Ask the Experts: Five-hour live Q&A session with Zoho WorkDrive product experts
Have questions about WorkDrive 5.0? Let’s talk! We recently launched Zoho WorkDrive 5.0, packed with powerful updates to help your team work smarter, stay secure, and get more value from your business content. From content-centric workflows and AI-powered
Automating CRM backup storage?
Hi there, We've recently set up automatic backups for our Zoho CRM account. We were hoping that the backup functionality would not require any manual work on our end, but it seems that we are always required to download the backups ourselves, store them,
Zoho Community Digest - September 2026 | Part 3
Hi everyone, and welcome back! Zoho CRM launches PRM for partner management, Bigin builds this year's Apple AI updates into the app, and Snapchat is now a connected channel in Zoho Social. There are also three notices worth reading, including WhatsApp
Change from OST to PST on Windows 10/11 Using Free Method
There is an advantage in converting OST files to PST format if you need to access your Outlook data on a different computer, want to keep a local copy, or are trying to recover items from an old Outlook profile. The good point is that users of Windows
ERROR: This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details
I can add new user for mail, i received message error about; This user is not allowed to add in Zoho. Please contact support-as@zohocorp.com for further details Try creating user name; instagram@eficaztecnologia.com.br
Support for Custom Fonts in Zoho Recruit Career Site and Candidate Portal
Dear Zoho Recruit Team, I hope you're doing well. We would like to request the ability to use custom fonts in the Zoho Recruit Career Site and Candidate Portal. Currently only the default fonts (Roboto, Lato, and Montserrat) are available. While these
Ability to filter services and parts based on a field in the Work Order
Hell FSM team, We have a customer with 2 value streams using Zoho FSM. Each value stream uses different products, at different price point. Currently, all of the products are accessible when creating a work order and modifying a service appointment, which
SubTotaks for Item Headers in Estimates
Hi, Apparently, one can add Item Headers in Estimates in Zoho Books. Is this feature like an Estimate section with a SubTotals for each Item Header/Section? Or is the Item Header just a Title and cannot be SubTotalized? Thank You
Sync of products and orders between Zoho Inventory, Zoho Books and Shopify
Good Day I migrated from QuickBooks to Zoho Books and Zoho Inventory at the beginning of this year. The migration team assisted with importing my data, but I am currently experiencing multiple issues affecting syncing between Shopify and Zoho. 1. SKU
Best practices for importing phone numbers
I've recently found a problem with my phone provider, integrated with Zoho CRM, where a phone number that starts with 00 instead of + won't work. The problem has no solution: they tell me to replace all 00 with + I've always preferred using 00 instead
Copy + Paste in Notes: Text color and text background are not retained
I've recently started using Zoho Notebook as an Evernote replacement. When copying and pasting text within Zoho Notes, I notice that the formatting of the text (text color and background color) is not retained when pasting. Only the attributes "Bold"
Add Comprehensive Accessibility Features to Zoho Writer
Hello Zoho Writer Team, We hope you are doing well. We would like to submit a feature request to enhance Zoho Writer with a full set of accessibility tools, similar to the accessibility options already available in the Zoho Desk agent interface. 🚧 Current
MAKING ENTRY TIME MORE USER FRIENDLY AND FASTER O PREVENT TAB TIME
I AM CURIOUS TO KNOW IF WE CAN MAKE IT MORE USER FRIENDLY WHILE MAKING BILLS , I MAJORLY USE OVER DESKTOP SO I AM SUGGESTING TO REMOVE TAB TIME WHILE ENTERING BILL OR MAKING INVOICE DIRECT JUMP TO ONLY REGULAR PARTS OF THE BILL . YOURS RAKESH 782866
Email Forwarding to Zoho Desk Failing After Migration from Gmail to Outlook (Microsoft)
We recently migrated from Gmail to Microsoft Outlook. Since the migration date, emails sent by our customers are no longer being received by Zoho Desk. I tried setting up the email forwarding rules in Outlook similar to what we had in Gmail, but it still
Shopify B2B Integration: Option to Match Customers by Company Name
It would be great if the Shopify integration could include Company Name as a customer matching option. At the moment customers can only be matched by: Email Name Email and Name Phone For businesses using Shopify B2B, the company is often the customer
How does Zoho handle the daylight savings time change in Alberta?
Alberta has just made the decision to get rid of daylight savings. This means that as of November 1, 2026 we remain on UTC-6 year-round. We have timing errors in meetings scheduled after that For example, we scheduled meetings in late November at 9:00
Free Methods to Convert PST to MBOX on Mac & Windows
Converting PST files to MBOX is often needed when moving Outlook mailbox data to email clients such as Thunderbird, Apple Mail, or other MBOX-supported applications. The process can be different on Windows and macOS, and free methods may involve several
Zoho Payroll: Product Updates - Q3, FY2026
Over the past quarter, Zoho Payroll has added several updates to make payroll easier to process, configure, and manage. The most notable improvements cover bank integrations, reimbursement support, payslip enhancements, employee exit documentation, payroll
Print checks for owner's draw
Hi. Can I use Zoho check printing for draws to Owner's Equity? This may be a specific case of the missing Pay expenses via Check feature. If it's not available, are there plans to add this feature?
Deliver exceptional customer experience with Field Service Management in Zoho Service Plus
The advent of automation and personalization in the AI era has raised customer expectations exponentially for faster resolution of issues with less tolerance to friction in the process. Fast, accurate, and intelligent service that understands customer
Zoho Extensions 101: Building extensions for Zoho People
Hello developers! Welcome to our new video series on building extensions for Zoho People! If you're new to extension development or looking for guidance on building extensions for Zoho People, you're in the right place. We've curated a series of videos
Build A Happier Workforce With Zoho People
The success of an organization depends on its people. Therefore, a comprehensive and cloud-based HRMS software is an integral part of the IT ecosystem for the business. With a wide number of key modules to define the structure of an organization, manage
How to import PST files in Office 365?
You can import PST files into Office 365 using native Outlook applications, the Microsoft Purview network upload method, or specialized third-party migration tools. Choosing the right method depends on whether you are migrating a single mailbox or executing
Next Page