Understanding how omnichannel routing uses queues to route work to agents

<body>
<p id="docs-hc-snippet" style="display: none;">Omnichannel routing assigns new and open tickets fromemail (including web form, side conversations, and API), calls, and messaging directly to agents based on agent availability and capacity and, on some plans, can be configured to also factor in service level agreement (SLA) targets, ticket priority, and skills.</p>
<div class="article-banners">
<div id="docs-wmp-link">
<a href="https://support.zendesk.com/hc/en-us/articles/5411234991258-plan" rel="noopener" target="_blank">What's my plan?</a>
</div>

<div class="article-banner" id="suite_pee">
<table>
<tbody>
<tr>
<td>
<strong>All Suites</strong>
</td>
<td>Professional, Enterprise, or Enterprise Plus</td>
</tr>
</tbody>
</table>
</div>

<div class="article-banner" id="support_pe">
<table>
<tbody>
<tr>
<td>
<strong>Support</strong>
</td>
<td>Professional or Enterprise</td>
</tr>
</tbody>
</table>
</div>

</div>
<div id="docs-ai-summary">
<p id="docs-ai-summary-toggle">Verified AI summary <span id="up-triangle">◀</span><span id="down-triangle">▼</span></p>
<p id="docs-ai-summary-content">Omnichannel routing uses queues to direct tickets from various channels to agents based on availability, capacity, and other factors like SLA targets. You can use standard or custom queues to manage ticket distribution. Custom queues allow routing to multiple groups and prioritize tickets by criteria such as priority or SLA breach time, ensuring effective ticket management and assignment.</p>
</div>

<div class="body">

