Automation#19:Auto-Close Tickets Upon Task Completion

Automation#19:Auto-Close Tickets Upon Task Completion



Hello Everyone!
We’re excited to bring you another custom function this week. In this edition, we’ll show you how to automatically close tickets when all associated tasks are marked as completed.

Let’s see how ZylkaPure, a leading water filter company, benefits from this functionality. ZylkaPure specializes in installing and servicing water filters for homes and offices. When a customer books a service, a ticket is created, and the specific tasks required for the service are added to it. As service engineers carry out the necessary work, they update the status of each task. Once all tasks are marked as completed, the system automatically closes the ticket, ensuring a streamlined process and reducing manual follow-ups.

Implementing this custom function in your portal can automate ticket closure and simplify your workflow. Follow these steps to set up the automation in your system.

Prerequisites
1. Create a connection
      1.1 Go to Setup and choose Connections under Developer Space.
      1.2 Click Create Connection.
      1.3 Select Zoho Desk under Default Services.
      1.4 Give the connection name as closeticketbytask.
      1.5 Under Scope, choose the below scope values:
            Desk.activities.READ
            Desk.activities.tasks.READ
            Desk.tickets.UPDATE
      1.6 Click Create and Connect.
      1.7 Click Connect and click Accept.
Connection is created successfully.


Create a Workflow Rule
1. Go to Setup, choose Workflows under Automation.
2. Under Workflows, click Rules >> Create Rule.
 
In the Basic Information section,
3. Select Tasks from the drop-down menu under Module.
4. Enter a Rule Name and Description for the rule.
5. If you want to activate the rule right away, select the Active checkbox. Else, create the rule and activate it later.
6. Click Next.
 
In the Execute on section, follow these steps:
7. Select Field Update and select the field Status to execute this rule every time the task status is updated.  
8. Click Next.
 
In the Criteria section
9. Specify the criteria as Status is Completed, AND Completed Time is not empty.

10. In the Actions section, click the + icon and select New next to Custom Functions.
11. Enter a Name and Description for the custom function.        
12. Under Argument Mapping, give a desired Method Name. Map the arguments as below: 
 12.1 In the Argument Name field, type taskId and from the Value drop-down list, select Task Id under Task Section.
 12.2 In the Argument Name field, type associatedTicketId, and from the Value drop-down list, select Ticket Id under Tasks Section.                                                    
