Building Extensions #14: Creating widgets with the JS SDK bundle in Zoho Desk - Hooks API

Building Extensions #14: Creating widgets with the JS SDK bundle in Zoho Desk - Hooks API

This series aims to equip developers with all they need to build extensions for Zoho Desk in Zoho Sigma and publish them in Zoho Marketplace.

Hello developers!

In our previous post, we explained the use of the resources API and provided an example of how to use them in a Zoho Desk extension. In this post, we'll continue with the Hooks API.

What is the hooks API? 

The hooks API allows developers to control the flow of UI actions through their extensions on a conditional basis. You'll need to subscribe to the hooks and, based on your requirements, you can allow the event to happen or reject it by passing either boolean values or promises in the event handler.
  • If the boolean value TRUE is passed/if the extension resolves the promise, the event will be executed.
  • If the boolean value FALSE is passed/if the extension rejects the promise, the event will be terminated and the reason for terminating the event will be displayed as an error message to end users.
Extensions with subscriptions to hooks must respond within 30 seconds of the event being triggered. If not, the control provided by the extension will be lost and the event will be executed.

What events are supported by the hooks API ?

Zoho Desk currently supports hooks for the following events:
  • Reopening a ticket
  • Closing a ticket
  • Changing the status of a ticket
  • Changing the assignee of a ticket
  • Adding a ticket comment
  • Editing a ticket comment
  • Sending a ticket reply
  • Closing a ticket on sending ticket reply
  • Updating the agent status in a channel
Click this link to find out more about the events and locations that are supported for every event within Zoho Desk.

Now that we have an understanding of the hooks API, including when and where it can be used, let's look at an example of how it can be used in an extension.

Defining the hooks API 

Below is the structure of the hooks API to be defined in your extension code.

      App.instance.on('name of the hook to be subscribed', function(){    
          //return promise or boolean   
      })

You can subscribe to the required hooks and include your required custom logic. The custom logic should either return TRUE or the promise needs to be resolved to allow the subscribed event to occur; otherwise the event occurrence will be blocked with a relevant message popping up that you provide.

Hooks related to ticket status, ticket comments, and other parameters will return data that can be used within your custom logic.  

Possible scenarios  

Let's create an extension that tracks the activities associated with a ticket in Zoho Desk. The extension monitors the activities (e.g., a call, task, or event) of Zoho Desk tickets and controls the trigger of actions based on the hooks defined.

In this example, we're configuring an extension to subscribe to the Zoho Desk hook defined for the close ticket event. With this extension, when the agent tries to close the ticket, the extension checks whether the activities mapped to the ticket are completed.

If they are completed, the extension will allow the ticket to close in Zoho Desk; otherwise, the close ticket event will not be executed and a relevant error message will be displayed. In addition, we're configuring the hook to consider the activity as completed for both cancelled and no activities as well in the ticket.

Use case implementation

To implement our use case, we'll perform the following steps. The code snippet is added for reference.
  • Obtain the activities associated with the current ticket
  • Obtain the status of the activities
  • Subscribe to the ticket status hook and handle the event handler according to the requirements
  • Subscribe a hook to close the ticket
Sample code
            window.onload = function () {
                        ZOHODESK.extension.onload().then(App=>{
                        var activityStatus;
                        ZOHODESK.get(['ticket.id']).then(function (res) {
                        var result = res.data;
                        ticketID=result["ticket.id"];

//Get the activities associated to the ticket
                       var reqObj= {
             url: 'https://desk.zoho.com/api/v1/tickets/'+ ticketID+'/activities',
             headers: {
                           'Content-Type': 'application/json'},
                           type: 'GET',
                           postBody: {},
                           connectionLinkName: "deskproject"
             }
             ZOHODESK.request( reqObj ).then(function(response){
                        var resultparse = JSON.parse(response);
                        var resultparse2=JSON.parse(resultparse.response).statusMessage;

//From the response obtain the status of the activities
                if(resultparse2!=null){
                   var resultparse3=resultparse2.data;
                   for (let i = 0; i < resultparse3.length; i++) {
                         activityStatus=resultparse3[i].status;                   }
                        }
                  })
            })

//Register a Hook for changing the status of a ticket
            App.instance.on('ticket.status', function (data) {
            return new Promise((resolve, reject) => {
            if ((data["ticket.newStatus"] == "Closed")){
            if((activityStatus=="Completed")||(activityStatus=="Canceled")||(activityStatus==null))
            {
                  return true;
            } else {
                  reject({ msg: "Incomplete Activity" });
                  }
            }
                  })
})

//Register a Hook for ticket close event
            App.instance.on('ticket.close', function () {
            if((activityStatus=="Completed")||(activityStatus=="Canceled")||(activityStatus==null))
            {
                  return true;
            } else {
                  reject({ msg: "Incomplete Activity" });
                  }
            })
                  })
            }

