A call queue is what stops a busy phone line from going to chaos: callers wait in line with hold music, and the next available agent picks up. In Microsoft Teams it’s a Teams Phone feature, and like the auto attendant, the hard part isn’t the queue settings — it’s the plumbing underneath. Get the resource account and its license right first and the rest falls into place. Skip them and the queue won’t take a number or won’t route calls at all.
This walkthrough builds a working call queue end to end: create and license the resource account, add agents, pick a routing method, set overflow and timeout handling, and wire the queue to an auto attendant. Most of it happens in the Teams admin center, with PowerShell where it’s faster.
Before you start
- You're a Teams Administrator or Global Administrator
- Your tenant has at least one paid Teams Phone license (this unlocks the free virtual user licenses)
- Your agents are voice-enabled Teams users with Teams Phone licenses
- You've decided how calls should route — all at once, one by one, evenly, or to the longest-idle agent
- You know whether callers dial the queue directly or reach it through an auto attendant
How a call queue fits together
A call queue, like an auto attendant, is never a standalone object you can dial. It sits on top of a resource account — a disabled user object in Microsoft 365 that represents the queue instead of a person. The resource account holds the license and, when callers dial in directly, the phone number. The queue is then associated with that account.
The call path is straightforward: a caller reaches the queue (directly or via an auto attendant), the queue plays greeting and hold music while callers wait, and the routing method decides which agent rings. If the line gets too long or a caller waits too long, overflow and timeout rules send the call elsewhere.
flowchart LR C[Caller] --> RA[Resource account] RA --> Q[Call queue: greeting + hold music] Q -->|Routing method| A[Available agents] Q -->|Too many waiting| OF[Overflow target] Q -->|Waited too long| TO[Timeout target]
Step 1: Create the resource account
Create the queue’s resource account first. In the Teams admin center, go to Voice > Resource accounts > Add, give it a display name like CQ-Support, a UPN, and set the account type to Call queue.
In PowerShell, connect with the Microsoft Teams module and create the account with the call queue application ID:
Connect-MicrosoftTeams
New-CsOnlineApplicationInstance `
-UserPrincipalName "[email protected]" `
-DisplayName "Support Call Queue" `
-ApplicationId "11cd3e2e-fccb-42ad-ad00-878b93575e07"
The GUID 11cd3e2e-fccb-42ad-ad00-878b93575e07 is the fixed application ID for call queues. Auto attendants use a different ID (ce933385-9390-45d1-9512-c8d228074e07), so don’t mix them up — the account type can’t be changed cleanly after creation.
Step 2: Assign the virtual user license
This is the step people miss, and it’s why a new call queue often refuses a phone number. The resource account needs a Microsoft Teams Phone Resource Account license — the virtual user license. It’s free, but it only becomes available once your tenant owns at least one paid Teams Phone license.
Assign it in the Microsoft 365 admin center under the resource account’s Licenses and apps, or with Graph/PowerShell. Set a usage location first if the account doesn’t have one.
Step 3: Assign a phone number (only if callers dial in directly)
Only a queue that callers reach from outside needs its own phone number. A queue sitting behind an auto attendant routes internally, so it runs on a licensed resource account with no number at all — that’s the most common setup.
Where a direct number comes from depends on your voice platform:
Where the queue's number comes from
| Calling Plan | Get or port a number through Microsoft, then assign it to the resource account |
|---|---|
| Operator Connect | Acquire the number from your carrier in the admin center, then assign it |
| Direct Routing | Assign an on-premises number and voice routing policy with PowerShell (Set-CsPhoneNumberAssignment) |
If you’re still choosing between those, the trade-offs are covered in Calling Plan vs Operator Connect vs Direct Routing.
Step 4: Add agents to the queue
Now build the queue itself. In the Teams admin center, go to Voice > Call queues > Add, name it, and assign the resource account you created. Then add the people who’ll answer calls.
You can add agents two ways:
- Individually — pick voice-enabled users one by one. Fine for a small, stable queue.
- By group — point the queue at a team, Microsoft 365 group, distribution list, or security group. Anyone in that group becomes an agent automatically.
The group approach is far easier to maintain. When someone joins or leaves the support team, you update the group and the queue follows — no editing the queue every time staff changes. Every agent needs a Teams Phone license and the ability to take calls.
Step 5: Choose a routing method
The routing method decides which agent rings when a call arrives. Teams gives you four, and the right one depends on your team size and fairness needs.
Call queue routing methods
| Attendant routing | Rings all available agents at the same time; first to answer takes it |
|---|---|
| Serial routing | Rings agents one at a time in a fixed order, in sequence |
| Round robin | Distributes calls evenly so the same agent isn't always first |
| Longest idle | Rings the agent who has been available the longest |
Attendant routing is the common default — everyone’s phone rings and whoever’s free grabs it. It’s simple but can feel noisy in a big team. Serial suits a defined escalation order (try the senior agent first, then the next). Round robin and longest idle both spread the load fairly; longest idle is especially good at high volume because it naturally evens out who’s been on calls.
Two related settings shape this further:
- Presence-based routing only rings agents whose Teams status shows them available, so calls skip people marked Away or in a meeting.
- Agent opt-out lets agents toggle themselves out of taking queue calls when they step away, without you editing the queue.
Step 6: Set overflow and timeout handling
These two are different and people mix them up. Both are safety valves, but they trigger on different conditions.
Overflow handling fires when too many calls are waiting in line at once. You set a maximum number of calls in the queue; once it’s exceeded, the next call is routed to your overflow target instead of joining the line.
Timeout handling fires when a single call has waited too long. You set a maximum wait time; if one caller sits in the queue past that limit, their call is routed to the timeout target rather than waiting indefinitely.
Overflow vs timeout — what triggers each
| Overflow | Number of calls waiting exceeds the limit |
|---|---|
| Timeout | One call has waited longer than the limit |
For each, you choose where the affected call goes: disconnect, redirect to a person, to voicemail (a shared mailbox or the resource account’s voicemail), to another call queue, or to an auto attendant. A sensible pattern is to send overflow to a backup queue and timeout to voicemail so nobody waits forever.
Step 7: Link the queue from an auto attendant
Most queues don’t take direct calls. Instead, an auto attendant greets callers, offers a menu (“Press 2 for support”), and redirects the chosen option to the queue. The auto attendant sorts; the queue rings agents and holds the line.
For this to work, the queue has to exist first — an auto attendant can only point to a queue that’s already built. Then, in the auto attendant’s menu option, choose Redirect to > Call queue and pick this queue. From there the queue’s own routing, overflow, and timeout rules take over.
The full attendant side, including resource accounts, business hours, and holiday handling, is covered in how to set up an auto attendant in Microsoft Teams. Build the queues first, then the attendant in front of them.
Step 8: Test the queue end to end
Before going live, walk every path:
- Call the queue (directly or through the auto attendant) and confirm it rings agents per your routing method.
- Have an agent answer to confirm the connection and audio are clean.
- Test overflow by lowering the call limit temporarily and stacking up calls, or confirm the target is correct in the settings.
- Test timeout by setting a short wait time and letting a call sit, confirming it lands on the timeout target.
- Check presence routing and opt-out — mark an agent away and confirm the call skips them.
If calls reach the queue but never ring an agent, the agents usually aren’t voice-enabled or are opted out — fix the agents, not the queue. If a connected call has audio problems like one-way or dropped audio, that’s a media/network issue; the Teams meeting and call troubleshooting guide covers those paths.
Common setup mistakes
The same handful of problems come up over and over:
- No virtual user license, so the resource account can’t take a number. Assign the free Teams Phone Resource Account license and wait for it to apply.
- Agents aren’t voice-enabled or lack a Teams Phone license, so calls ring nobody.
- A hand-picked agent list that’s gone stale — use a group instead.
- No overflow or timeout target, leaving callers stuck in line.
- Mixing up the application IDs when creating the resource account — call queues and auto attendants use different GUIDs.
Wrapping up
The call queue settings are the quick part. The setup that trips people up is the foundation: create a resource account, give it the free virtual user license, and only assign a number if callers dial the queue directly. Add agents by group so the queue stays current, pick a routing method that fits your team, and always set both overflow and timeout targets so no caller falls off the end.
Pair the queue with an auto attendant out front and you’ve got the standard main-line setup — greet, sort, queue, answer. Start with one queue and a simple routing method, test it end to end, then layer on the attendant. For the front end, see setting up an auto attendant, and browse more in the Microsoft Teams guides.