Triage classifies. Booking links and scheduled todos handle the calendar layer. The next gap is who picks up the ticket. Without auto-assignment, dispatchers manually route every ticket to a specific person — fast at first, then slower as volume grows, then a bottleneck. This lesson covers the simplest, safest auto-assignment method: round-robin. We use it twice — once for alerts, once for helpdesk tickets.
Problem: A ticket lands. A team of agents could work it. Without a rule, someone has to pick. That someone usually picks based on memory ("who did the last one?"), bias ("Bob's faster"), or convenience ("whoever's free") — all of which are inconsistent and don't scale.
Horizon's answer: Round-robin assignment. The system rotates through team members in order, giving each one the next ticket. It's not the smartest method (it doesn't know who's actually free, who's faster on this ticket type, who's already overloaded), but it's fair, predictable, and requires no other configuration to work. That's why it's where every account starts.
We use it for two scenarios:
Same mechanism. Two policies, scoped differently.
Before walking through the assignment pages, understand the chain. A ticket doesn't go straight from arrival to assignment — three pieces work together:
In most accounts, the lifecycle does the heavy lifting. You configure the ticket lifecycle (covered in a later lesson) to call assignment at the right step, and the lifecycle invokes routing → assignment in sequence. You rarely touch routing or assignment policies directly outside the lifecycle.
You will only configure routing rules and assignment policies hands-on in advanced situations — multi-tier escalation, region-specific routing, special policies for after-hours, etc. For the day-one round-robin setup we're doing in this lesson, you'll create the assignment policy here and then have the lifecycle reference it. The lifecycle lesson ties it all together.
Open the admin panel and navigate to Components → Assignment. You'll find:
| Page | What it does |
|---|---|
| Policies | the assignment policies themselves — the user-picking logic |
| Queues | manual ticket queues used by the next-ticket-queue method (covered later) |
| Simulation | test a policy against a sample ticket without committing the decision |
| Decision Log | audit trail of every assignment decision the system has made |
| Errors | assignment attempts that failed |
| Coverage Report | who's actually on-call for which level, historically and projected |
Routing rules live nearby under Components → Ticket Routing — that's where ticket criteria match a policy, when you need to configure that explicitly.
Setup work is on Policies. The other pages are testing and audit.
An assignment policy says: "pick a user from this team using this method, escalating through these levels if needed." Three parts:
For round-robin policies, the only direction you'll usually configure is SIDEWAYS at a single level. UP and DOWN come into play with multi-tier escalation, which is a later layer.
Note what isn't on the policy: ticket-matching conditions. The policy doesn't decide "do I apply to this ticket?" — routing does. The policy just decides "given that I was picked, who gets it?"
Two flavors are available, both pick the next user in rotation order, but they differ in what pool they rotate through:
| Plugin | Rotation pool | When to use |
|---|---|---|
| Round-Robin (Team) | every active member of the team | the simplest case — "rotate among everyone on the team" |
| Round-Robin (Assignment Level) | only members assigned to the specific level | use when a level has its own roster distinct from team membership |
Most accounts start with Round-Robin (Team) because the team membership is the roster. Use Round-Robin (Assignment Level) when you've split a single team into multiple levels with overlapping but non-identical rosters.
Alerts are usually low-context: a monitor fired, someone needs to acknowledge it. Round-robin is a perfect fit because the who matters less than the speed.
The policy now exists. To actually use it, the ticket lifecycle for alert tickets needs to invoke assignment with this policy at the right step (covered in the lifecycle lesson). If you have a custom routing rule that explicitly maps "tickets where type = Alert" to this policy, configure it under Components → Ticket Routing — but in most accounts, the lifecycle handles this and routing rules stay default.
Helpdesk tickets are higher-context — triage has already classified them.
Same as alerts: the lifecycle is what invokes this policy at the right step. If you have multiple service desk teams (e.g. by region, by skillset), you'll either configure routing rules upstream to pick the right policy, or model it as multi-level escalation within a single policy. Both are advanced patterns; for day-one setup, one team and one policy is enough.
Problem: You created the policy. You don't want to find out it does the wrong thing by watching real tickets get misassigned.
Horizon's answer: The Simulation page. Pick a real ticket (or a synthetic one), run it through the policy, and see who would have been picked, without committing the decision.
If the simulation picks the wrong person, fix the policy before tickets start flowing through it.
After the policy is live, the Decision Log shows every assignment decision: which ticket, which policy, which method, which user, why. When an agent says "I shouldn't have gotten this ticket", the decision log tells you exactly why it happened.
The Errors page sits next to it: assignment attempts that failed (no eligible candidates, plugin error, locking conflict, etc.). If a ticket is sitting in triaged but unassigned state, the errors page tells you why.
Round-robin doesn't blindly rotate through everyone. It respects:
You don't configure these — they're built-in. But knowing they exist saves you a debugging session when you see "why didn't Bob get this ticket?" — check whether Bob is marked away, inactive, or scheduled on another exclusive duty.
Tip: Round-robin is intentionally dumb. It will happily assign a ticket to someone who's already buried, or to a Tier 1 person when a Tier 2 problem comes in. That's fine — it's a starting point. The next lesson layers in next-available assignment, which considers actual calendar load. Don't try to make round-robin smart by adding too many conditions or escalation levels. Get it working first, then upgrade the method.