13. In the script window, insert the Custom Function given below:
  1. // ----<<<< User Inputs >>>>----
  2. // --- Replace ".com" with appropriate domain based on your DC
  3. deskURL = "https://desk.zoho.in";
  4. // --- Enter a status name to indicate the 'completed' status of a task ---
  5. taskCompletedStatusName = "Completed";
  6. taskCanceledStatusName = "Canceled";
  7. // --- Enter the name of the custom status to be updated in the Ticket after the completion of all the associated Tasks ---
  8. statusNameToUpdateInTicket = "Closed";
  9. // ----<<<< Initial Configs >>>>----
  10. logs = Map();
  11. logs.insert("taskId":taskId,"associatedTicketId":associatedTicketId);
  12. tasksListToProcess = List();
  13. shallUpdateTicketStatus = false;
  14. //---------------------------
  15. try
  16. {
  17.  // ---- Check to find the Task and Ticket association ----
  18. isTicketAssociatedWithThisTask = !isNull(associatedTicketId) && !isEmpty(associatedTicketId);
  19.  if(isTicketAssociatedWithThisTask)
  20.  {
  21.   // --- Get the list of all tasks associated with this ticket ---
  22.   getTasksListApiParam = Map();
  23. getTasksListApiParam.insert("from":0,"limit":100,"isSpam":false,"sortBy":"createdTime");
  24.   logs.insert("getTasksListApiParam":getTasksListApiParam);
  25.   getTasksListApiResponse = invokeurl
  26.   [
  27.   url :deskURL + "/api/v1/tickets/" + associatedTicketId + "/tasks"
  28.   type :GET
  29.   parameters:getTasksListApiParam
  30.   headers:{"Content-Type":"application/json"}
  31.   connection:"closeticketbytask"
  32.   ];
  33.   logs.insert("getTasksListApiResponse":getTasksListApiResponse);
  34.   isValidToProcess_getTasksListApiResponse = !isNull(getTasksListApiResponse) && !isEmpty(getTasksListApiResponse) && getTasksListApiResponse.size() > 0 && getTasksListApiResponse.containsKey("data");
  35. logs.insert("isValidToProcess_getTasksListApiResponse":isValidToProcess_getTasksListApiResponse);
  36.   if(isValidToProcess_getTasksListApiResponse)
  37.   {
  38.   tasksListToProcess = getTasksListApiResponse.get("data");
  39.   }
  40.  }
  41. logs.insert("isTicketAssociatedWithThisTask":isTicketAssociatedWithThisTask,"tasksListToProcess_size":tasksListToProcess.size());
  42.  if(tasksListToProcess.size() > 0)
  43.  {
  44.   // --- Check to ensure that all tasks are completed or not ---
  45.   for each  currentTaskDetail in tasksListToProcess
  46.   {
  47.   currentTaskStatusName = currentTaskDetail.get("status");
  48.   currentTaskCompletedTime = currentTaskDetail.get("completedTime");
  49. if((currentTaskStatusName == taskCompletedStatusName || currentTaskStatusName == taskCanceledStatusName) && !isNull(currentTaskCompletedTime))
  50.   {
  51.   shallUpdateTicketStatus = true;
  52.   }
  53.   else
  54.   {
  55.   logs.insert("notCompletedTaskId":currentTaskDetail.get("id"));
  56.   shallUpdateTicketStatus = false;
  57.   break;
  58.   }
  59.   }
  60.  }
  61.  logs.insert("shallUpdateTicketStatus":shallUpdateTicketStatus);
  62.  if(shallUpdateTicketStatus)
  63.  {
  64.   // --- Update status field to the associated ticket ---
  65.   ticketUpdateApiParam = Map();
  66.   ticketUpdateApiParam.insert("status":statusNameToUpdateInTicket);
  67.   logs.insert("ticketUpdateApiParam":ticketUpdateApiParam);
  68.   ticketUpdateApiResponse = invokeurl
  69.   [
  70.   url :deskURL + "/api/v1/tickets/" + associatedTicketId
  71.   type :PATCH
  72.   parameters:ticketUpdateApiParam.toString()
  73.   headers:{"Content-Type":"application/json"}
  74.   connection:"closeticketbytask"
  75.   ];
  76.   logs.insert("ticketUpdateApiResponse":ticketUpdateApiResponse);
  77.  }
  78. }
  79. catch (errorInfo)
  80. {
  81.  logs.insert("errorInfo":errorInfo);
  82. }
  83. info "logs: \n" + logs;
  84. if(logs.containKey("errorInfo"))
  85. {
  86.  ths "Error happen in the CF execution";
  87. }
NOTE
a. In Line 3, Replace ".com" with appropriate domain extension based on your Data Center.

In case you have a custom name for the task status or ticket status, you can make suitable changes in the following lines:
b. Line 7 ==> Enter a status name to indicate the 'completed' status of a task
c. Line 9 ==> Enter the name of the status you want to be updated in the Ticket after the completion of all the associated Tasks
14. Click Save to save the custom function.
15. Click Save again to save the workflow.

