# Ticket assignment

> Route incoming tickets to the right teammate automatically. Choose manual, balanced, or round-robin assignment, cap each agent's open tickets, and fall back to the next shift when nobody is available.

Assignment decides who owns each incoming ticket. Set it up once and new tickets — from escalations, email, or the API — land on the right teammate without anyone triaging by hand.

> **WHERE TO CONFIGURE:** Open the agent's **Help desk → Assignment** settings. Enable assignment, choose a method, and set the optional limits below.

## Assignment methods

| Method | How it picks an assignee |
| --- | --- |
| Manual | No auto-assignment. Tickets arrive unassigned for your team to claim. |
| Balanced | Routes to the available agent with the fewest open tickets, breaking ties by who was assigned least recently. |
| Round robin | Routes to the available agent who was assigned least recently, spreading tickets evenly over time. |

> **BALANCED VS ROUND ROBIN:** Use **balanced** to even out current workload (good when ticket effort varies). Use **round robin** to rotate fairly regardless of how many are currently open.

## Who counts as available

Auto-assignment only considers **eligible** agents. Eligibility depends on whether you use scheduling:

- **Without scheduling** — an agent is eligible when their availability status is *available*. Each teammate can toggle their own status.
- **With [scheduling](/docs/help-desk/scheduling)** — an agent assigned to a shift is eligible only when that shift is currently on, and they're not on time off.

## Limits and fallback

### Max open tickets

Set a **max tickets** cap to stop overloading any single agent. An agent at or above the cap is skipped during auto-assignment until they close something. Leave it at `0` for no limit.

### Next-shift fallback

When nobody is on shift right now, **next-shift fallback** routes the ticket to a scheduled agent anyway (respecting the max-tickets cap) instead of leaving it unassigned. Turn this on so off-hours tickets still land on someone's plate for when they return.

> **WHEN NO ONE IS ELIGIBLE:** If no agent is eligible and fallback is off (or also finds no one), the ticket is created **unassigned**. It still appears in the Unassigned view for someone to grab — it's never lost.

## How a new ticket flows

1. **Build the candidate pool** — Start from eligible agents (available, or on-shift if scheduling is on).
2. **Apply the cap** — Drop anyone at or above the max-tickets limit.
3. **Fall back if empty** — If nobody qualifies and next-shift fallback is on, consider scheduled agents instead.
4. **Pick by method** — Balanced picks the lightest load; round robin picks the least-recently assigned.
5. **Assign and flag** — The chosen agent is set as assignee and the ticket moves to *On you*. With no candidate, it stays unassigned.

## FAQ

**Can I still reassign manually?**

Yes. Auto-assignment sets the initial owner; you can change the assignee on any ticket from its detail view at any time.

**Does assignment apply to escalated conversations?**

When a conversation is escalated by the bot (not a manual takeover), the resulting ticket is auto-assigned using these rules. A manual takeover assigns the ticket to the person who took it over.

**What happens at the max-tickets cap?**

An agent at the cap is skipped until they close a ticket, then they're eligible again.

**Why is everything landing unassigned?**

Either assignment is set to Manual, or no agent is currently eligible (no one marked available, or no one on shift) and next-shift fallback is off.

**Does the assignee get notified?**

Yes. When a ticket is assigned, Bookbag emails the assignee (unless they just created or took it over themselves). Unassigned tickets notify the workspace owners and admins so someone picks them up.

## What's next

- [Scheduling](/docs/help-desk/scheduling) — Define shifts so assignment respects who's actually on.
- [Help Desk overview](/docs/help-desk/overview) — How tickets and statuses fit together.
- [Saved views](/docs/help-desk/saved-views) — Build an Unassigned-triage view for your team.
