Round robin ticket assignment | Community
Skip to main content

Round robin ticket assignment

  • December 10, 2013
  • 111 replies
  • 0 views

Show first post

111 replies

  • December 15, 2017

@Michael: If I got this right, this can only be used with Ticket Forms, the submitter must choose 1 between  4 types, right ? It could not be used with email, am I correct?

Thank you ?


  • December 20, 2017

Hey Kien!

If I understand this tip correctly, the app assigned tickets out based on ticket tags. Based on that, and this quote from the tip: "You can use this script with other tags as well, it does not need to be used with Forms in particular. However, these tags must be applied to the ticket once it is created in order for the script to run properly" it looks like you can use this app for any ticket, regardless of the channel, as long as a tag is applied upon ticket creation (you can do this with Triggers).

Let us know how it goes!


  • December 20, 2017

Ya, tags are just there for flexibility.  You could do something similar to how chat works for example and have tags that represent skills based routing, or product based routing...  Our primary use case is around unassigned ticket aging to improve our initial response time and consistency.  We have an automation that applies a tag to every unassigned ticket that ages beyond a certain number of hours.  We set the trigger in the Google script to run hourly, so in the next hourly sweep every "new" ticket with that applied tag will be assigned based on the agents, availability, and tag considerations populated in the associated Google sheet.  There is no dependency on ticket source (aka channel, aka via).


  • December 20, 2017

Thanks for jumping in with some suggestions, Rob!


  • March 19, 2018

Thanks for the very nice job. I was able to get Rob Baker's version working.
A few tips:
- in getSortedAgents(): the OFFSET should be 1, not 2 (header row has index 0)
- in fetchOpenTickets(): adapt the query JSON to adapt (or remove) the tags-filtering (tags:...) when searching for tickets to assign
- the ticket matching works differently than in the original version: Baker's version matches hardcoded tags rather than tags per sheet column. Make sure to check ticketTagsMatchAgentTags().
- in logTicket() I added two lines to make sure that the loggin sheet doesn't continue to grow indefinitely
const logRowsToKeep = 100; //just after the isDebugMode test
...
logSheet.deleteRow(logRowsToKeep); //add the end of the function
- coding could be optimized, as I see for instance column indexes and column names being re-used in several methods (could be out-factored to configuration). When working with more than 3 tag levels (none/any agent, ace agents, veteran agents), like in the original version, the columns could use some re-ordering too.


  • March 19, 2018

And two more tips:
- make sure that the 'working hours' column is filled with text values.
  When entering eg 7-17, Google Sheets may interpret it as a date value (numeric).
  Enter the value with single quote prefix to make it text (i.e. '7-17).
- bookmark the search-query, so you can execute it manually to see if it finds any tickets


  • March 19, 2018

Thanks Tim for that helpful feedback!  This is a work in progress for us so I want to add some color and context.

First, the original version of the script published publicly and referenced by Michael's post on Nov 29th can be found here.  https://github.com/grnhse/zdr/blob/4ce1b37c0f66f8b17d8dea58692e1d8480f690dd/zendeskMakeAssignments.gs

The problem we ran in to and which Michael and I exchanged a few emails on, was the shift coverage.  Essentially we wanted agents to be active/inactive based on their assigned shift with an override allowed if they were ooo, underwater, etc.  We added shifts in this version which is also our current production version:  https://github.com/grnhse/zdr/blob/d17bedbb505222f0179f0897b711c1db8186838a/zendeskMakeAssignments.gs

Tim is correct in that the addition of the shifts in the rightmost column breaks being able to add more tags.  This was not a concern in the near term for us because we are only using one tag.  But for others this could pose a problem for things like skills-based-routing implementations of the round robin ticket assignment.  

 

 


  • March 19, 2018

Also, the latest version of the script can be found at https://github.com/grnhse/zdr/blob/master/zendeskMakeAssignments.gs and will always have the latest work in progress.  This includes the version that Tim is commenting on above at https://github.com/grnhse/zdr/blob/36bd940007ddfd2d9fac2e15ee54c68dee37de31/zendeskMakeAssignments.gs with the following feature updates in progress:

1) checking the number of current open tickets for each agent and not allowing push-based assignment over a specified limit

