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

                                                                                                          • access to quartz for my customers

                                                                                                            Hi how can I have access to the application quartz you use for us to send you screen rocording, this feature would be immensely useful for our customers support https://quartz.zoho.com/
                                                                                                          • Issue with Inline Images in Email Reply via Zoho Desk API

                                                                                                            Hi, I am attempting to send inline images in an email reply using the Zoho Desk API, but the images are not being displayed inline for the recipient. I have followed this documentation: https://desk.zoho.com/DeskAPIDocument#Uploads https://desk.zoho.com/DeskAPIDocument#Threads#Threads_SendEmailReply
                                                                                                          • How to search a value stored in a subform?

                                                                                                            Hello, We store serial numbers in subforms but now we would like to be able to search the values to be able to easily find the record with the serial number. I saw that it's not possible to search such values through global search but is it possible to do it an other way? Thank you,
                                                                                                          • Field Dependency Not Working on Detail Page in Zoho Desk

                                                                                                            Hi Support Team, I’ve created field dependencies between two fields in Zoho Desk, and they are working correctly on the Create and Edit layouts. However, on the Detail page, the fields are not displaying according to the dependencies I’ve set — they appear
                                                                                                          • How do the keyword critera work?

                                                                                                            Hi, I'm working on automated assignment of tickets based on keywords. How does this feature work? Where does this criteria look for keywords - email address, subject, email body? Can you please clarify this as I want to avoid overlapping with criteria
                                                                                                          • Error: Unsupported content type: text/html;charset=UTF-8 after tryeing to get the token for n8n automation

                                                                                                            I am working on ZOHO Desk automation and need to get the ZOHO auth token for n8n I have created the app in ZOHO Desk API, got client id and client secret. Added all data required to get a token in n8n. After I sign in with my ZOHO credentials in ZOHO
                                                                                                          • Improving Collaboration Features in Zoho Portal

                                                                                                            Hello Zoho Community, I’ve recently started exploring Zoho services and I’m really impressed with the wide range of features. However, I feel there is still room for improvement in the collaboration area. For example, it would be really helpful if we
                                                                                                          • Automated Shopify Emails Not Being Delivered

                                                                                                            I have an ecommerce store with Shopify. I recently set up my email to be served through Zoho. Since doing this, customers are not receiving some of our automated emails from Shopify itself. Our initial email that confirms their purchase goes through but our Shipping Notification that is automatically sent out upon fulfillment is not going through. Sometimes we get a notice that it's been classified as spam, sometimes nothing. I can send/receive email via Outlook on my desktop and I can send/receive
                                                                                                          • Send a campaign to one recipient.

                                                                                                            Very often I speak to a customer and they say they didn't see my email (maybe it went in Junk, maybe they deleted it). Anyway, I just want to go into the Campaign and send it to one person. You already have a feature very close to this - when sending a Test. While developing a campaign, I can send tests to anyone. Why can't we have this AFTER  the campaign has been sent? I know, there's a caveat, and that's in the use of merge tags. Most of the time I only use FNAME, but maybe you could check if
                                                                                                          • Try FSM again for our business

                                                                                                            We already have our customers individual equipment in CRM with serial numbers, install dates, warranty length and importantly next service which is generally 2 years. a month before the service date is due we get get a report and send out service reminders.
                                                                                                          • Get Cliq Meetings in my O365 calendar

                                                                                                            Hi, we are currently evaluating to replace the Teams Messaging and Meetings with Cliq. We currently still have all our email and calendars in O365. What i want to achieve is, to create a (ZOHO) meeting from Cliq and have this meeting added to my Outlook/O365
                                                                                                          • Issue with Zoho Help Portal – Tickets Missing or Not Answered

                                                                                                            Hi, How are you? I think there may be an issue with the Zoho Help Portal. I opened a few tickets directly in the help portal a some time ago but never received any response I also opened ticket 148356451 by email. I did receive a reply to it, but the
                                                                                                          • DUNS & Bradstreet and Credit risk monitoring integration with Zoho books

                                                                                                            Small businesses not being paid by bigger clients and clients of all sizes is a huge problem. It will be nice if Zoho develops integration with DUNS & Bradstreet(D&B) and Credit risk monitoring integration with Zoho books. That have small businesses can
                                                                                                          • Zoho Forms - Form Rules based on attachment fields

                                                                                                            Many businesses use forms to collect documents and images from customers. In many cases, you may want to trigger a notification or other automation based on whether or not an attachment was added. I've noticed that attachment fields do not appear in Rules
                                                                                                          • Can't open draft email for editing

                                                                                                            Last night I started composing an email and I let it save in drafts. This morning I want to continue working on the email. It is in my Drafts folder but it will not open. The only option there is to delete it. This is not the first time it has happened. On previous occasions I have just deleted the draft and started afresh, but I really want this one back. Windows 10 with Pale Moon 28.10.0 browser.
                                                                                                          • Open filtered deals from campaign

                                                                                                            Do you think a feature like this would be feasible? Say you are seeing campaign "XYZ" in CRM. The campaign has a related list of deals. If you want to see the related deals in a deal view, you should navigate to the Deals module, open the campaign filter,
                                                                                                          • Change scheduling emails time

                                                                                                            When sending an individual email there is a great feature to schedule them to send later. I could only use the one time that is suggested. Is there a way to select another time? Regards, Glenn
                                                                                                          • Zoho CRM: how can I control which contacts to sync with Outlook?

                                                                                                            I was just playing around syncing contacts from Zoho to MS Outlook (MS365 account.) The problem is our firm has hundreds of thousands of contacts and I don't want to bury my contacts list in outlook. Any help with this is greatly appreciated.
                                                                                                          • How to overcome limitations in meetings

                                                                                                            As a company, one of our deliverables is a meeting between two other companies, where we act as facilitators. So, if we recorded this meeting  in Zoho CRM, it should be connected to 2 accounts, 2 contacts, and 1 campaign (a campaign, in our use, is the
                                                                                                          • Different MRP / Pricing for same product but different batches

                                                                                                            We often face the following situations where MRP of a particular product changes on every purchase and hence we have to charge the customer accordingly. This can't be solved by Batch tracking as of now so far as I understand Zoho. How do you manage it as of now? 
                                                                                                          • Add a 'Log a Call' link to three dot icon in Canvas

                                                                                                            Hi, There's a three dot element when creating a canvas called 'More'. I would like to modify this to add a link that says 'Log a Call' in order to quickly record the details of a cellphone call. I'd also like this to be a simple 'contact' selection and
                                                                                                          • Syncing Zoho Forms with Bigin - Embedding issue?

                                                                                                            Hello everyone, I created a Zoho Form for a page on my GoDaddy website to collect leads, which then transfers the data to Bigin. However, I'm facing an issue where it doesn't seem to work properly. I've integrated Zoho Forms with Bigin and tried embedding
                                                                                                          • Can not add fields to a Section

                                                                                                            I feel like I'm missing something obvious: I can add new Sections to my form but I can not add fields to the Sections. I've tried fields already on the form as well as dragging and dropping new fields into the Section but nothing will go into it. What
                                                                                                          • Record Logged in User while using CRM lookup field

                                                                                                            Is it possible, while using the Zoho CRM lookup field, to automatically use the user account logged into Zoho CRM in a hidden field? I was hoping to add employee accounts to my current plan. But would like a record on the Form submission of who submitted
                                                                                                          • Form Rules for Suburb Categories to alternate landing pages or Making a Fields Contents ALL CAPS

                                                                                                            I need to send differentform submissions to two to three different thank-you URLs (for Meta/Google pixels) depending on which suburb a user selects in a form. I have ~400 suburbs split into two categories (A and B, based on business value). Current challenges:
                                                                                                          • Collaps Notes

                                                                                                            There are times when long/large notes are added to a record i.e. Accounts or Deals etc. Currently, the full note is displayed in the notes related list section. It would be great if by default only 5 to 10 rows of the note are displayed when the note
                                                                                                          • Zoho Down

                                                                                                            I have a drop in my Zoho One services.
                                                                                                          • Runing RPA Agents on Headless Windows 11 Machines

                                                                                                            Has anyone tried this? Anything to be aware of regarding screen resolution?
                                                                                                          • Problem for EU users connecting Zoho CRM through Google Ads for Enhanced conversions

                                                                                                            Has anyone else experienced this problem when trying to connect Zoho CRM through Google Ads interface to setup enhanced conversions? Did you guys get it fixed somehow? The Problem: The current Google Ads integration is hardcoded to use Zoho's US authentication
                                                                                                          • Why am I getting event Pop-up Notification for events that have been cancelled?

                                                                                                            Why is Calendar Notification still popping up for events that have been cancelled or changed? Each time events are cancelled or changed, I have observed that I am still getting notifications for them. Below is a sample pop-up notification for one of the
                                                                                                          • Create a draft in reply to an email via Emails API

                                                                                                            Hi, I’d like to use the outgoing webhook to automatically create a draft reply to incoming mail. How can I use the Emails API to create a draft reply that is linked to an existing email thread? I couldn’t find the relevant method in the documentation.
                                                                                                          • India Tech Support

                                                                                                            Is there no phone tech support number for India? And no chat facility either?
                                                                                                          • Billing Management: #1 Billing a Universal Business Routine

                                                                                                            Hello, As the saying goes, "Do the hardest job first." We started with the complex subject of finance and revenue management, which is considered the backbone of any business. Now, let's shift our focus and take a deep dive into this Billing Management,
                                                                                                          • What is a a valid JavaScript Domain URI when creating a client-based application using the Zoho API console?

                                                                                                            No idea what this is. Can't see what it is explained anywhere.
                                                                                                          • 5名限定 課題解決型ワークショップイベント Zoho ワークアウト開催のお知らせ (9/25)

                                                                                                            ユーザーの皆さま、こんにちは。Zoho ユーザーコミュニティチームの藤澤です。 9月開催のZoho ワークアウトについてお知らせします。 今回はZoomにて、オンライン開催します。 諸事情につき、今月の開催回は中止となりました。 次回は10/31(金)14時からの開催を予定しています。 ━━━━━━━━━━━━━━━━━━━━━━━━ Zoho ワークアウトとは? Zoho ユーザー同士で交流しながら、サービスに関する疑問や不明点の解消を目的とした「Zoho ワークアウト」を開催します。 Zoho
                                                                                                          • need a packing list feature

                                                                                                            In our business, goods listed on an invoice are packed in separate boxes and shipped off. for e.g. an invoice may have 10 items. each item could then be packed in different boxes depending on qty of each item. this packing list is as important as the invoice for purposes of shipping documents.  Request you to add this feature asap.
                                                                                                          • Workdrive 5.0 / API Documentation Workflows

                                                                                                            Hi Zoho, When will the API documentation of the workflows be published? We are interested in using it to trigger manual workflows from an external application. Greetings, Justin
                                                                                                          • Zoho Error: This Operation has been restricted. Please contact support-as@zohocorp.com for further details

                                                                                                            Hello There, l tried to verify my domain (florindagoreti.com.br) and its shows this error: This Operation has been restricted. Please contact support-as@zohocorp.com for further details. Screenshot Given Below -  please check what went wrong. Thanks
                                                                                                          • How many ZOHO-Sites does the ZOHO-One Suite allow for?

                                                                                                            The free version of ZOHO-Sites allows for two sites, but it seems that the professional version (which is included in the ZOHO-One Suite) only allows for two websites. Is that correct? How many sites can I have within one ZOHO-One account?
                                                                                                          • Webhook from Zobot to Zoho Flow fails

                                                                                                            I'm trying to connect from zobot to zoho flow. When testing in zflow, I am receiving all entered data from the connector correctly. The SalesIQ connector's "outputreaction" is {} (is this normal or is there a problem?). But as soon as I try my chat bot
                                                                                                          • Next Page