We trust this solution will streamline your workflow! Stay tuned for more fresh insights and tips to help you make the most of Zoho Desk and optimize your experience.




      • Sticky Posts

      • Register for Zoho Desk Beta Community

        With the start of the year, we have decided to take a small step in making the life of our customers a little easier. We now have easy access to all our upcoming features and a faster way to request for beta access. We open betas for some of our features
      • Share your Zoho Desk story with us!

        Tell us how you use Zoho Desk for your business and inspire others with your story. Be it a simple workflow rule that helps you navigate complex processes or a macro that saves your team a lot of time; share it here and help the community learn and grow with shared knowledge. 
      • Tip #1: Learn to pick the right channels

        Mail, live chat, telephony, social media, web forms—there are so many support channels out there. Trying to pick the right channels to offer your customers can get pretty confusing. Emails are most useful when the customer wants to put things on record. However, escalated or complicated issues should not be resolved over email because it's slow and impersonal.  When you need immediate responses, live chat is more suitable. It's also quick and convenient, so it's the go-to channel for small issues. 
      • Welcome to Zoho Desk Community - Say hello here!

        Hello everyone! Though we have been here for a while, it’s time to formally establish the Zoho Desk Community; we’re really happy to have you all here! This can be the place where you take a moment to introduce yourself to the rest of the community. We’d love to hear all about you, what you do, what company or industry you work for, how you use Zoho Desk and anything else that you will like to share! Here’s a little about me. I am Chinmayee. I have been associated with Zoho since 2014. I joined here
      • Webinar 1: Blueprint for Customer Service

        With the launch of a host of new features in Zoho Desk, we thought it’ll be great to have a few webinars to help our customers make the most of them. We’re starting off with our most talked about feature, Blueprint in Zoho Desk. You can register for the Blueprint webinar here: The webinar will be delivered by our in-house product experts. This is a good opportunity to ask questions to our experts and understand how Blueprint can help you automate your service processes. We look forward to seeing

        • Recent Topics

        • Adding Multiple Files to a Zoho Vault Entry

          There is a old blog post talking about adding multiple file attachments to one Zoho Vault Secret: https://www.zoho.com/blog/vault/introducing-new-features-in-zoho-vault-powerful-password-sharing-wider-storing.html Is that still possible, I can see how
        • FNB South Africa Bank Feed

          I should've thought this wouldn't work. As suspect, Zoho claims to be able to pull bank feeds from First National Bank (South Africa), but fails everytime. I suppose Xero (or even Sage One) is the way to go? If they (miraculously) get it to work again,
        • Dropshipping Address - Does Not Show on Invoice Correctly

          When a dropshipping address is used for a customer, the correct ship-to address does not seem to show on the Invoice. It shows correctly on the Sales Order, Shipment Order, and Package, just not the Invoice. This is a problem, because the company being
        • Zoho unreliable

          Some mails are delivered, others not. How can I trust Zoho any more? Some friends get my e-mail, some don't. Same with receiving e-mails: Some I get, some not. If I use Google, everything works well. But Zoho?!!! How to solve this problem? I already reported this problem before, but didn't get any reply. Thanks, Kim
        • the custom domain forwards by default to the old career site / how to switch it off??

          dear friends, how to switch off the old version of the career site?? The set up custom domain forwards directly to the old site, so that I cant publish it... Any ideas? Thank you! KR, Victoria
        • Preserve Ticket Issue Mapping When Migrating from Jira to Zoho Projects

          Hello Zoho Projects Team, We hope you are doing well. We are currently exploring a full migration from Jira to Zoho Projects, and we identified a critical limitation during the migration process involving Zoho Desk integration. Current Situation: We use
        • Recording Shopify/Amazon fees in Zoho Books - Zoho Inventory

          We are currently flushing out the connections between Shopify/Amazon and Zoho Inventory. For other users of Zoho Books - Zoho Inventory, where and at what point do you record the merchant fees associated with theses channels? I have gotten mixed responses
        • Pre-fill webforms in Recruit

          I don't want to use the career site portal (as I have my own already), but I would like to direct users to the application forms for each role, from my website job pages. Is there a way to pre-fill fields in Recruit application forms, so that I only have
        • Taxes Payable Adjustment

          I am from Canada and I need to make an adjustment to my Taxes Payable (HST) account.  Basically I need to take a portion of the amount within Taxes Payable and expense that portion to another account.  The adjusting entry would like like the following:
        • ASAP Widget Not showing "My Tickets"ed

          Hello Team, I have created a ZOHO ASAP Widget and embedded to my portal app.clearvuiq.com , widget renders ok and I can open tickets from widget. However I want my opened tickets to be visible in the widget. How can I achieve that?
        • Bug Causing Major Sync & SO Access Failures in Zoho POS

          We are experiencing critical and recurring issues in Zoho POS that all trace back to role-permission handling defects in the latest POS app version. These issues directly affect syncing, login ability, and Sales Order access for role-restricted users
        • How to view CRM Sales Orders in Desk

          What's the usual way to view all CRM sales orders linked to a contact, when viewing a ticket in Desk? I don't want to have to open a new tab to see the order in CRM. And the Desk CRM sidebar doesn't seem to be configurable. Would I have to use an extension
        • Kaizen #219: Actions API - Webhooks APIs - Part 1

          Hello all!! Welcome back to a fresh Kaizen week. In the previous weeks, we covered Workflow Rules APIs, Actions APIs - Email Notification APIs, Tasks Update API, and Field Update API. This week, we will continue with another Actions API - Webhooks API
        • Pricing Strategies: #3 Services never Stop with just Plans

          "Hey, while you're here, could you also take a look at the vegetable patch?" Aaron hears that line almost every week. He runs a small gardening service, the kind where customers subscribe to a simple monthly plan that includes basic maintenance, mowing,
        • Cropping Photos for Zoho Sites

          Hi, I'm wondering if there is a built in crop tool for zoho sites for my photos so I can crop them and see what the crop looks like on the site?
        • bulk edit records and run internal logic

          hi there is few logics in manner "it this than that" logics work well when i edit entry openning it one by one (via workflow "on add/edit - on success" , for custom field "on update/on user input") but when i try bulk edit records - logic does not work.  how can i turn on logic to work as programmed - for mass editing records via bulk edit?
        • Possible for first Signer of Sign Form to specify the next signer in the sequence

          We have many use cases where multiple signers need sign the same document. We'd love to be able to use sign forms, where the a signer who uses the Sign Form link can specify the name and email address for the next person in the sequence.
        • BUG: Can't copy-paste data outside Sheet

          Currently I can't paste data copied from inside any of my Zoho Sheet files to any other app. Copy-paste works inside the sheet It does NOT work between two different sheets These sheets are built from automation templates Everything works fine if I create
        • Zoho CRM Community Digest - November 2025 | Part 1

          Hello Everyone! Here’s what came through in the first half of November: new updates and a few helpful community discussions with real, notable solutions. Product Updates: Android App Update: Inctroducing Swipe Actions You can now swipe left or right on
        • Upload own Background Image and set Camera to 16:9

          Hi, in all known online meeting tools, I can set up a background image reflecting our corporate design. This doesn't work in Cliq. Additionally, Cliq detects our cameras as 4:3, showing black bars on the right and left sides during the meeting. Where
        • Truesync for Linux

          Is Truesync available on linux ?
        • Hidding/excluding specific picklist options from filter

          Hi. Is it possible to hide/exclude specific picklist options from this filter? I don't want them to be shown when someone tries to filter in the leads module
        • Subforms to Capture Multi-Row Data in Job Sheets

          Subforms transform your job sheets from simple checklists to powerful, data-rich forms. In field service work — whether maintenance, inspection, installation, or repair — a single job can involve multiple repeatable entries: readings, parts used, activities
        • Add "Fetch Composite Item" Action for Inventory

          I want to make a Flow that uses information returned in the GET call for Composite Items, and it's not currently available in Zoho Flow. Please consider adding this functionality.
        • Adress Labels for sending of the oder und barcode

          We want to print with my address labels to stick on the order of the ware can. there are these options?
        • printing individual labels - Dymo LabelWriter

          I am trying to print individual labels to my Dymo LabelWriter - has anyone done this? Latest Update (December 2025): The Canvas Print View is now available! We encourage you all to try it out and share your feedback with us. Learn more here: Zoho CRM
        • Zoho Creator for Agriculture

          Greetings, I am starting to work on  Zoho Creator specifically for the agricultural field, any recommendations, tips or ideas that might be helpful ? Also, if you are interested by any means in working on such project, kindly contact me. The project is
        • Custom Print Layout

          I would like to create a custom print layout of a Lead or Contact. Is there a way to do that? What I mean is that if I'm viewing a specific lead or contact I'd like to be able to print or export that lead/contact and only print and/or export certain information.
        • Print View

          Nothing happens when I'm in a module , ie; Contacts, and I hit the Print View Button. Even when it does come up and say "loading", nothing loads
        • Get Holiday ready with Zoho Mail's Offline mode

          With the holiday season right around the corner, this is the perfect time to get ready to unplug, relax, and enjoy a well-deserved break. In addition to preparing yourself, you can also make sure your organization members are set for their time away from
        • Solution to Import PST File into Office 365.

          MailsDaddy OST to Office 365 Migration Tool is an outstanding solution to recover OST files and migrate them into Office 365 without any hassle. Using this software users can multiple OST files into Office 365 with complete data security. It offers users
        • Zoho CRM Kiosk issues

          Firstly this is for a system on the AU servers if that makes a difference. Issues are as follows (For Kiosk): 1. Re-ordering fields in the screen builder is broken. The fields seem to be re-ordering themselves, unless you order everything by moving the
        • Email Template Edits Not Saving

          I can make an edit, click save, and see the blue bar annimation at the top, but the edits don't actually save. Important, because my email templates are now broken and clients are receiving bad emails. Tried on Chrome, Firefox and IE.
        • Default Ticket View - Table?

          Guys, We mostly use the table view to queue tickets. Maybe I am missing it - but how can I set that view as 'default" for all our agents? Thanks JV
        • Can I have different users see different pick list values for Potential Stage?

          We have some users focusing on new business and others focusing on existing business, and they follow different sales processes/cycles, so we would like them to see different pick list values for Stage (eventually leading up to Closed Won/Lost in both cases).   And just to keep it interesting - some of these users will of course do a combination, so would need to see one pick list for their New business potentials and a different pick list for their Existing business ones.   Salesforce does this
        • Tracking Snippet not working in Zoho Marketing Automation!

          First off, the fact that you have to wait about 12-24 hours for every response is terrible. How are we supposed to conduct business? Second, we have been trying for several days to get the Tracking Code Snippet in marketing automation to work, to no avail.
        • Is there any way to send an Excel received by email to Dataprep?

          Every day I receive an email alert with an Excel file that I want to process through a Dataprep pipeline. To do this, I need to: -Save the file to disk -Open the pipeline -Run the pipeline -Update the source -Several clicks to select and open the saved
        • Read webpage - MSXML2.ServerXMLHTTP

          I have the following VBA script, put together from various sources (mainly zoho forum/help/support, so it once worked, I guess): private Sub GetListOfSheets() Dim url As String Dim xmlhttp As Object Dim parameters As String Dim html As String range("B1").value
        • Zoho Creator Form Search

          I'm new to Zoho Creator and so far i do like it but im shocked there seems to be no easy way to add a search function and/or navigation to there forms as this readily available in every platform i have used in the past. Anyway i have a form which i have
        • How to setup DKIM / SPF in Zoho Mail

          Hello there! I'm having a hard time understanding how to setup the TXT records for SPF and DKIM with Zoho Mail. I'm following the instructions here: https://www.zoho.com/campaigns/help/setup-spf-dkim.html Specifically, when it comes to the value for the
        • Next Page