<p class="p">Omnichannel routing assigns new and open tickets from <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4409149119514#topic_psx_hxk_3yb" target="_blank">email (including web form, side conversations, and
API)</a>, calls, and messaging directly to agents based on agent availability and
capacity and, on some plans, can be configured to also factor in service level agreement
(SLA) targets, ticket priority, and skills.</p>
<p class="p">The standard omnichannel routing configuration directs all eligible tickets into a single
queue, assigning work to agents based on the ticket's assigned group. If a single queue
is insufficient for your use case, you can create additional custom omnichannel routing
queues. You must have the <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4408821259930" target="_blank">Agent Workspace</a> to use omnichannel routing.</p>
<div class="p">This article contains the following topics:<ul class="ul" id="topic_i1q_4pz_31c__ul_vqj_3m3_j1c">
<li class="li"><a class="xref" href="#topic_n1k_wsh_j1c">Essential facts about omnichannel routing queues</a></li>
<li class="li"><a class="xref" href="#topic_acc_qf4_j1c">Using custom queues with omnichannel routing</a></li>
<li class="li"><a class="xref" href="#topic_nr3_ppk_3jc">Using predictive routing in queues</a></li>
<li class="li"><a class="xref" href="#topic_ns2_rf4_j1c">Understanding how omnichannel routing orders tickets within queues</a></li>
</ul>
</div>
</div>
<div aria-labelledby="ariaid-title2" class="topic nested1" id="topic_n1k_wsh_j1c">
<h2 class="title topictitle2" id="ariaid-title2">Essential facts about omnichannel routing queues</h2>
<div class="body">
<div class="p">Using multiple queues can be a valuable aspect of your omnichannel routing
configuration. However, it's important to understand how queues work before
implementing them. Keep the following essential facts about queues in mind:<ul class="ul" id="topic_n1k_wsh_j1c__ul_qjd_1th_j1c">
<li class="li">The <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4828787357210" target="_blank">omnichannel routing configuration</a>
settings apply to all of your queues.</li>
<li class="li">When a new ticket is created, ticket triggers fire first. Then omnichannel
routing immediately attempts to assign it to an agent. If no agent is
available to take it, the ticket is added to the appropriate queue.</li>
<li class="li">There are two types of queues in omnichannel routing:<ul class="ul" id="topic_n1k_wsh_j1c__ul_pvp_2gd_mbc">
<li class="li">
<strong class="ph b">Standard omnichannel routing queue</strong>: This is the default queue
used by omnichannel routing when you <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/5866925319962" target="_blank">turn on omnichannel
routing</a> and haven't created custom queues or when tickets
don't meet the conditions of your custom queues but are otherwise
eligible to be routed by omnichannel routing. Sometimes this is
referred to as <em class="ph i">group-based omnichannel routing</em> because
tickets routed through the standard queue go to agents in the group
specified in the ticket's group field. The standard queue isn't
listed on the Queues page in Admin Center.</li>
<li class="li">
<strong class="ph b">Custom omnichannel routing queues</strong>: (Professional plans and
above for Zendesk Suite, Support, Talk, and Chat plans) These are
custom queues defined by admins. When using custom queues, tickets
are inserted into the first queue they match the conditions for.
Custom queues can route tickets to multiple primary and secondary
groups. If a ticket is routed through a custom queue, omnichannel
routing ignores the ticket's group field and uses the queue's
primary and secondary groups.<ul class="ul" id="topic_n1k_wsh_j1c__ul_vzf_dcm_r2c">
<li class="li">
<strong class="ph b">Subqueues</strong>: (Enterprise plans only) Custom queues can
be split into up to five subqueues to distribute certain
percentages of tickets that meet the custom queue's
conditions to different primary and secondary groups. The
percentages for subqueues must total 100%. Which subqueue
any given ticket is inserted into is randomized.</li>
</ul>
</li>
</ul>
</li>
<li class="li">The auto-routing tag isn't used by custom queues. Regardless of the presence
of the auto-routing tag, all email tickets, messaging conversations, and
calls are automatically evaluated for matches to custom queues. However,
email tickets that don't match any custom queues must have the auto-routing
tag if you want them to be routed through the standard omnichannel routing
queue.</li>
<li class="li">Tickets are re-evaluated against queue conditions every time a ticket is
updated, so queue assignment can change as the ticket changes.
</li>
<li class="li">Omnichannel routing matches tickets to queues in the order the queues appear
on the Queues page. Tickets are added to the first queue they meet the
conditions for.</li>
<li class="li">Tickets that don't match the conditions for any of your custom queues are
inserted into the standard omnichannel routing queue. However, omnichannel
routing prioritizes all tickets routed through custom queues over those
routed through the standard omnichannel routing queue, regardless of the
ticket's priority.</li>
<li class="li">The way your order tickets, whether by priority and timestamp or time to SLA
breach, applies to both the standard omnichannel routing queue and custom
queues.</li>
<li class="li">When an agent is eligible to receive work from multiple queues, tickets from
the queue with the higher priority are assigned before tickets from a queue
with a lower priority. See <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/6716530152858" target="_blank">Creating custom omnichannel routing
queues</a>. </li>
<li class="li">After a ticket has been assigned to an agent, it leaves the queue. </li>
<li class="li">AI-based predictive routing can be turned on for any queues or subqueues.
However, it is only applied to messaging tickets currently. See <a class="xref" href="#topic_nr3_ppk_3jc">Using predictive routing in queues</a>.</li>
<li class="li">Call tickets can’t be reassigned by omnichannel routing. Email and messaging
tickets can be reassigned, but your routing configuration determines whether
reassignments occur through custom queues or the standard queue.<ul class="ul" id="topic_n1k_wsh_j1c__ul_t1z_sgz_rcc">
<li class="li">On Team and Growth plans, tickets can't re-enter a custom queue
after being assigned to an agent. However, if a ticket becomes
eligible for re-routing, it's inserted into the standard omnichannel
routing queue based on its routing-eligibility timestamp and routed
based on the ticket's assigned group.</li>
<li class="li">On Professional plans and above, you can configure omnichannel
routing to <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4828787357210#topic_g4r_x1z_rcc" target="_blank">reassign tickets through custom
queues</a>. When configured, tickets that are reassigned back
to a group after being assigned to an agent are inserted into the
first matching queue. If the ticket doesn't meet the conditions for
any custom queues, it's inserted into the standard omnichannel
routing queue and routed based on the ticket's assigned group.</li>
</ul>
</li>
<li class="li">When the <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/8009788438042" target="_blank">messaging session ends</a> for a
messaging ticket, if the ticket's routing channel is <em class="ph i">messaging</em>, it
isn't eligible to be routed by omnichannel routing. However, if the routing
channel is changed to <em class="ph i">email</em>, the ticket remains eligible for
routing.</li>
<li class="li">You can report on the performance of your custom queues in Explore. See
<a class="xref" href="https://support.zendesk.com/hc/en-us/articles/7217081202714" target="_blank">Explore recipe: Reporting on custom
omnichannel queue performance</a>.</li>
</ul>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title3" class="topic nested1" id="topic_acc_qf4_j1c">
<h2 class="title topictitle2" id="ariaid-title3">Using custom queues with omnichannel routing</h2>
<div class="body">
<p class="p">Omnichannel routing is Zendesk's most sophisticated and complete routing solution. It
provides consistent routing logic across channels and considers many factors when
assigning work to agents. For many use cases, the single, standard omnichannel
routing queue that's activated when you turn on omnichannel routing is sufficient.
When relying on the standard omnichannel routing queue, tickets must be assigned to
a group to be routed to an agent with omnichannel routing, and email tickets must
have the auto-routing tag. Think of this as <em class="ph i">group-based omnichannel routing</em>. </p>
<p class="p">In some cases, it's not realistic or desirable to have your tickets routed to the
single group assigned to the ticket. Creating custom queues allows you to route work
to multiple groups based on the queue the tickets are assigned to. Multiple queues
also give you the option to define secondary or "overflow" groups that receive
tickets through a queue only if all agents in the primary groups are unavailable.
When you assign multiple primary and secondary groups to a queue, omnichannel
routing treats all primary groups as a single pool of agents, and when necessary,
expands it to include all agents in the secondary groups as well.
When you use <em class="ph i">queue-based routing</em>, omnichannel
routing uses the queue's primary and secondary groups to assign the ticket to an
agent, ignoring any group that might be specified on the ticket itself. </p>
<p class="p">For more information, see <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/6716530152858" target="_blank">Creating additional omnichannel routing queues</a>.</p>
</div>
</div>
<div aria-labelledby="ariaid-title4" class="topic nested1" id="topic_nr3_ppk_3jc">
<h2 class="title topictitle2" id="ariaid-title4">Using predictive routing in queues</h2>
<div class="body">
<div class="p">Predictive routing is an AI-based routing approach that works with your existing
routing configuration and queues to improve the way you route messaging tickets by
predicting which agent will have the lowest handling time. The AI model is trained
on your account's historical dataand combines that with A/B testing data to
calculate the predictions. Specifically, the AI model is based on three categories
of data:<ul class="ul" id="topic_nr3_ppk_3jc__ul_bln_wqn_3jc">
<li class="li">
<strong class="ph b">Ticket data</strong>: Tickets are evaluated for their intents.</li>
<li class="li">
<strong class="ph b">Agent data</strong>: For each intent, the model continuously tracks statistics
on how each agent has historically performed including metrics such as their
mean handling time, ticket count and more. </li>
<li class="li">
<strong class="ph b">Account data</strong>: Similar ticket and agent data aggregated across the
whole account, which serves as a baseline for the model.</li>
</ul>
</div>
<p class="p">When using predictive routing, your existing routing configuration rules remain the
primary guidelines for routing logic and are always respected. Tickets are evaluated
against your routing configuration first and then predictive routing is used to
assign work to the eligible agent who is predicted to solve the work most
rapidly.</p>
<p class="p">Predictive routing is off by default. If you're ready to start using predictive
routing right away, you can update your queues to turn on this option.
Alternatively, if you'd like to test it out and see how it performs before relying
on it completely, you can use subqueues to <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/6716530152858#topic_br3_crk_3jc" target="_blank">evaluate predictive routing</a> relative to
non-predictive routing over a period of time and then <a class="xref" href="#topic_smz_xqn_3jc">measure</a> its success.</p>
</div>
<div aria-labelledby="ariaid-title5" class="topic nested2" id="topic_srd_ttn_3jc">
<h3 class="title topictitle3" id="ariaid-title5">Considerations and limitations of predictive routing</h3>
<div class="body">
<div class="p">Consider the following essential facts and limitations of predictive routing:<ul class="ul" id="topic_srd_ttn_3jc__ul_c2j_wtn_3jc">
<li class="li">Predictive routing is available to all plans with access to custom
queues. </li>
<li class="li">No add-ons are required to leverage this AI feature.</li>
<li class="li">Predictive routing is currently supported for messaging tickets
only.</li>
<li class="li">Predictive routing relies on historical data to train the model.
Depending on your ticket volume, it can take anywhere from a couple
weeks to a month for new accounts to produce enough data to really see
the benefit of predictive routing.</li>
<li class="li">When new agents are added, predictive routing initially assumes they
will perform as an average agent until the model has sufficient
performance data for the individual agents.</li>
<li class="li">Protections are in place to ensure high-performing agents don't get
overloaded. These include omnichannel routing's existing capacity limits
and a <em class="ph i">workpile policy</em>, which means the model is designed to pick
the agent who would complete their currently assigned tickets plus the
new one the fastest.</li>
<li class="li"> When measuring an agent's engagement time, only public comments by
agents are counted. Internal notes added to tickets are ignored by this
metric.</li>
</ul>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title6" class="topic nested2" id="topic_smz_xqn_3jc">
<h3 class="title topictitle3" id="ariaid-title6">Measuring the success of predictive routing</h3>
<div class="body">
<p class="p">Using predictive routing in your queues can significantly increase your routing
efficiency and reduce ticket handling time at scale. After you turn on
predictive routing, you can use the <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/9757103543194" target="_blank">ticket progress real-time dashboard</a> in
Explore to monitor performance. Specifically, the <em class="ph i">agent engagement time</em>
metric tracks the total time an agent is reading and responding to end user
messages. The time is measured from the moment the ticket is assigned to an
agent until the ticket is closed, but only counts the intervals of time between
the end user's last message and the agent's public comments. Internal notes,
sometimes called <em class="ph i">private comments</em>, aren't considered The time it takes
for the end user to reply to the agent's messages is excluded from this metric,
as is the time of the end user sending multiple messages in a row. The following
diagram shows an example ticket where the green arrows labeled <em class="ph i">agent
engagement time</em> indicate the periods of time within the ticket's
lifecycle that are counted towards this metric as compared to the red arrow
labeled <em class="ph i">agent handle time</em>, which measures the total time it took for a
ticket to be closed after it was assigned to an agent:</p>
<p class="p"><img class="image" id="topic_smz_xqn_3jc__image_pd2_s5k_3jc" src="https://zen-marketing-documentation.s3.amazonaws.com/docs/en/omnichannel_routing_predictive_routing_metric.png" width="500"></p>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title7" class="topic nested1" id="topic_ns2_rf4_j1c">
<h2 class="title topictitle2" id="ariaid-title7">Understanding how omnichannel routing orders tickets within queues</h2>
<div class="body">
<p class="p">As soon as a ticket is eligible for routing, omnichannel routing attempts to assign
it to an eligible and available agent. When using the standard queue, ticket
triggers automatically run when a ticket is created or updated. Then, omnichannel
routing attempts to assign the ticket to an available agent in the ticket's group.
If no agents in the group are available, the ticket is inserted into the queue. When
using custom queues, ticket triggers automatically run when a ticket is created or
updated, then omnichannel routing matches the ticket to a queue and attempts to
assign it immediately to an agent in the queue's primary or secondary groups; if no
agents in any of the queue's groups are available, the ticket is inserted into the
queue. If a ticket doesn't match the conditions for any custom queues but has an
assigned group, omnichannel routing attempts to assign the ticket to an available
agent in the ticket's group and, if no agent in the group is available, inserts the
ticket into the standard queue.</p>
<p class="p">When tickets are inserted into a queue, there are two ways you can configure
omnichannel routing to insert and order tickets within queues: ticket priority and
timestamp or time to SLA breach. The standard configuration uses the time at which a
ticket becomes eligible for routing and, on Professional plans and above, the
ticket's priority.</p>
</div>
<div aria-labelledby="ariaid-title8" class="topic nested2" id="topic_ktj_345_fdc">
<h3 class="title topictitle3" id="ariaid-title8">Ordering tickets by priority and timestamp</h3>
<div class="body">
<div class="p">In the standard omnichannel routing configuration, there are four characteristics
of a ticket that omnichannel routing tracks to determine its place within a
queue:<ul class="ul" id="topic_ktj_345_fdc__ul_tyb_f44_j1c">
<li class="li"><a class="xref" href="#id_s3g_bn4_j1c">Ticket eligibility for routing</a></li>
<li class="li"><a class="xref" href="#topic_qjf_gyz_31c">Routing eligibility timestamps</a></li>
<li class="li"><a class="xref" href="#topic_zdg_d44_j1c">Routing ineligibility time</a></li>
<li class="li">
<a class="xref" href="#topic_ppf_w55_fdc">Ticket priority</a>
(Professional plans and above)</li>
</ul>
</div>
</div>
<div aria-labelledby="ariaid-title9" class="topic nested3" id="id_s3g_bn4_j1c">
<h4 class="title topictitle4" id="ariaid-title9">Ticket eligibility for routing</h4>
<div class="body">
<p class="p">Ticket
eligibility for routing by omnichannel routing depends on whether the
tickets are entering the standard queue or custom queues.</p>
<div class="p">For tickets to be eligible to enter the <em class="ph i">standard omnichannel routing
queue</em>, including tickets that don't match the conditions for any of
your custom queues, the following must be true:<ul class="ul" id="id_s3g_bn4_j1c__ul_vfv_v3x_zcc">
<li class="li">Assigned to a group</li>
<li class="li">In a status or status category of New or Open</li>
<li class="li">Unassigned</li>
<li class="li">(<a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4409149119514#topic_psx_hxk_3yb" target="_blank">Email tickets</a> only) Has
the auto-routing tag</li>
</ul>
</div>
<div class="p">For tickets to be eligible to enter a <em class="ph i">custom omnichannel routing
queue</em>, the following must be true:<ul class="ul" id="id_s3g_bn4_j1c__ul_qq1_cjx_zcc">
<li class="li">In a status or status category of New or Open</li>
<li class="li">Unassigned</li>
</ul>
</div>
<div class="p">Conversely, if any of the following conditions are true, a ticket isn't
eligible for routing by omnichannel routing in either the standard queue or
custom queues:<ul class="ul" id="id_s3g_bn4_j1c__ul_chr_hxg_j1c">
<li class="li">The ticket isn't assigned to a group and doesn't match a custom
queue.</li>
<li class="li">The ticket is assigned to an agent.</li>
<li class="li">The ticket has a status (or status category) of Pending, On Hold, or
Solved.</li>
<li class="li">The ticket's messaging session has ended and the routing channel is
<em class="ph i">messaging</em>.</li>
<li class="li">The ticket has been soft deleted.</li>
<li class="li">(Email tickets and the standard queue only) The ticket doesn't have
the auto-routing tag.</li>
</ul>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title10" class="topic nested3" id="topic_qjf_gyz_31c">
<h4 class="title topictitle4" id="ariaid-title10">Routing eligibility timestamps</h4>
<div class="body">
<div class="p">There are plenty of scenarios when tickets will change back and forth between
<a class="xref" href="#id_s3g_bn4_j1c">eligible</a> and
ineligible for routing with omnichannel routing. That means omnichannel
routing needs to track two types of routing eligibility timestamps: initial
and subsequent. <ul class="ul" id="topic_qjf_gyz_31c__ul_gcb_t11_j1c">
<li class="li">The <em class="ph i">initial eligible for routing</em> timestamp is when a ticket
becomes eligible for routing through omnichannel routing for the
first time.</li>
<li class="li">A <em class="ph i">subsequent eligible for routing</em> timestamp is when a ticket
becomes eligible again for routing through omnichannel routing after
having already been eligible and ineligible previously.</li>
</ul>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title11" class="topic nested3" id="topic_zdg_d44_j1c">
<h4 class="title topictitle4" id="ariaid-title11">Routing ineligibility time</h4>
<div class="body">
<p class="p">Omnichannel routing tracks the time tickets spend being ineligible for
routing and uses this to determine which routing timestamp to use when
inserting a ticket back into the routing queue. This is referred to as the
<em class="ph i">routing ineligibility time</em>. </p>
<div class="p">When a ticket's ineligibility for routing has never lasted 15 days or more,
the <em class="ph i">initial eligible for routing</em> timestamp determines the ticket's
place in the routing queue. However, when a ticket's ineligibility period
extends to 15 days or more, omnichannel routing uses the latest
<em class="ph i">subsequent eligible for routing</em> timestamp when inserting the
ticket back into the routing queue.<div class="note note">
<span class="notetitle">Note:</span> The switch at 15 days isn't exact.
Instead, a job runs regularly to evaluate routing ineligibility times
and determines which eligibility timestamp to use. The first time the
job completes after a ticket reaches 15 days of ineligibility,
omnichannel routing switches from using the ticket's <em class="ph i">initial eligible
for routing</em> timestamp (or previous <em class="ph i">subsequent eligible for
routing</em> timestamp) to its latest <em class="ph i">subsequent eligible for
routing</em> timestamp.</div>
</div>
<p class="p">Checking ticket ineligibility for routing prevents performance issues caused
by tracking an ever-growing number of timestamps and accounts for decreasing
priority as tickets age.</p>
</div>
</div>
<div aria-labelledby="ariaid-title12" class="topic nested3" id="topic_ppf_w55_fdc">
<h4 class="title topictitle4" id="ariaid-title12">Ticket priority</h4>
<div class="body">
<p class="p">On Professional plans and above, omnichannel routing automatically orders
tickets based on priority first and then by their routing eligibility
timestamp. This sorting method prioritizes the oldest and most important
tickets. </p>
<p class="p">However, if you use SLAs, ticket priority and age might not be the most
important metrics to use for ordering tickets within your queues.</p>
</div>
</div>
</div>
<div aria-labelledby="ariaid-title13" class="topic nested2" id="topic_bh4_g45_fdc">
<h3 class="title topictitle3" id="ariaid-title13">Ordering tickets by time to SLA breach</h3>
<div class="body">
<p class="p">Ordering tickets by time to SLA breach brings your routing logic into alignment
with your service commitments and can improve your ability to meet those
goals.</p>
<div class="p">Consider the following when ordering tickets based on SLA targets:<ul class="ul" id="topic_bh4_g45_fdc__ul_mwn_gq5_fdc">
<li class="li">The method of ticket ordering you use determines the order of tickets
within any given queue, but doesn't influence the priority of ticket
assignment across queues. If an agent can receive work from multiple
queues, tickets from the queue with the higher priority are assigned to
the agent before tickets from the lower priority queue. This is true
regardless of how soon tickets in the lower priority queue will breach
their SLA targets. Take this into consideration when creating and
ordering custom queues.</li>
<li class="li">When ordering tickets based on the time to their next SLA
breach, the setting is applied only to new and reopened tickets. Tickets
already in the queue when this setting is turned on remain ordered by
priority and timestamp as they were before.</li>
<li class="li">Ticket ordering is based on the SLA targets as they existed when the
ticket entered the queue. If SLA policies are modified before the ticket
is routed to an agent, the old SLA targets are still used for the
purposes of routing.</li>
<li class="li">When ordering tickets based on the time to their next SLA breach, all
tickets with SLA targets are ordered ahead of tickets without SLA
targets, regardless of ticket priority and timestamp. Tickets without
SLA targets are ordered based on their <a class="xref" href="#topic_ktj_345_fdc">priority and routing eligibility
timestamp</a>.</li>
</ul>
</div>
<p class="p">If you want to order tickets based on SLA targets, update your omnichannel
routing configuration to <a class="xref" href="https://support.zendesk.com/hc/en-us/articles/4828787357210#topic_qyr_nsr_fdc" target="_blank">prioritize tickets with service level
agreements</a>.</p>
</div>
</div>
<div aria-labelledby="ariaid-title14" class="topic nested2" id="topic_fg4_344_j1c">
<h3 class="title topictitle3" id="ariaid-title14">Putting it together: Ordering tickets by priority and timestamp in a queue</h3>
<div class="body">
<p class="p">The standard configuration orders and assigns tickets based on the ticket's
priority and routing eligibility time. Let's walk through a ticket's life cycle
with the standard omnichannel routing configuration:</p>
<p class="p"><img class="image" id="topic_fg4_344_j1c__image_d1q_5pr_k1c" src="https://zen-marketing-documentation.s3.amazonaws.com/docs/en/omnichannel_routing_queue_order.png" width="600"></p>
<div class="p">
<ol class="ol" id="topic_fg4_344_j1c__ol_zyk_cy1_j1c">
<li class="li">On January 1, 2024, a customer sends an email, and a ticket is created
at 08:30. </li>
<li class="li">The creation of the ticket causes the triggers to run and then
omnichannel routing to evaluate queues for the ticket.<ol class="ol" id="topic_fg4_344_j1c__ol_x5b_42r_k1c" type="a">
<li class="li">When the triggers fire, the auto-routing tag is added and the
ticket is assigned to <em class="ph i">Group 1</em>. These ticket updates occur
one minute after the ticket was created. (08:31)<p class="p">The
<em class="ph i">initial eligible for routing</em> timestamp is
2024:01:01:08:31.</p>
</li>
<li class="li">Omnichannel routing recognizes the ticket as eligible for
routing and adds it to the queue using the ticket's <em class="ph i">initial
eligible for routing</em> timestamp to determine its
order.<ul class="ul" id="topic_fg4_344_j1c__ul_w3d_ycb_j1c">
<li class="li">If all tickets in the queue have the same priority,
tickets with timestamps before 2024:01:01:08:31 will be
ahead of this ticket in the queue, and those with
timestamps after that will be behind it.</li>
<li class="li">If not all tickets have the same priority, tickets with
the highest priority are all added to the front of the
queue in timestamp order, followed by tickets with the
next highest priority in timestamp order, and so
on.</li>
</ul>
</li>
</ol>
</li>
<li class="li">When the ticket reaches the front of the queue, omnichannel routing
looks for an agent in Group 1 that is available and has spare capacity.
It finds an agent at 08:37 and assigns the ticket to them.<p class="p">The ticket
becomes ineligible for routing as soon as it's assigned to the
agent. The ticket's <em class="ph i">routing ineligibility time</em> begins at
2024:01:01:08:37.</p>
</li>
<li class="li">After three days of working on the ticket, at noon (12:00) on January 4,
2024, the agent reassigns the ticket to <em class="ph i">Group 2</em>.<p class="p">The ticket
becomes eligible for routing again because the new group assignment
removes the previous agent assigned to the ticket. Because the
ticket's <em class="ph i">routing ineligibility time</em> was less than 15 days, it
re-enters the queue and is ordered based on its initial eligible for
routing timestamp (2024:01:01:08:31).</p>
<p class="p">Assuming equal priority,
this ticket is inserted ahead of all tickets that became eligible
for routing after this ticket was initially added to the
queue.</p>
</li>
<li class="li">Omnichannel routing assigns the ticket to an agent in Group 2 a few
minutes after it's added to the queue.</li>
<li class="li">After 20 days of being assigned to the agent in Group 2, the agent
decides to reassign it to another group to which they don't belong.
(Timestamp: 2024:01:24:10:45) <p class="p">Because the ticket's <em class="ph i">routing
ineligibility time</em> exceeded 15 days, the ticket is placed in
the queue based on its priority and latest <em class="ph i">subsequent eligible
for routing</em> timestamp of 2024:01:24:10:45. Tickets of equal
or greater priority that became eligible for routing prior to
January 24, 2024, at 10:45 am and haven't had an ineligibility
period of 15 days are ahead of this ticket in the queue.</p>
</li>
<li class="li">When the ticket reaches the front of the queue, omnichannel routing
assigns it to another agent. This agent works on the ticket and changes
the status to Solved.</li>
</ol>
</div>
</div>
</div>
</div>
<script id="docs-schema-markup" type="application/ld+json">{
"@context": "https://schema.org",
"@type": "TechArticle",
"@id": "https://support.zendesk.com/hc/en-us/articles/6712096584090-Understanding-how-omnichannel-routing-uses-queues-to-route-work-to-agents",
"url": "https://support.zendesk.com/hc/en-us/articles/6712096584090-Understanding-how-omnichannel-routing-uses-queues-to-route-work-to-agents",
"headline": "Understanding how omnichannel routing uses queues to route work to agents",
"description": "You can configure omnichannel routing queues to assign tickets to agents based on availability, capacity, priority, SLA targets, and skills, using standard or custom queues with options for predictive routing and ticket ordering methods.",
"articleSection": "Routing",
"datePublished": "2024-02-07T21:21:55+00:00",
"dateModified": "2026-06-15T14:35:57.152961+00:00",
"inLanguage": "en-US",
"mainEntityOfPage": {
"@type": "WebPage",
"@id": "https://support.zendesk.com/hc/en-us/articles/6712096584090-Understanding-how-omnichannel-routing-uses-queues-to-route-work-to-agents"
},
"author": {
"@type": "Organization",
"name": "Zendesk",
"url": "https://www.zendesk.com"
},
"publisher": {
"@type": "Organization",
"name": "Zendesk"
},
"isPartOf": {
"@type": "WebSite",
"name": "Zendesk Help",
"url": "https://support.zendesk.com/hc/en-us"
},
"about": {
"@type": "SoftwareApplication",
"name": "Zendesk"
}
}</script><script id="ai-summary-script">
//<![CDATA[
const ai_summary_style = document.createElement('style');
ai_summary_style.innerHTML = `#styled-article-body{padding:0 0 0}#article-body #docs-ai-summary{background-color:#f3f3f3;border:1px solid #d3d3d3;padding:10px 10px 6px;margin-bottom:16px}#article-body #docs-ai-summary #docs-ai-summary-toggle{font-size:.9em;font-weight:700;margin-bottom:4px;cursor:pointer;display:flex;justify-content:space-between;align-items:center}#article-body #docs-ai-summary #docs-ai-summary-toggle #up-triangle{margin-left:auto;padding-right:10px;display:none}#article-body #docs-ai-summary #docs-ai-summary-toggle #down-triangle{margin-left:auto;padding-right:10px}#article-body #docs-ai-summary #docs-ai-summary-content{font-size:.9em;padding-left:25px;padding-right:25px;margin-bottom:12px}`;
document.head.appendChild(ai_summary_style);

const toggleAISummary = () => {
const summary = document.getElementById("docs-ai-summary-content");
const upTriangle = document.getElementById("up-triangle");
const downTriangle = document.getElementById("down-triangle");
if (summary.style.display === "none") {
summary.style.display = "block";
upTriangle.style.display = "none";
downTriangle.style.display = "inline";
} else {
summary.style.display = "none";
upTriangle.style.display = "inline";
downTriangle.style.display = "none";
}
};

document.getElementById("docs-ai-summary-toggle").addEventListener("click", toggleAISummary);
//]]>
</script>
</body>