An auto attendant is the automated menu callers hear when they ring your main number: “Press 1 for sales, 2 for support, or stay on the line for the operator.” In Microsoft Teams it’s a Teams Phone feature, and setting one up is mostly about getting two things right before you touch the menu — the resource account and its license. Skip those and the auto attendant either won’t accept a phone number or won’t route calls at all.
This walkthrough builds a working auto attendant from scratch: create and license the resource account, set business hours and holidays, build the menu with dial-by-key options, and hand callers off to people or call queues. Most of it happens in the Teams admin center, with PowerShell shown where it’s faster or where the portal hides an option.
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)
- You've decided which number callers will dial — and whether it's a Calling Plan, Operator Connect, or Direct Routing number
- You know the menu structure: how many options, what each one does, and who answers
- Any people or call queues the menu routes to already exist and are voice-enabled
How the pieces fit together
A Teams auto attendant is not a standalone object you can dial. It always sits on top of a resource account — a special, disabled user account in Microsoft 365 that represents the service instead of a person. The resource account holds the license and, when needed, the phone number. The auto attendant is then associated with that account.
The call path usually looks like this: a caller dials a service number on a resource account, the auto attendant answers and plays a menu, and each menu choice routes to a person, an external number, a voicemail, a call queue, or another auto attendant. Larger setups nest auto attendants and queues several layers deep.
flowchart LR C[Caller dials main number] --> RA[Resource account] RA --> AA[Auto attendant menu] AA -->|Press 1| Q1[Sales call queue] AA -->|Press 2| Q2[Support call queue] AA -->|Press 0 or timeout| OP[Operator]
Step 1: Create the resource account
Create a resource account for the auto attendant before you do anything else. In the Teams admin center, go to Voice > Resource accounts > Add. Give it a display name like AA-MainLine, a UPN, and set the account type to Auto attendant.
If you prefer PowerShell, connect with the Microsoft Teams module and create the account with the auto attendant application ID:
Connect-MicrosoftTeams
New-CsOnlineApplicationInstance `
-UserPrincipalName "[email protected]" `
-DisplayName "AA Main Line" `
-ApplicationId "ce933385-9390-45d1-9512-c8d228074e07"
The GUID ce933385-9390-45d1-9512-c8d228074e07 is the fixed application ID for auto attendants. Call queues use a different ID (11cd3e2e-fccb-42ad-ad00-878b93575e07), 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 brand-new auto attendant 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. Give it a usage location first if the account doesn’t have one.
Step 3: Assign a phone number (only where it’s needed)
Only the auto attendant that callers reach from outside needs a phone number. Nested auto attendants and the call queues behind them route internally, so they run on a licensed resource account with no number at all.
Where the number comes from depends on your voice setup:
Where the service number comes from
| Calling Plan | Get or port a number through Microsoft, then assign it to the resource account in the admin center |
|---|---|
| Operator Connect | Acquire the number from your carrier in the admin center, then assign it |
| Direct Routing | Assign an on-premises number and a voice routing policy with PowerShell (Set-CsPhoneNumberAssignment) |
If you’re still deciding which of those to run, the differences in cost, control, and setup are covered in Calling Plan vs Operator Connect vs Direct Routing. For Direct Routing, assigning a number looks like this:
Set-CsPhoneNumberAssignment `
-Identity "[email protected]" `
-PhoneNumber "+15551234567" `
-PhoneNumberType DirectRouting
Step 4: Build the auto attendant
With the account created and licensed, go to Voice > Auto attendants > Add. The wizard walks through general settings, call flows, hours, and dial scopes.
General settings. Name the auto attendant, pick the operator (a person, queue, or another auto attendant that callers reach by pressing 0 or asking for the operator), set the time zone, and choose the language. The time zone matters more than it looks — business hours and holidays are evaluated against it, so a wrong zone sends callers to the after-hours greeting at the wrong time.
Greetings. You can type a greeting for text-to-speech or upload an audio file (WAV or MP3). Text-to-speech is quicker to change and easy to keep consistent; a recorded file sounds more polished for a public main line. Keep the greeting short and put the menu options right after it.
Step 5: Set business hours and after-hours handling
The auto attendant evaluates three kinds of rules in priority order: holidays first, then after-hours, then business hours. Whatever matches the current date and time wins.
Define your business hours on the call flow screen — for example, Monday to Friday 9:00 to 17:00. Then set what happens during those hours (usually the main menu) and what happens outside them (an after-hours greeting that points to voicemail, a reduced menu, or an emergency option).
A common layout:
- During business hours: play the greeting, then present the dial-by-key menu.
- After hours: play a short “our office is closed” greeting, then send to voicemail or a single option.
Step 6: Add holiday schedules
Holidays are reusable schedules you create once and attach to any auto attendant. Build them under Voice > Holidays, listing the dates for each holiday (you can add several years at once). Then, in the auto attendant’s call flow, add a holiday rule that links the schedule to its own greeting and routing.
Because holidays take top priority, a date that falls on a holiday ignores the business-hours and after-hours rules entirely. That’s what you want — a public holiday during a normal weekday should play the holiday message, not the standard menu.
Step 7: Build the menu and dial-by-key options
The menu is where callers press a key to get somewhere. Each option maps a key (0–9) to an action:
Menu option targets
| Key 1 | Route to the Sales call queue |
|---|---|
| Key 2 | Route to the Support call queue |
| Key 3 | Transfer to a specific person (voice-enabled user) |
| Key 4 | Play an announcement (e.g. address or hours), then return to the menu |
| Key 0 | Operator |
| No input / invalid key | Repeat the menu, then fall back to the operator |
Set the directory search options on the same screen if you want callers to reach people by name. Dial by name lets them spell or speak a person’s name; dial by extension routes by number. You control who’s reachable with dial scopes — include the whole directory or limit it to specific groups, which is the clean way to keep ex-employees or shared mailboxes out of the search.
Step 8: Link the auto attendant to call queues
Auto attendants and call queues are designed to work together: the auto attendant greets and sorts callers, and the call queue rings a group of agents and holds people in line with music. A menu option that points to “Sales” almost always routes to a Sales call queue, not a single person.
To wire this up, the call queue must already exist on its own resource account. Then, in the auto attendant menu option, choose Redirect to > Call queue and pick it. The queue handles agent ringing, overflow, and timeout from there.
If you haven’t built the queues yet, set those up first — the menu can only point to a queue that exists. The companion guide Set up call queues in Microsoft Teams covers agent assignment, routing methods, and overflow handling.
Step 9: Test the flow end to end
Before you publish the number, test every path:
- Call the service number during business hours and walk each menu option to its destination.
- Call after hours (or temporarily narrow the business hours) to confirm the after-hours greeting and routing.
- Add today as a temporary holiday to verify the holiday greeting plays, then remove it.
- Press nothing and press an invalid key to confirm the fallback lands on the operator.
- Try dial-by-name if you enabled it, and confirm excluded users aren’t reachable.
If calls reach the auto attendant but routing to a person fails, that target user usually isn’t voice-enabled or is missing a number — fix the destination, not the auto attendant.
Common setup mistakes
A few problems come up again and again:
- 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.
- Number assigned to the wrong account. The number belongs on the resource account, not on a real user.
- Wrong time zone, so business hours fire at the wrong local time and callers get the after-hours message during the day.
- Menu points to an empty or unlicensed queue. Build and license the queue’s resource account first.
- Dial scope left wide open, exposing every account in the directory through dial-by-name.
If callers report broader problems like dropped audio or one-way audio once they’re connected, that’s a media/network issue rather than auto attendant config — the Teams meeting and call troubleshooting guide covers those paths.
Wrapping up
The auto attendant itself is the easy part. The setup that trips people up is upstream: create a resource account, give it the free virtual user license, then assign a number only where callers dial in directly. Once that foundation is in place, building the menu, hours, holidays, and queue hand-offs is straightforward, and you can nest attendants and queues as deep as your org needs.
Start simple — a single menu with two or three options and a clear operator fallback — get it tested end to end, then layer on holidays and nested routing. For more on the voice features around it, browse the Microsoft Teams guides.