2) a weighting methodology to a) favor ticket assignments for agents not on active chat shifts and b) assign based on agents that have the fewest open tickets first.

In its current implementation state this does not come without some drawbacks.  For instance, it is a great deal less predictable who will get the next ticket (the queue marker has been disabled and the order does not go top-down), the max does not seem to be enforced on each iteration assigning outstanding tickets, and the additional column used to track the number of open tickets per agent needs to be refreshed with a different trigger if is it going to be used by a shift manager or anyone else eyeballing the sheet to keep it up to date in between passes of the assignment script itself.

Hopefully this provides some additional insight in to things, and I will be sure to pass Tim's feedback to the Dev team that I handed the script off to.  Thanks for your continued interest, use, and feedback!

 


  • March 19, 2018

Thanks for the update and links, Rob and reminding us all on the context.
If you permit me, I'll try a Git pull-request to fetch the latest code and interact more directly with your developers.
In general, I think the code should distinguish more between skill/tag-based, load-based and shift/availability-based assigning.

In v2AssignTickets(), I added 

if(!isReadonly()) {
setAssignedTicketsPerAgent();
}

just before the for-loop, to make sure the nb of tickets per agent is up-to-date (before the decision is made to which agent a new ticket is assigned).

The setAssignedTicketsPerAgent() inside the for-loop should update just the affected agent (agent to which a ticket was assigned), in order to save on the number of API calls (when iterating through many tickets).


  • April 20, 2018

@Michael, Thanks for the tip. 

It worked a few times and now throws an error saying "Maximum execution time exceeded".

Can you please help with this?

Thanks.


  • April 27, 2018

 

One note on something that tripped me up - changing the column name in the spreadsheet doesn't work - you need to click the little purple triangle to change the actual header to a valid tag or form.


  • May 2, 2018

Thanks for pointing that out, Neil!


  • May 8, 2018

Hi Everyone!

This script is awesome, and I really need to use it, but I can't get it to work. :(

UPDATE - Got it to work, now I just need to check which version to use. :)

Thanks everyone for your awesome work.


Nicole17
  • May 9, 2018

Glad to hear you got it working, Bruno!


Hi there,

We would like to integrate this function to our ticketing system and after we tried Round Robin app for Zendesk, we thought that the best option for us is to create our own script instead of using an app.

Then I found this solution that sounds perfect for what we need as long as we can customize the functions to make it work with our system as we demand.

Please, can anyone confirm the differences between the app in Marketplace and this code?

is there any improvement on it or a big difference between them?

Thanks in advance to everyone! :)

 


Jiri12
  • June 10, 2018

Hi Support, we are forced to stop using the round robin app as it is not GDPR compliant. My question is if there is some similar app (i tried to find some but without success) or if we can use the google script for the exact same purpose as the app? Many thanks

Jiri


Hi Jiri,

What makes this non GDPR compliant?


  • June 14, 2018

Hi Jiri!

I'd like to echo Christopher's question. Can you please go into some detail about what is causing your concern with this app?


Jiri12
  • June 18, 2018

Please see https://roundrobin.zendesk.com/hc/en-us/articles/115002537125-Security-and-privacy for details

It says:

Is Round Robin compliant with EU General Data Protection Regulation (GDPR)?

No. So you need check your data processed by Round Robin for personal data of EU data subjects and stop use Round Robin to process such kind of data after May 25 2018.


  • June 19, 2018

Thanks for the link, Jiri!

Unfortunately I don't know of any other existing apps or workarounds for this. I'm afraid you'll need to come up with a custom solution.


  • July 16, 2018

I'm having an issue getting this one to run.  Anyone I can reach out to for help?


Serge14
  • July 23, 2018

Hey Jack,

I'll be glad to help you.

Please contact me at support@roundrobin.zendesk.com


  • July 23, 2018

thanks it was actually for the google docs script that I needed help

 


  • October 22, 2018

What if you only have 1 (The default) form? I always get invalid form type..


  • November 1, 2018

Hi Tim!

Can you provide more information about when and where this error is appearing? The more detail you can provide, the more likely someone will be able to help you find the solution to your issue. Feel free to use screenshots!