
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
Announcing the Zohotshots of the ZDC Hackathon 2025
Hey everyone, The wait is finally over! After weeks of building, experimenting, and pushing creative boundaries, we’re excited to announce the winners of the second edition of the ZDC Hackathon. This edition brought together an incredible community of
ZOHO CRM Button Integration
Hi Team, I’m currently working with Zoho CRM along with a custom application where I fetch deal details from the CRM and use them based on my requirements for each deal. Now, I want to enhance this setup. I plan to create a button on the Deal Detail page
Major journey crash and not loading. Zoho Marketing Automation
Hi all. Last night (19MAR, 2026) Marketing Automation for a specific journey completely crashed, and since the crash the specific journey has failed to load at all (blank journey canvas, no journey appears, no menu accessible) but other separate journey's
Candidate Assessments, no workflows.
I have an issue where I would like to trigger a workflow based on a candidate assessment being completed. Sometimes a returning candidate will complete a second assessment, on completion the status of the candidate will be updated to "Unqualified" if
Mail Merge in Zoho Desk
Hello Team, Do we have an option of mail merge within Zoho Desk like we have in Zoho CRM? We have a requirement to generate some pdf file in the form of mail merge doc from the ticket.
Workdrive backup and default storage selection
Hi community, I have been informed by Zoho that workdrive will be the default storage mechanism for crm and projects. These 2 Apps seem to have different design on how they interact with workdrive for storage. 1. Crm: seems to have files saves at the
Zoho vault filling in a form it's not supposed to fill in
Hey there, I have a problem with ZOHO Vault autofill. In a software package, we have these options: For some reason zoho vault always replaces what's in the top option and fills a 2fa password in there, and then saves that value.. Meaning whatever was
Zoho Booking Integration with Desk
Just wanting to share something in case it helps someone else who may run into a similar use case as we did. Issue: Currently, the Zoho Booking integration with desk will drop a comment into the ticket when a customer books a time, however it won't change
Let us view and export the full price books data from CRM
I quote out of CRM, some of my clients have specialised pricing for specific products - therefore we use Price Books to manage these special prices. I can only see the breakdown of the products listed in the price book and the specialised pricing for
Syncing calendar with Google Calendar doesn't work when events are sent to auto repeat
Hi... The ZOHO CRM -- GOOGLE CALENDAR sync is broken. If I create a single event on either side, sync works, but if I create an event with auto repeat on either side it doesn't work. Furthermore, events created before the sync don't show up in the calendar.
Organization wide Account and Contacts Visibility/Sharing Capabilities?
Has anyone figured out a way to make visibility or sharing of Accounts and Contacts to be available across the entire organization without having to have every individual user edit their Sharing permissions? For our sales folks they need to be able to
Notification of Interaction Assignment
If a user is assigned an interaction, they should be notified via email. These are almost useless because if I assign an interaction for someone to respond to, they dont know that I assigned it to them without me telling them or them logging in and discovering
Countries List Global Set- Complete with Phone Country Code and Continent.
Dear Zoho Team I saw your recent addition to the Global Sets regarding the Countries list and states. While working on it, why didn't you also add things like Continent and Phone Country Code? Also, some ISO codes from some Countries/regions are mis
Custom Display Field for Lookup Dropdowns in Zoho CRM
Could Zoho CRM support changing the display field in lookup dropdowns, like Zoho Creator does? This would make it much easier to select the right record by showing a more useful field instead of only the default one. It would improve speed, clarity, and
Message as bot
I would like to be able to send a Cliq message truly as a bot. the current implementation of this function, while it sends the message as a bot it sends that message inside a chat from the user how authenticated the flow cliq connection instead of directly
Books <-> CRM synchronisation with custom Fields
Hello, We are synchronising Books Customers with CRM Accounts. In CRM Accounts I set up last year a "segments" multiselect field shown below In Books, I set up a custom multi-select field with the same value as in the CRM And set up the synchronisation inside Books. Want to synchronise the Books Segments with the CRM Segments, but the later doesn't exist, and another non-existing is there ?! First, I don't understand where the field Segmentation is coming from. Second, I set CRM Segmentation to sync
Trouble with using Apostrophe in Name of Customers and Vendors
We have had an ongoing issue with how the system recognizes an apostrophe in the name of customers and vendors. The search will not return any results for a name that includes the mark; ie one of our vendors names is "L'Heritage" and when entering the
Recording overpayment?
So a customer just overpaid me and how do I record this? I can't enter an amount that is higher than the invoice amount. Eg. Invoice is $195 and he sent $200. He's a reccuring customer so is there a way to record so that he has a $5 advance for future invoice?
Introducing the New Zoho Assist Quick Support Plugin
We are thrilled to announce the new Zoho Assist Quick Support Plugin, the upgraded and enhanced version of the Zoho Assist Customer Plugin. This new plugin allows organizations and IT administrators to deploy it directly onto their customers’ devices,
Automate your signing workflows with Zoho Sign + n8n
Hello! We're excited to announce that Zoho Sign is now available as a community node on n8n, a popular open-source workflow automation platform used by tens of thousands of teams worldwide. n8n lets you connect apps, APIs, and services through a visual
Ask the Experts 27: Onboarding and managing support reps
Hello everyone, We are back with our Ask the Experts (ATE) series for 2026. This year, we bring experts to help you address customer support challenges using Zoho Desk. For our first ATE, we are getting into the human side of customer support. "Every
Retainer invoice in Zoho Finance modlue
Hello, Is there a way of creating retainer invoices in the Zoho Finance module? If not can I request this is considered for future updates please.
Spotlight #27: Embed visual collaboration Spaces in your presentations using the Vani add-on
Hello everyone! This month’s spotlight feature is the Vani add-on for Zoho Show. Every time you pause your presentation to open another tab or pull up supporting material, you lose a bit of momentum. At Zoho Show, we design features that keep everything
CRM
Is anyone else experiencing this issue? Our company is not moving out of using Gmail's web app. It just has more features and is a better email program than Zoho Mail. Gmail has an extension (Zoho CRM for Gmail) that we're using but we've found some serious
Good news! Calendar in Zoho CRM gets a face lift
Dear Customers, We are delighted to unveil the revamped calendar UI in Zoho CRM. With a complete visual overhaul aligned with CRM for Everyone, the calendar now offers a more intuitive and flexible scheduling experience. What’s new? Distinguish activities
Global Search / Command Palette in Live App
Zoho Creator applications can contain many forms, reports, pages, and dashboards. While navigation inside the app is smooth, users still need to move through multiple menus or screens to find specific records or open particular modules. Currently, in
New 2026 Application Themes
Love the new themes - shame you can't get a little more granular with the colours, ie 3 different colours so one for the dropdown menu background. Also, I did have our logo above the application name but it appears you can't change logo placement position
Smarter appointment allocation with round-robin distribution
Greetings from the Zoho Bookings team! We’re excited to introduce the Appointment Distribution feature, a new way to decide how appointments are assigned among users. By default, appointments are distributed evenly across all event types, but this enhancement
A2P 10DLC Opt-in Rejection Issue with Zoho Creator Public Form
Hi everyone, I’m working on an A2P 10DLC SMS campaign and running into repeated rejections due to opt-in issues. I’m using Zoho Creator for the registration flow. The form is public (no login required). Users enter their phone number and there is an unchecked
Make Quick Edits to Images Before Attaching
Hello everyone, We have enhanced how attachments are handled in tickets to help agents preview and share files more efficiently in Zoho Desk. Agents can preview image attachments before adding them to tickets and edit them using attachment annotator.
3/18 オンライン勉強会のお知らせ Zoho ワークアウト (無料)
ユーザーの皆さま、こんにちは。コミュニティチームの中野です。 3月開催のZoho ワークアウトの開催が決定しましたのでご案内します。 今回はZoomにて、オンライン開催します。 ▶︎参加登録はこちら(無料) https://us02web.zoom.us/meeting/register/BoNTN7zYR8OvOPGShqBY0A ━━━━━━━━━━━━━━━━━━━━━━━━ Zoho ワークアウトとは? Zoho ユーザー同士で交流しながら、サービスに関する疑問や不明点の解消を目指すイベントです。
Extend color coding to custom picklist fields
Objectively, Projects has the best UI of any Zoho app — clean, intuitive, and never feels bloated. Big props to whoever owns the design. Feature request: color coding for custom picklist field values in field customization. You've already done it in two
New in Office Integrator: In-sheet text translation
Hi users, We're pleased to introduce translation capability in the spreadsheet editor in Zoho Office Integrator. This allows you to translate the text in your spreadsheet's cells into 70+ languages from within your web app. Office Integrator's spreadsheet
Streamline email communication with Out of Office configuration
Managing user communication effectively is the key to ensuring timely responses and consistent messaging. However, when users are unavailable, the absence of an Out of Office response can lead to delays and missed expectations. Managing these settings
Changing settings for auto logoff
I've noticed that when I haven't used Cliq for a while, I have to re-enter my password. That is really clumsy, especially if you have a complicated password. Because it won't be filled in automatically. Is there a way to change that behaviour? We are
A few Issues when using "Pay Bill via Check"
We have quite a bit of issues with how paying for Bills via Check works. Would love some feedback from the Zoho team in case we are doing something incorrectly. 1. When we go from a vendor and select "Pay Bill via Check" option, we see ALL the outstanding
Prevent tracking users from specific countries
Currently, I’m receiving many bot visits from the United States and Malaysia. I would like these visits not to be recorded in SalesIQ. I already enabled the option to exclude traffic from cloud service providers, but I’m still receiving bot visits. Ideally,
My client requires me to have custom pdf file names to except payment for invoices, how can I customize this before emailing.
Hello! I love the program so far but there are a few things that are standing in the way. I hope you guys can code them in so I can keep the program for years to come. My client requires I customize the pdf file names I send in for billing. Can you please
Edit Project Number?
Hi all: We just signed up for a trial of zoho one, which includes ZoHo Projects. We've noticed there was a 'dummy project' preloaded in projects to help familiarize yourself with the software. We've created a couple of our own projects now but noticed since the dummy project was preloaded, our projects start with number 2 then 3, sequentially. Since it seems we will be keeping zoho past the trial, If we delete the dummy project, how do we get our own projects renumbered, beginning with 1? We'd like
Download pricebook products & details - not just pricebook creation date & name
We're looking to download a copy of a pricebook and its associated products & book prices (as we have several offices in different countries selling the same products), however, when using the export feature under Data administration it only gives me
Next Page