Result:



Here, you can see that the extension doesn't allow you to close the ticket because there is an open activity tagged. This is how the hooks API helps us to configure whether an event should happen or not, based on the hook configured.
 
We hope you found this post to be useful. Stay tuned for more posts in this space! 

See Also

    Access your files securely from anywhere









                          Zoho Developer Community




                                                • Desk Community Learning Series


                                                • Digest


                                                • Functions


                                                • Meetups


                                                • Kbase


                                                • Resources


                                                • Glossary


                                                • Desk Marketplace


                                                • MVP Corner


                                                • Word of the Day


                                                • Ask the Experts





                                                          Manage your brands on social media



                                                                Zoho TeamInbox Resources



                                                                    Zoho CRM Plus Resources

                                                                      Zoho Books Resources


                                                                        Zoho Subscriptions Resources

                                                                          Zoho Projects Resources


                                                                            Zoho Sprints Resources


                                                                              Qntrl Resources


                                                                                Zoho Creator Resources



                                                                                    Zoho CRM Resources

                                                                                    • CRM Community Learning Series

                                                                                      CRM Community Learning Series


                                                                                    • Kaizen

                                                                                      Kaizen

                                                                                    • Functions

                                                                                      Functions

                                                                                    • Meetups

                                                                                      Meetups

                                                                                    • Kbase

                                                                                      Kbase

                                                                                    • Resources

                                                                                      Resources

                                                                                    • Digest

                                                                                      Digest

                                                                                    • CRM Marketplace

                                                                                      CRM Marketplace

                                                                                    • MVP Corner

                                                                                      MVP Corner







                                                                                        Design. Discuss. Deliver.

                                                                                        Create visually engaging stories with Zoho Show.

                                                                                        Get Started Now


                                                                                          Zoho Show Resources

                                                                                            Zoho Writer

                                                                                            Get Started. Write Away!

                                                                                            Writer is a powerful online word processor, designed for collaborative work.

                                                                                              Zoho CRM コンテンツ






                                                                                                Nederlandse Hulpbronnen


                                                                                                    ご検討中の方




                                                                                                          • Recent Topics

                                                                                                          • What's New - August 2025 | Zoho Backstage

                                                                                                            Every month, Zoho Backstage grows with you. These updates aren't just features and fixes, they're about making your workday smoother, your events more impactful, and your attendees happier. We’ve listened, learned, and shaped this release to keep things
                                                                                                          • prevent selling expired items

                                                                                                            Hello. I need to make a constraint on expired batch items not to be sold. Is it possible in Zoho Inventory? if so, then how? Thanks for further help.
                                                                                                          • Product details removed during update from other system

                                                                                                            We maintain our product details in an other system. These details are synchronized with Zoho at the end of each day, through an API. This has worked perfectly sofar. But last Monday, all product codes and some other product data have been wiped during
                                                                                                          • Client Customer

                                                                                                            I purchased a customer user license, but we cannot see the project I added in the customer account. I would like to ask for support on what we should do.
                                                                                                          • Add Ability to Use Zoho Finance Tags

                                                                                                            For Zoho Finance (Books and Inventory), the current actions do not allow us to affect the tags associated with the entities in question (customers, vendors, items, etc.). Please consider adding this functionality into the actions.
                                                                                                          • Embeded Signing doesn't work on Safari Browser

                                                                                                            We have implemented Zoho Sign in our website by using embeded signing, It works perfectly on Chrome. But it fails on Safari, We get stuck on Zoho Sign Page during redirection from Zoho Sign to our website after signing the document, Please let us know
                                                                                                          • Dataprep Webhook Limits and Cannot update column with Dataprep

                                                                                                            I have two problems : 1 - I am using Airflow to trigger my pipeline, and when I tested it, it worked fine a couple of times. However, after that, I received an error: {"code":429,"message":"Request rate limited"}. I didn’t send too many requests — maybe
                                                                                                          • New in Zoho Forms: Google reCAPTCHA v3 for smarter spam protection

                                                                                                            Hello form builders, Spam submissions are one of the biggest challenges when you share your forms online. They not only clutter your data but can also waste valuable time. To help you combat this without making life harder for genuine respondents, we’re
                                                                                                          • Project Management Bulletin: August, 2025

                                                                                                            We’ve touched a grand 19 years since we started pioneering project management solutions with Zoho Projects. What started as a simple one-page interface is now a suite of products with Zoho BugTracker, Zoho Sprints, and our new debut Zoho Projects Plus,
                                                                                                          • Zoho Sign and Zoho Workdrive Integration

                                                                                                            Hello, there. I want to know if it's possible to save a signed document from Zoho Sign in an specific folder for each signer in Zoho Workdrive.  For example: If John Doe signs the document in Zoho Sign I want to save it automatically in a folder named
                                                                                                          • How do you list multiple contacts for a lead?

                                                                                                            My sales team wants to be able to add additional contacts for leads, how do we do that? Is there a different way we should be using the lead / contact functionality? Moderation update (9th September 2025): Our developers have built an extension to achieve
                                                                                                          • Modifying Three Dot Menu Options

                                                                                                            Is there a way to modify the three dot menu options that display in a Report header? They currently display: Show As (List, Calendar, Timeline), Print, Import, Export. I'd like to remove the Show As and Print options, since they aren't applicable for
                                                                                                          • Field Not Updating in FSM Script - Service and Parts module.

                                                                                                            Dear Team, I am reaching out regarding a script I have implemented in Zoho FSM to automate the calculation of the End of Service date based on the End of Sale date in the Service and Parts module. Overview of the script: Fetches the End_of_Sale__C and
                                                                                                          • Zadarma + Zoho CRM Integration – Missed Calls Saved as Contacts Instead of Leads

                                                                                                            Hello everyone, I’m looking for input from anyone with experience using the Zadarma + Zoho CRM integration. Currently, I’m seeing that missed calls are automatically being created as Contacts instead of Leads. From a CRM perspective, this doesn’t make
                                                                                                          • How to update Multiple Users field in Quote Module from Deal Module

                                                                                                            Scenario : Deal Module having Multiple User Field (Presales Engineer) which having more than 1 User and through Deluge Script I need to get that Users Details and need to put into Multiple User Field (Presales Engineer) of Quote Module. Note: Both Module
                                                                                                          • Clone a Module??

                                                                                                            I am giong to repurpose the Vendors module but would like to have a separate but very similar module for another group of contacts called Buyers. I have already repurposed Contacts to Sellers. Is it possible to clone (make a duplicate) module of Vendors
                                                                                                          • How to change the text in WhatsApp Zobot integrated to Zoho Booking?

                                                                                                            I have integrated Zoho Bookings into Zoho SalesIQ, I want to change the text in WhatsApp when creating a booking in Zobot how to change those text?
                                                                                                          • Updating Subform Record from other Form

                                                                                                            Just wanted to ask how to properly approach this. I have 2 forms and would like to trigger an auto update on the subform once record submitted. block below only updates 1 row for each recordRow in input.AV_System { AssetRecord = Site_Asset_Services[SOR_No
                                                                                                          • Zoho Books - Hide Convert to Sales Order if it can't be used.

                                                                                                            Hi Books team, I noticed that it is not possible to convert a Quote to a Sales Order when a Quote is not yet marked as accepted. My idea is to not show the Convert to Sales Order button when it is not possible to use it, or show it in a grey inactive
                                                                                                          • How do I bulk archive my projects in ZOHO projects

                                                                                                            Hi, I want to archive 50 Projects in one go. Can you please help me out , How can I do this? Thanks kapil
                                                                                                          • Cross-Data Center Collaboration and / Or allowing users to choose DC

                                                                                                            Dear Zoho Cliq Support Team, We are writing to request a significant enhancement to Zoho Cliq that would greatly benefit our geographically dispersed development team. Current Challenge: Currently, Zoho Cliq automatically routes users to specific data
                                                                                                          • New Mandatory One-Click Unsubscribe Link Overshadowing Custom Unsubscribe Link

                                                                                                            I was recently informed by Zoho CRM Support that they are now mandated by the large email service providers like Google and Yahoo to provide a one-click unsubscribe option in the header (not the body) of all mass emails. I have a custom unsubscribe link
                                                                                                          • Send / Send & Close keyboard shortcuts

                                                                                                            Hello! My team is so close to using Zoho Desk with just the keyboard. Keyboard shortcuts really help us to be more efficient -- saving a second or two over thousands of tickets adds up quickly. It seems like the keyboard shortcuts in Desk are only for
                                                                                                          • Is it possible to register webhooks in Zoho CRM using API?

                                                                                                            Hello, I am trying to register a webhook in Zoho CRM programmatically (using the API). Specifically, I want to register a webhook that is fired when new Contacts are created in the CRM. I was able to setup a webhook using the UI, by creating a rule that
                                                                                                          • Calls where the local audio is shared, have echo

                                                                                                            When another user is sharing their screen with audio, I get echo from my own voice. We tested this with multiple users, with different audio setups, and there's no obvious way to fix it. Is this a bug you could look into, or are we missing something?
                                                                                                          • Update application by uploading an updated DS file

                                                                                                            Is it possible? I have been working with AI on my desktop improving my application, and I have to keep copy pasting stuff... Would it be possible to import the DS file on top of an existing application to update the app accordingly?
                                                                                                          • Markdown support, code cells...

                                                                                                            Hi Zoho I'd like to vote for a feature that markdown is supported with: Headings Code highlighting Quoteblocks ... Furthermore a inline card(like inline sketch card) for special text like Code would be great. And just to add my vote as well for "Tags"!
                                                                                                          • Minimise chat when user navigates to new page

                                                                                                            When the user is in an active chat (chatbot) and is provide with an internal link, when they click the link to go to the internal page the chat opens again. This is not a good user experience. They have been sent the link to read what is on the page.
                                                                                                          • Zoho Projects app update: Voice notes for Tasks and Bugs module

                                                                                                            Hello everyone! In the latest version(v3.9.37) of the Zoho Projects Android app update, we have introduced voice notes for the Tasks and Bugs module. The voice notes can be added as an attachment or can be transcribed into text. Recording and attaching
                                                                                                          • zurl URL shortener Not working in Zoho social

                                                                                                            zurl URL shortener Not working in while creating a post in Zoho social
                                                                                                          • In the Zoho CRM Module I have TRN Field I should contain 15 digit Number , If it Contain less than 15 digit Then show Alert message on save of the button , If it not contain any number not want to sh

                                                                                                            Hi In the Zoho CRM Module I have TRN Field I should contain 15 digit Number , If it Contain less than 15 digit Then show Alert message on save of the button , If it not contain any number not want to show alert. How We can achive in Zoho CRm Using custom
                                                                                                          • Zoho Bookings know-how: A hands-on workshop series

                                                                                                            Hello! We’re conducting a hands-on workshop series to help simplify appointment scheduling for your business with Zoho Bookings. We’ll be covering various functionalities and showing how you can leverage them for your business across five different sessions.
                                                                                                          • Custom report

                                                                                                            Hello Everyone I hope everything is fine. I've tried to To change the layout of the reports, especially the summary page report, and I want to divide summary of each section in the survey but I can't For example: I have a survey containing five different
                                                                                                          • Zoho Journey - ZOHO MARKETING AUTOMATION

                                                                                                            I’ve encountered an issue while working with a journey in Zoho Marketing Automation. After creating the journey, I wanted to edit the "Match Criteria" settings. Unfortunately: The criteria section appears to be locked and not editable. I’m also unable
                                                                                                          • Custom Fields in PDF outputs

                                                                                                            I created a couple of custom fields. e.g Country of Origin and HS Tariff Code. I need these to appear on a clone of a sales order PDF template but on on the standard PDF template. When I select "appear on PDFs' it appears on both but when I don't select
                                                                                                          • How to create a Service Agreement with Quarterly Estimate

                                                                                                            Hello, I'm not sure if this has been asked before so please don't get mad at me for asking. We're an NDIS provider in Australia so we need to draft a Service Agreement for our client. With the recent changes in the NDIS we're now required to also include
                                                                                                          • Zoho Social - Post Footer Templates

                                                                                                            As a content creator I often want to include some information at the end of most posts. It would be great if there was an option to add pre-written footers, similar to the Hashtag Groups at the end of posts. For example, if there is an offer I'm running
                                                                                                          • Allow to pick color for project groups in Zoho Projects

                                                                                                            Hi Zoho Team, It would be really helpful if users could assign colors to project groups. This would make it easier to visually distinguish groups, improve navigation, and give a clearer overview when managing multiple projects. Thanks for considering
                                                                                                          • Zoho Books - Quotes to Sales Order Automation

                                                                                                            Hi Books team, In the Quote settings there is an option to convert a Quote to an Invoice upon acceptance, but there is not feature to convert a Quote to a Sales Order (see screenshot below) For users selling products through Zoho Inventory, the workflow
                                                                                                          • Can't find imported leads

                                                                                                            Hi There I have imported leads into the CRM via a .xls document, and the import is showing up as having been successful, however - when I try and locate the leads in the CRM system, I cannot find them.  1. There are no filters applied  2. They are not
                                                                                                          • Next Page