Automation #13 - Auto assign tickets based on agent shift time

Automation #13 - Auto assign tickets based on agent shift time



This is a monthly series designed to help you get the best out of Desk. We take our cue from what's being discussed or asked about the most in our community. Then we find the right use cases that specifically highlight solutions, ideas and tips to optimize your customer support with the automation capabilities of Zoho Desk.
 
Business working in shifts need to adopt a different dynamic for customer support. For a seamless flow of tickets from one agent to another, it is important to avoid unnecessary delays that make angry customers. A simple two-step automation in Desk will let you ensure your incoming tickets are assigned to agents in the current shift. Giving your customer support teams to work in better co-ordination.
 
To achieve this first the ticket needs to be moved into the unassigned bucket. Then we use a custom function to achieve a round robin mechanism without load balancing to assign these tickets in the current shift.

As always, the first step to making the most of ZohoDesk's automation capabilities is to create a connection to be used in the custom function later. 


To create a  connection, carry out the following steps:
  1. Click on Setup > Developer Space > Connections 

  2. Click Create Connection

  3. In the Pick Your Service section, under Pre-Defined Services find and select Zoho Desk.

  4. In the Connection Details section, add zohodesk as the Connection Name and Connection LinkName

  5. In the Choose Scopes list, select all values that start with 'Desk.' and end with '.ALL' and then include Desk.search.READ, Desk.products.READ
  6. Click Create and Connect
  7. In the page that appears, click Connect
