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

        • Insurance Agencies

          I am reaching out to see if anyone has any experience in the Insurance Agency world with using Zoho exclusively for the CRM and commissions side of things. Lots of strong features like drip campaigns, meeting, calendars, emails, can all be found in here.
        • Problem with Egyptian internet ISP

          Dears,  We have problem with our ADSL internet SP, That your site not working with. So, we contact them and they asking us to contact you to solve this problem.  The problem that when we are connecting to Tedata ADSL your website not working (Business Email).  BR,, Mohamed Omar 
        • Mail Not Showing In Inbox or Sent Box

          Hi, there are mails that are not displaying in both my inbox and sent box. I just tried the iPad app and it is the same but there is a blank field where a mail should be and it refers to a server error. Please fix this.
        • Marketing Automation List Entry Criteria is no longer an option

          For a couple of years now we have used the "List Entry Criteria" option to filter our Journey recipient list. All of a suddent the option no longer exists for New Lists and I can only delete the option from existing lists but can no longer edit it. Anyone
        • GCLID arrives not in CRM with iframe integrated ZOHO Form

          Hello amazing community, I enabled Adwords integration in ZOHO CRM. I have a ZOHO Form integrated in a wordpress. I tested iframe and Javascript. I enabled the "handover" GCLID in the ZOHO Form. When I add a GLID with http://www.example.com/?gclid=TeSter-123.
        • Bidirectional sync between Zoho Bookings and Zoho CRM - Part 1

          Hey, community members! The default integration between Zoho CRM and Zoho Bookings is unidirectional, which means that any appointments booked, rescheduled, or deleted in Zoho Bookings will be reflected in Zoho CRM. However, any modifications made to
        • Is it possible to edit placeholder text?

          In the master slides I want to make sure my templates have more meaning for the users and want to replace the standard placeholder text with something more instructional. Instead of "Click to edit Mast subtitle styles" I want to have "Click to enter reporting
        • How to allow download of a file AFTER information is collected?

          I can't find this anywhere. Can someone help with what seems to be a pretty basic web function today? - File is stored in Workdrive - Prospect goes to a URL where the file is located - System requests prospect to enter "Name" and "Email" - An email is
        • Add Baseline methods to API

          There are no API methods for creating or querying baselines,  Use case: Customer is notified of the current project start date according to plan via another product/integration. We would like to auto create a baseline (Automated via API) at the point
        • Fixed Assets beg balance

          Hello, I trust you are well I'm a new zoho books user and I find it difficult to plug in the fixed assets balance and here's what I have done: 1- I imported the fixed assets data into the fixed assets module as per the instructions 2- the import process
        • CRM Deluge how can link attach file with workdrive file.

          Hi, We have create file at workdrive and would like to link to attachment at crm module by deluge. Right now can only upload it to attachment but can not link the file from workdrive. Thank you
        • Feature announcement: AI-powered document generator in Zoho Sign

          Hi there! We recently announced manual document creation by offering an editor within Zoho Sign. Today, we are excited to announce AI-powered document generation to help you draft agreements, purchase orders, and other important business documents in
        • Permanently deleted files

          Is there a way to get back permanently deleted files from your account if they were accidentally deleted and no longer recoverable from the recycling bin? I know I am probably screwed but I just figured I would ask.
        • Shared Mailbox in iOS app

          Hi, On the desktop I am using a Shared mailbox for our company's general mailbox that somebody else should be able to view. In the iOS app however I can't find it? Old sources on the internet says this isn't possible but that can't be right? Somebody
        • Tip #41- Simplify Compliance and Efficiency with Zoho Assist’s Data Cleanup Feature- 'Insider Insights'

          Managing device data efficiently is just as important as securing remote access. With Zoho Assist’s Data Cleanup feature, admins can easily remove outdated or unnecessary device records, keeping the console organized and secure. This action is carried
        • Revenue Management: #6 Revenue Recognition in Professional Services Industry

          If you run a consulting firm, agency, or any service-based business, you have a situation where you have signed the contract, maybe even sent the invoice, and have received some initial payments. So, can you consider this as revenue? What if the project
        • Zoho fsm scheduled maintenance dispatch

          Hi, I'm reaching out regarding an issue I'm encountering with the Scheduled Maintenance feature in Zoho FSM. I’m trying to configure it so that it automatically dispatches all maintenance jobs scheduled within the next 150 days, starting from today. However,
        • zoho.inventory.getRecords returns no records

          I running a custom function (Deluge) in Zoho Flow with a connection to Zoho Inventory. To debug the problem, I created the test function below. It returns "Number of contacts fetched: 0". This confirms that there's no issue with the org ID or connection
        • Feature announcement - Simplifying document creation with Zoho Sign

          Hi there, We are pleased to announce the release of our document creation feature, enabling you to create, edit, and finalize documents like agreements, purchase orders, and contracts without relying on external tools or applications. &lt;br&gt; This
        • Integrating File Attachments in Zoho Flow Email Notifications

          Hi, I would like to be able to send an email once an entry is made in a form, and in this email, I would like to attach a file that has been added to the form using the ImageUpload (or FileUpload) widget. So, I started by creating a flow that will trigger
        • Zoho project purchases

          Hi Folks, I think having a purchase module in projects will help in putting together a project p and L. Project wise purchases and expenses.  Do let me know your thoughts.
        • How can I restore all the deleted Time entries of a Task in Zoho Projects

          How can I restore all the deleted Time entries of a Task in Zoho Projects? Query: In Zoho Projects, I cloned a task and deleted the time entries from the cloned task. However, this also deleted the time entries from the original task. How can I restore
        • Is there a way to make an account inactive in ZoHo Desk

          We have a few Clients "Accounts" that we no longer do business with. It would be beneficial for them to not show up in lists. However, we want to go back and view tickets, time, etc.
        • How to set the value of the Phone field importing contacts in Zoho Desk

          Hi everyone, i'm new in Zoho Desk, we're setting up the environment and i'm importing contacts from another CRM using a file CSV and i'm getting a problem with phone numbers (italian): the leading zero is cut away, also if the value is inside double quotes.
        • How to center a field inside a section?

          I’ve been trying to center a field inside a section in Zoho Canvas. When I align it visually, it looks centered in the editor, but after clicking Save, the field appears misaligned on the actual canvas. I also tried setting the field to full width, but
        • Kaizen #192 - Implementing Custom Token Persistence in Python SDK

          Welcome back to another week of Kaizen! Last week, we discussed how to implement Login with Zoho using OAuth 2.0 and saw how to bring it to life in a real-world application with the Zoho CRM Python SDK. We also discussed how Zylker Academy built a custom
        • Showing the map along with mileage expense

          When you use the GPS to track mileage, it shows you the map of the actual path travelled. It would be very useful and practical to save that map with the mileage expense, so that when the report is created, it provides a map of each mileage expense associated
        • Enable Validation Rule for Multi-Select Picklist Field

          Zoho, Please allow validation rules for multi-select fields.
        • File Upload field not showing in workflow

          Hi, I have added a field on Zoho CRM. I want to use it in a workflow where that particular field is updated based on another field, however it is not showing up in the field list to select it in the workflow. Why is this please?
        • CRM Custom function updating a module record shows the Super Admin user as the record modifier

          Dear Zoho CRM Team, Is there any way to update this so that when a custom function has updated a record the Super Admin user doesn't become the modifier? This happens on the record as a modifier and shows up in the audit logs. It would be more useful
        • Best way to fetch employee names from Zoho People into Zoho Creator Inventory Stock Form field Employee Name Lookup

          Hi Team, I have a requirement in my Zoho Creator application (Inventory Stock Adjustment) where I need to fetch employee names from Zoho People and use them as a lookup in a form. Currently, I am considering using an integration field to fetch this data
        • get file api is returning Junk data

          I am working on extension development where at one point I need to retrieve attachments on records I found out I can use only invokeconnection and not invokeurl in extension development The invoke connection returns the image in raw binary format. When
        • Need help with message box

          End user updates many records at once. Each have unique serial number. They want a confirmation box that says starting number, ending number and qty. Is there any way to do this? I been searching and asking support but seems like no great solution.
        • [Webinar] The Transformative Power of Gen BI

          Traditional decision-making tools are no longer enough. The integration of generative AI into business intelligence (BI) is proving to be a true game changer—enabling businesses to make faster, smarter, and better informed decisions. Early adopters of
        • Backorder process review - Automating Removal of Sales Order from "On Hold" When PO is Received

          Hello Zoho Inventory Team, Currently, sales orders in On Hold status are released only when the bill for the purchase order is created. In our workflow, it would be much more efficient if the sales order could automatically move out of On Hold as soon
        • How to access the saved Query using API?

          I have created a query in setting. Is it possible to access it from a API? What's the endpoint? I tried /v8/queries/important_deals but didnt' work.
        • création d'une base de données

          base de donnee d'un lycée
        • User Session variables to recall after form submit & redirect to menu

          Hey, Forgive me if this is a simple answer I have overlooked. I have built a big onboarding process for my SAAS platform which is built and managed by an external Dev team. I am hoping to embed my new creator app on the SAAS platform. I have a menu page
        • Zoho Writer Merge Template with data from Zoho Analytics Views

          Hello, Is there any way to pull information from Zoho Analytics and put it into a Merge Template? I am trying to create a bulk export of one report that filters on a field to create a single document for each of the filter fields.
        • Having to enter bill before stock shows as available.

          Hi, Am I right in thinking you must create a bill from the purchase order receipt before the goods are available for shipping?
        • Next Page