Now move the tickets to the unassigned bucket, by follow these steps:
  1. Go to Setup, and under Automation, click Workflows.
  2. On the left panel, under Workflows, click Rules > Create Rule.
    In the Basic Information section, carry out the following steps:
  3. In the Module drop-down menu, select Tickets.

  4. Enter a name and description for the rule.
  5. If you want to activate the rule right away, select the Active checkbox. Else, you can just create the rule now and activate it later, on the Rules page.

  6. Click Next.
    In the Execute on section, perform the following steps:
  7. Select the Create checkbox to execute this rule every time a new ticket is created.  

  8. Click Next.
    In the Criteria section, do not select any criteria and move to the next section.
    In the Actions section, carry out the following steps:
  9. Click the + icon and select Custom Functions > New
  10. Click Edit Arguments

  11. In the Name field type TicketID, and from the Value drop-down list select Ticket Id under Ticket Information.
    In the script window, input the Custom Function you find below:
    orgId = "paste orgId here";
    contactId = "paste contact ID here";
    TicketInfo = zoho.desk.getRecordById(orgId, "tickets", TicketID,"zohodesk");
    departmentId = TicketInfo.get("departmentId");
    agentId = TicketInfo.get("assigneeId");
    Param = Map();
    Param.put("departmentId", departmentId);
    Param.put("limit", "20");
    onlineagents = invokeurl
    [
    url: "
    https://desk.zoho.com/api/v1/onlineAgents?"
    type: GET
    parameters: Param
    connection:"zohodesk"
    ];
    if (onlineagents.notContains(agentId))
    {
    info zoho.desk.update(orgId, "tickets", TicketID,{"assigneeId":null},"zohodesk");

Note: navigate to Setup > Developer Space > API > get orgId and replace in custom function.



To achieve the round robin automation without load balancing, follow these steps:


Pre-requisite:
  1. In the Contacts Layout, create two fields:
    1. Add a multi-line field and name it as Agent List
    2. Add a single-line field and name it Next Agent
  2. For the values, collect and save all the agentIds in the Agent List and the First Agent in the Next Agent Field. Please note that the Agent List should be a comma separated values. 
To create the workflow rule, perform the following steps:
  1. Go to Setup, and under Automation, click Workflows.
  2. On the left panel, under Workflows, click Rules > Create Rule.
    In the Basic Information section, carry out the following steps:
  3. In the Module drop-down menu, select Tickets.
  4. Enter a name and description for the rule.
  5. If you want to activate the rule right away, select the Active checkbox. Else, you can just create the rule now and activate it later, on the Rules page.
  6. Click Next.
    In the Execute on section, perform the following steps:
  7. Select the Create checkbox to execute this rule every time a new ticket is created. 
  8. Click Next.
    In the Criteria section, do not select any criteria and move to the next section.
    In the Actions section, carry out the following steps:
  9. Click the + icon and select Custom Functions > New
  10. Click Edit Arguments
  11. In the Name field type TicketID, and from the Value drop-down list select Ticket Id under Ticket Information.
  12. In the script window, input the Custom Function you find below: 
orgId = "paste orgId here";
contactId = "paste contact ID here";
TicketInfo = zoho.desk.getRecordById(orgId, "tickets", TicketID,"zohodesk");
departmentId = TicketInfo.get("departmentId");
agentId = TicketInfo.get("assigneeId");
Param = Map();
Param.put("departmentId", departmentId);
Param.put("limit", "20");
checkAvail = invokeurl
[
url :"https://desk.zoho.com/api/v1/onlineAgents?departmentId=" + departmentId + "&include=mailStatus,phoneStatus,chatStatus,phoneMode,presenceStatus"
type :GET
connection:"zohodesk"
];
if (!checkAvail.toString().contains(agentId.toString()))
{
stopLoop = "false";
contactInfo = zoho.desk.getRecordById(orgId,"contacts",contactId);
allAgents = contactInfo.getJSON("cf").getJSON("cf_agent_list").toList();

elist = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14"};
for each  agent in elist
{
contactInfo = zoho.desk.getRecordById(orgId,"contacts",contactId,"zohodesk");
nextAgent = contactInfo.getJSON("cf").getJSON("cf_next_agent").toLong();
if(checkAvail.toString().contains(nextAgent.toString()) && stopLoop == "false")
{
assignTicket = zoho.desk.update(orgId,"tickets",TicketID,{"assigneeId":allAgents.get(allAgents.indexOf(nextAgent))},"zohodesk");
if(allAgents.indexOf(nextAgent).toLong() < allAgents.size().toLong() - 1)
{
updateContact = zoho.desk.update(orgId,"contacts",contactId,{"cf":{"cf_next_agent":allAgents.get(allAgents.indexOf(nextAgent) + 1)}},"zohodesk");
}
else
{
updateContact = zoho.desk.update(orgId,"contacts",contactId,{"cf":{"cf_next_agent":allAgents.get("0")}},"zohodesk");
}
stopLoop = "true";
}
else if(stopLoop == "false")
{
if(allAgents.indexOf(nextAgent).toLong() < allAgents.size().toLong() - 1)
{
updateContact = zoho.desk.update(orgId,"contacts",contactId,{"cf":{"cf_next_agent":allAgents.get(allAgents.indexOf(nextAgent) + 1)}},"zohodesk");
}
else
{
updateContact = zoho.desk.update(orgId,"contacts",contactId,{"cf":{"cf_next_agent":allAgents.get("0")}},"zohodesk");
}
}
}
}
Note: navigate to Setup > Developer Space > API > to get orgId and replace it in the custom function.
 



    • 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

    Nederlandse Hulpbronnen


      • Recent Topics

      • Darshan Hiranandani : How many participants can join a Zoho Meeting at once?

        Hi everyone, I'm Darshan Hiranandani, trying to find out the maximum number of participants that can join a Zoho Meeting at once. Has anyone here used Zoho Meeting for larger groups and can share their experience or knowledge about the participant limit?
      • Ask The Expert: Deep Dive into Zoho CRM, Desk, SalesIQ, and Campaigns!

        Are you using Zoho to power your sales, support, and marketing, and have questions about configuration, automation, or best practices? We have great news: the “Ask The Expert” session is coming to the Zoho Benelux Community! This session is specifically
      • How to create a new Batch and update Stock via Inventory?

        Hi everyone, We are building an automation where a user enters batch details (Batch Number, Mfg Date, Expiry, and Quantity) into a Custom Module. I need this to trigger an API call to Zoho Inventory to: Create the new batch for the item. Increase the
      • Zoho books Inventory valuation report VS Stock GL value

        At one client, we track inventory using composite (bundled) items, and in the system settings we have enabled the option to prevent stock from going below zero. After the year-end physical count and quantity adjustments, we identified a mismatch: Inventory
      • Zoho Zoom extension for CRM

        When meetings are booked through Zoho using the Zoom extension, the Zoom link in the invite is a host start link that contains an expiring ZAK token. The invite should instead use a standard attendee join link or a non-expiring host link - why is this
      • Stereo audio

        L.S. Is stereo audio supported in Zoho Meetings? I would like to conduct music lessons with Meetings, but the audio needs to be good (if not great!) and stereo, and not too much compressed and such.
      • Zoho Surveys

        Dear Zoho Support Team, I hope this message finds you well. I am writing to inquire about the availability and documentation for the Zoho Survey API. Background: I am currently working on a project that requires programmatic access to survey data and
      • Zoho FSM API Delete Record

        Hi FSM Team, It would be great if you could delete a record via API. Thank you,
      • Writing SQL Queries - After Comma Auto Suggesting Column

        When writing SQL Queries, does anyone else get super annoyed that after you type a comma and try to return to a new line it is automatically suggest a new column, so hitting return just inputs this suggested column instead of going to a new line? Anyone
      • New Enhancements to Zoho CRM and Zoho Creator Integration

        Hello Everyone, We’ve rolled out enhancements to the Zoho Creator and Zoho CRM integration to align with recent updates made to the Zoho Creator platform. With enhancements to both the UI and functionality, This update also tightens access control by
      • Desk API that can search Merged Tickets

        Is there any method that can still search a ticket that was already merged? zoho.desk.searchRecords - doesn't explicitly mention
      • Issue with "Send Email" from Quotes not loading Email Template data

        Hi everyone, I'm currently experiencing an issue when using the "Send Email" option from a Quote record in Zoho CRM. What’s happening: When I go to the Quotes module and select a record, then click Send Email, the attached file (Quote) correctly pulls
      • Suggestions for Improved Table Management and Dashboard Filter Controls in Zoho Analytics

        Dear Zoho Analytics Community, I hope you are doing well. I would like to share a few suggestions based on issues I am currently experiencing while working with visualizations and dashboards. Firstly, when I create a new visualization using the Sales-Order
      • Zoho Projects and CRM Integration in Analytics

        Hi Team, In Zoho CRM, I’ve integrated CRM with Zoho Projects and associated a project within the CRM. The integration is visible under the Deals module. However, I’m unable to find this data in Zoho Analytics. Does anyone know where this information is
      • Cursor lands on disabled fields when tabbing through forms

        As of yesterday, form behavior has changed w/ regard to disabled fields. Previously when tabbing through a form the cursor would skip over disable fields (as would typically be desired). But now the cursor is landing on all disabled fields, in all of
      • Permission query

        we have two permission settings i.e 'user permission ' & 'portal user permission' and both have the same setting that we enable for our users, Now those who have access to user permission can see a button on the pivot table, "regenerate" but those who
      • Zoho Forms sheet prefil

        I've been using zoho sheet prefill for a week and it was working perfectly, as soon as i deleted the particular sheet and replaced it with another one no matter what I do it cant find the record and i get this message. Could you please assist me to resolve
      • "Create Deal" button should default to the currently selected layout/pipeline

        When viewing Deals in Kanban or List view with a specific layout and pipeline selected, clicking "Create Deal" should default to that same layout — not the profile's default layout. Currently it always opens the default layout regardless of context, requiring
      • Zoho mail admin panel not opening

      • Canvas: is it possible to have a fixed header?

        Hello. Does Canvas provide the option to have a fixed header, similar to the standard view? It would also be interesting for other parts of the interface, like the header or sidebar of the tab section. Thanks!
      • Removing Related Modules Lookup Fields Assignment / Relationship

        Issue: When creating a related list, I accidently selected module itself creating a circle reference. See attached. Situation: I wish to relating a custom module called "Phone Calls" to Leads and Contacts. Outcome: 1) I either want to remove the this
      • Zoho LandingPage pricing update: Essentials plan is now fully free!

        Hello Everyone, We have updated the Zoho LandingPage pricing structure. The Essentials plan, previously priced at $9 per month for 1,000 visitors, is now fully free, and the visitor limit has been increased to 5,000. With this change, users can start
      • ZOHO.CRM.UI.Record.open not working properly

        I have a Zoho CRM Widget and in it I have a block where it will open the blocks Meeting like below block.addEventListener("click", () => { ZOHO.CRM.UI.Record.open({ Entity: "Events", RecordID: meeting.id }).catch(err => { console.error("Open record failed:",
      • Zoho Survey – Page Skip Logic Not Working

        Hi everyone, I'm experiencing an issue with the page skip logic in Zoho Survey. Last week, it was working fine, and I haven’t changed anything in the settings. However, today the skip logic is not working at all. I also tried testing it with different
      • Automatically create an Delivery Challan basis a Sales Order.

        Hi, I wanted to know if there is a possibility to automatically populate a Delivery Challan basis a Sales Order. Is it possible to do this with custom functions? If yes, how? 
      • Zoho Form URL displays incorrect name

        Hi, I have a form I created called "Design Request form". It displays this way everywhere I look. However, in the URL, it shows up as "DesignJobRequestFormFINAL011325PROOFV1B" and I'm not sure why. I can't find where to fix this. Does anyone have any
      • Introducing Radio Buttons and Numeric Range Sliders in Zoho CRM

        Release update: 1. 2 March 2026: Currently out for CN, JP, AU and CA DCs (Free and standard editions). For other DCs, this will be released by mid-March. 2. 26 March 2026: CA, SA, AU, JP, CN DCs - Free, Standard, Professional, Enterprise, Ultimate, CRM
      • Finding rhythm through poetry

        Poetry has long been a powerful form of expression, discovery, and reflection. For many, it is a way to pen down their thoughts and experiences. The "poetic license" allows writers to shape their words with rhythm and flow. This year, on World Poetry
      • Zoho Desk Ticket SLA Level

        Hello, we have 2 levels of SLA escalation for our Tickets. Is there a way to display on the ticket information the level of SLA escalation the ticket currently on? I am aware that we can see in the ticket history the level of escalation that has been
      • Allow Font Size 11 in Editors...

        That is basic functionality...
      • 【まだ間に合う!】Zoho ユーザー交流会 | AI活用・CRM・Analytics の事例を聞いて、ユーザー同士で交流しよう!

        ユーザーの皆さま、こんにちは。コミュニティチームの藤澤です。 3月27日(金)に東京、新橋で開催する「東京 Zoho ユーザー交流会 NEXUS」へのお申し込みがまだの方は、この機会にぜひお申し込みください!(参加無料) ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー イベントの詳細はこちらから▷▷ https://www.zohomeetups.com/tokyo2026vol1#/?affl=communityforumpost3 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
      • Where is the scheduled report in New UI?

        Hi Team, Seems there is not such a field in New UI, hence I have to switch to old UI to handle request..
      • Building a Simple Raspberry Pi + Keypad IoT PoC with Zoho Flow

        I want to share a simple IoT PoC I recently built that connects a Raspberry Pi to Zoho Flow and Zoho Creator. The goal was to send PIN input data from a hardware keypad to Zoho and trigger a servo and buzzer for visual/audible feedback. This can serve
      • What's New in Zoho Billing | January 2026

        Excited about the latest enhancements in Zoho Billing? Our January updates bring an intelligent AI assistant, smarter subscription management, and improved tax compliance, saving you time and reducing manual work. Dive into the details below to see how
      • Is there a way to sell in a practical method multiple subscriptions of the same product? i.e. domain names

        In evaluating Zoho Billing, a hurdle to adopting it is that Zoho Billing does not seem designed to support businesses that sell multiple subscriptions of the same product. In our case, we need to sell and manage several domain names per client. Am I right
      • Update P_Leave: code: 7052 "Employee_ID": "Enter Employee ID"

        Hi, Zoho People - Update Leaves Can someone assist? ------------------------------------------------------------------------------------------ col = Collection(); col.insert("recordid":id); col.insert("Date_Check_Approval":zoho.currentdate); info zoho.people.update("P_Leave",col.toMap());
      • Can't change form's original name in URL

        Hi all, I have been duplicating + editing forms for jobs regarding the same department to maintain formatting + styling. The issue I've not run into is because I've duplicated it from an existing form, the URL doesn't seem to want to update with the new
      • Can't rename groups on Mac desktop app

        I'm working on an up-to-date Mac with a freshly downloaded Notebook app. I'm trying to rename a group within a notebook. Here I have, left to right, a note, a group, and a note. I select the group. On the top left, I select Action. On the dropdown, "Rename"
      • Strange behavior in CRM Number Field – Characters allowed but not "e"?

        Hi everyone, Has anyone faced this strange issue in Zoho CRM? In a Number field, it is possible to type some characters, but the character "e" cannot be entered. This was really surprising to me. Normally, a number field should restrict all characters
      • Best Way to Manage Approvals Within Blueprint Stages?

        Hi, I am working on a requirement involving Blueprint and approval logic in Zoho CRM and would appreciate some guidance. I understand that approval processes do not trigger when a record is currently within a blueprint, which makes it challenging to implement
      • Next Page