Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Important
Teams Phone Agent is now generally available.
Book a Teams Phone Agent Discovery Session to learn what Teams Phone Agent does, how it fits your organization, and how to plan your deployment. We can also help you work through setup and configuration questions. Teams Phone Agent Discovery Sessions
We want your feedback
Help us improve Teams Phone Agent. Share your feedback on our planning and setup documentation, the Teams admin center experience, Teams Phone Agent features, or tell us about features and improvements you’d like to see.
Caution
Daylight Savings Time changes – Manual changes to Teams Phone Agent time zones required by some customers.
On November 1, 2026, Daylight Savings Time will end in North America.
In Canada, the provinces of Alberta and British Columbia will remain on Daylight Savings Time and will not move the clocks back one hour.
Customers with Teams Phone Agent time zone configurations that reference (UTC-7:00) Mountain Time (US & Canada) or (UTC-8:00) Pacific Time (US & Canada) must be updated as follows:
Alberta: Permanently moves to UTC-6:00.
- Change the Teams Phone Agent time zone selection from (UTC-7:00) Mountain Time (US & Canada) to (UTC-6:00) Saskatchewan.
British Columbia: Permanently moves to UTC-7:00.
- Change the Teams Phone Agent time zone selection from (UTC-8:00) Pacific Time (US & Canada) to (UTC-7:00) Arizona.
What's new in Teams Phone Agent (last six months)
- October 14, 2026
- Teams Phone Agent now supports 42 voices, including 33 new ones.
- September 30, 2026
- Teams Phone Agent is now generally available to all customers.
- Appointments integration with Microsoft Bookings can be configured in Teams admin center.
- Automatic Recording for Teams Phone Agent can be configured in Teams admin center.
- Maximum call length with configurable disconnect message can be configured in Teams admin center.
- Question and Answers URLs are refreshed daily.
- September 29, 2026
- Historical reporting for Teams Phone Agent updated.
- September 1, 2026
- Appointments integration with Microsoft Bookings can be configured via PowerShell.
- August 31, 2026
- AI disclaimer can be configured in Teams admin center.
- Maximum call length can be configured in Teams admin center.
- August 17, 2026
- Automatic Recording for Teams Phone Agent can be configured via PowerShell.
- August 12, 2026
- Spam detection can be configured via PowerShell.
- AI disclaimer customization can be configured via PowerShell.
- Maximum call length can be configured in PowerShell.
- July 20, 2026
- Historical reporting for Teams Phone Agent is now available.
- June 15, 2026
- Entered Frontier Public Preview
Prerequisites
Install PowerShell on your computer.
Set up your computer for Windows PowerShell
MSTeams Module Installed
Install-Module -Name MicrosoftTeams -Force -AllowClobberMicrosoft Graph module installed
Install-Module -Name Microsoft.Graph -Force -AllowClobber
Ensure you have tenant administration rights.
Purchase Microsoft Teams Phone.
The call queues mentioned in this article were set up using the Creating Call Queues with PowerShell cmdlets guide.
Note
Some of the cmdlets mentioned in this article may be part of the Public Preview version of Teams PowerShell Module. For more information, see Install Teams PowerShell public preview and also see Microsoft Teams PowerShell Release Notes.
Users who already have the MicrosoftTeams module installed should Update-Module MicrosoftTeams to ensure the most up-to-date version is installed.
Scenario
Caution
Add Teams Phone Agent samples here
The following auto attendant call flow is built:
Login
When prompted, enter your Teams administrator credentials.
$credential = Get-Credential
Connect-MicrosoftTeams -Credential $credential
Connect-MgGraph -Credential $credential
Get Operator Information
$operatorID = (Get-CsOnlineUser -Identity "sip:adele@contoso.com").Identity
$operatorEntity = New-CsAutoAttendantCallableEntity -Identity $operatorID -Type User
Dial By Name Auto Attendant - Resource Account Creation
Create a resource account here so it can be referenced on the main auto attendant. You can create the actual Dial By Name auto attendant later.
Get license types
Get-MgSubscribedSku
Create and assign Resource Account
A phone number isn't required here as the call queue is nested behind an auto attendant.
- ApplicationID
- Auto Attendant: ce933385-9390-45d1-9512-c8d228074e07
- Call Queue: 11cd3e2e-fccb-42ad-ad00-878b93575e07
New-CsOnlineApplicationInstance -UserPrincipalName ContosoDialByNameAA-RA@contoso.com -DisplayName "Contoso Dial By Name AA" -ApplicationID "ce933385-9390-45d1-9512-c8d228074e07"
Update-MgUser -UserId "ContosoDialByNameAA-RA@contoso.com" -UsageLocation US
Set-MgUserLicense -UserId "ContosoDialByNameAA-RA@contoso.com" -AddLicenses @(contoso:PHONESYSTEM_VIRTUALUSER) -RemoveLicenses @()
$dialByNameApplicationInstanceID = (Get-CsOnlineUser "ContosoDialByNameAA-RA@contoso.com").Identity
Contoso Main Menu Auto Attendant
Create Holiday Schedules
$dtr = New-CsOnlineDateTimeRange -Start "24/12/2022" -End "25/12/2022"
$christmasSchedule = New-CsOnlineSchedule -Name "Christmas" -FixedSchedule -DateTimeRanges @($dtr)
$dtr = New-CsOnlineDateTimeRange -Start "01/01/2022" -End "02/01/2022"
$newyearSchedule = New-CsOnlineSchedule -Name "New Year" -FixedSchedule -DateTimeRanges @($dtr)
Create Address, FAX, and Email Information Prompt
$addressPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "To repeat this information at any time press the * key. Our mailing address is: 123 Main Street, Any town, Any Place, County. Our email address is: info@contoso.com. Our fax number is: 929-555-0151"
Create Holiday Prompts and Menu Options
$christmasGreetingPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "Thank you for calling Contoso. Our offices ae currently closed for the Christmas holiday. Our Sales and Support teams will be happy to take your call on the next business day. Regular business hours are Monday through Friday from 8:30 am to 5:00 pm and Saturday from 10:00 am to 4:00 pm eastern time. Thank you for calling Contoso."
$christmasMenuOption = New-CsAutoAttendantMenuOption -Action DisconnectCall -DtmfResponse Automatic
$christmasMenu = New-CsAutoAttendantMenu -Name "Christmas Menu" -MenuOptions @($christmasMenuOption)
$christmasCallFlow = New-CsAutoAttendantCallFlow -Name "Christmas" -Greetings @($christmasGreetingPrompt) -Menu $christmasMenu
$christmasCallHandlingAssociation = New-CsAutoAttendantCallHandlingAssociation -Type Holiday -ScheduleId $christmasSchedule.Id -CallFlowId $christmasCallFlow.Id
$newyearGreetingPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "Thank you for calling Contoso. Our offices ae currently closed for the New Year's holiday. Our Sales and Support teams will be happy to take your call on the next business day. Regular business hours are Monday through Friday from 8:30 am to 5:00 pm and Saturday from 10:00 am to 4:00 pm eastern time. Thank you for calling Contoso."
$newyearMenuOption = New-CsAutoAttendantMenuOption -Action DisconnectCall -DtmfResponse Automatic
$newyearMenu = New-CsAutoAttendantMenu -Name "New Year Menu" -MenuOptions @($newyearMenuOption)
$newyearCallFlow = New-CsAutoAttendantCallFlow -Name "New Year" -Greetings @($newyearGreetingPrompt) -Menu $newyearMenu
$newyearCallHandlingAssociation = New-CsAutoAttendantCallHandlingAssociation -Type Holiday -ScheduleId $newyearSchedule.Id -CallFlowId $newyearCallFlow.Id
Create After Hours Schedules
$timerangeMoFr = New-CsOnlineTimeRange -Start 08:30 -end 17:00
$timerangeSa = New-CsOnlineTimeRange -Start 10:00 -end 16:00
$afterHoursSchedule = New-CsOnlineSchedule -Name "After Hours Schedule" -WeeklyRecurrentSchedule -MondayHours @($timerangeMoFr) -TuesdayHours @($timerangeMoFr) -WednesdayHours @($timerangeMoFr) -ThursdayHours @($timerangeMoFr) -FridayHours @($timerangeMoFr) -SaturdayHours @($timerangeSa) -Complement
Create After Hours Prompts and Menu Options
$afterHoursGreetingPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "Thank you for calling Contoso. Our offices are now closed. Regular business hours are Monday through Friday from 8:30 am to 5:00 pm and Saturday from 10:00 am to 4:00 pm eastern time."
$afterHoursMenuPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "To leave a voicemail for our sales team press 1. To leave a message for our support team press 2. If you know the name of the person you would like to reach, press 3. For our address, email and fax information press 4."
$afterHoursMenuOption1Target = (Get-Team -displayname "Sales").GroupID
$afterHoursMenuOption1Entity = New-CsAutoAttendantCallableEntity -Identity $afterHoursMenuOption1Target -Type SharedVoiceMail -EnableTranscription -EnableSharedVoicemailSystemPromptSuppression
$afterHoursMenuOption1 = New-CsAutoAttendantMenuOption -Action TransferCallToTarget -DtmfResponse Tone1 -CallTarget $afterHoursMenuOption1Entity
$afterHoursMenuOption2Target = (Get-Team -displayname "Support").GroupID
$afterHoursMenuOption2Entity = New-CsAutoAttendantCallableEntity -Identity $afterHoursMenuOption2Target -Type SharedVoicemail -EnableTranscription -EnableSharedVoicemailSystemPromptSuppression
$afterHoursMenuOption2 = New-CsAutoAttendantMenuOption -Action TransferCallToTarget -DtmfResponse Tone2 -CallTarget $afterHoursMenuOption2Entity
$dialbynameAAOption3Target = (Get-CsOnlineUser -Identity "ContosoDialByNameAA-RA@contoso.com").Identity
$dialbynameAAMenuOption3Entity = New-CsAutoAttendantCallableEntity -Identity $dialbynameAAOption3Target -Type applicationendpoint
$dialbynameAAMenuOption3 = New-CsAutoAttendantMenuOption -Action TransferCallToTarget -DtmfResponse Tone3 -CallTarget $dialbynameAAMenuOption3Entity
$afterHoursMenuOption4 = New-CsAutoAttendantMenuOption -Action Announcement -DtmfResponse Tone4 -Prompt $addressPrompt
Create After Hours Menu and Call Flow
$afterHoursMenu = New-CsAutoAttendantMenu -Name "After Hours Menu" -MenuOptions @($afterHoursMenuOption1, $afterHoursMenuOption2, $dialbynameAAMenuOption3, $afterHoursMenuOption4) -Prompt $afterHoursMenuPrompt
$afterHoursCallFlow = New-CsAutoAttendantCallFlow -Name "After Hours Call Flow" -Greetings @($afterHoursGreetingPrompt) -Menu $afterHoursMenu
$afterHoursCallHandlingAssociation = New-CsAutoAttendantCallHandlingAssociation -Type AfterHours -ScheduleId $afterHoursSchedule.Id -CallFlowId $afterHoursCallFlow.Id
Create Open Hours Prompts and Menu Options
$openHoursGreetingPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt " Thank you for calling Contoso."
$openHoursMenuPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "For Sales press 1. For Support press 2. If you know the name of the person you would like to reach, press 3. For our address, email and fax information, press 4. For all other inquiries press 0 to speak with the operator."
$openHoursMenuOption1Target = (Get-CsOnlineUser "Sales-RA@contoso.com").Identity
$openHoursMenuOption1Entity = New-CsAutoAttendantCallableEntity -Identity $openHoursMenuOption1Target -Type applicationendpoint
$openHoursMenuOption1 = New-CsAutoAttendantMenuOption -Action TransferCallToTarget -DtmfResponse Tone1 -CallTarget $openHoursMenuOption1Entity
$openHoursMenuOption2Target = (Get-CsOnlineUser "Support-RA@contoso.com").Identity
$openHoursMenuOption2Entity = New-CsAutoAttendantCallableEntity -Identity $openHoursMenuOption2Target -Type applicationendpoint
$openHoursMenuOption2 = New-CsAutoAttendantMenuOption -Action TransferCallToTarget -DtmfResponse Tone2 -CallTarget $openHoursMenuOption2Entity
$openHoursMenuOption4 = New-CsAutoAttendantMenuOption -Action Announcement -DtmfResponse Tone4 -Prompt $addressPrompt
$openHoursMenuOption0 = New-CsAutoAttendantMenuOption -Action TransferCallToOperator -DtmfResponse Tone0
Create Open Hours Menu
$openHoursMenu = New-CsAutoAttendantMenu -Name "Open Hours Menu" -MenuOptions @($openHoursMenuOption1, $openHoursMenuOption2, $dialbynameAAMenuOption3, $openHoursMenuOption4, $openHoursMenuOption0) -Prompt $openHoursMenuPrompt
$openHoursCallFlow = New-CsAutoAttendantCallFlow -Name "Open Hours Call Flow" -Greetings @($openHoursGreetingPrompt) -Menu $openHoursMenu
Create Auto Attendant
$autoAttendant = New-CsAutoAttendant -Name "Contoso Main" -DefaultCallFlow $openHoursCallFlow -CallFlows @($afterHoursCallFlow, $christmasCallFlow, $newyearCallFlow) -CallHandlingAssociations @($afterHoursCallHandlingAssociation, $christmasCallHandlingAssociation, $newyearCallHandlingAssociation) -LanguageId "en-US" -TimeZoneId "Eastern Standard Time" -Operator $operatorEntity
Get license types
Get-MgSubscribedSku
Create and assign Resource Account
- ApplicationID
- Auto Attendant: ce933385-9390-45d1-9512-c8d228074e07
- Call Queue: 11cd3e2e-fccb-42ad-ad00-878b93575e07
New-CsOnlineApplicationInstance -UserPrincipalName ContosoMainAA-RA@contoso.com -DisplayName "Contoso Main AA" -ApplicationID "ce933385-9390-45d1-9512-c8d228074e07"
Update-MgUser -UserId "ContosoMainAA-RA@contoso.com" -UsageLocation US
$Sku = Get-MgSubscribedSku -All | Where SkuPartNumber -eq 'contoso:PHONESYSTEM_VIRTUALUSER'
$addLicenses = @(
@{SkuId = $Sku.SkuId}
)
Set-MgUserLicense -UserId 'ContosoDialByNameAA-RA@contoso.com' -AddLicenses $addLicenses -RemoveLicenses @()
$applicationInstanceID = (Get-CsOnlineUser "ContosoMainAA-RA@contoso.com").Identity
$autoAttendantID = (Get-CsAutoAttendant -NameFilter "Contoso Main").Identity
New-CsOnlineApplicationInstanceAssociation -Identities @($applicationInstanceID) -ConfigurationID $autoAttendantID -ConfigurationType AutoAttendant
Get list of unassigned service numbers
Get-CsPhoneNumberAssignment -PstnAssignmentStatus Unassigned -CapabilitiesContain VoiceApplicationAssignment
Assign available phone number
The usage location assigned to the phone number must match the usage location assigned to the Resource Account.
Set-CsPhoneNumberAssignment -Identity ContosoMainAA-RA@contoso.com -PhoneNumber +{spare number from output of above command} -PhoneNumberType CallingPlan
Dial By Name Auto Attendant - Completion
Create Dial Scope
$salesGroupID = Find-CsGroup -SearchQuery "Sales" | % { $_.Id }
$supportGroupID = Find-CsGroup -SearchQuery "Support" | % { $_.Id }
$dialScope = New-CsAutoAttendantDialScope -GroupScope -GroupIds @($salesGroupID, $supportGroupID)
Create Prompts and Menu Options
$dialByNameMenuPrompt = New-CsAutoAttendantPrompt -TextToSpeechPrompt "Please say or enter the name of the person you would like to reach. To return to the previous menu press 9."
$dialByNameMenuOption9Target = (Get-CsOnlineUser "ContosoMainAA-RA@contoso.com").Identity
$dialByNameMenuOption9Entity = New-CsAutoAttendantCallableEntity -Identity $dialByNameMenuOption9Target -Type applicationendpoint
$dialByNameMenuOption9 = New-CsAutoAttendantMenuOption -Action TransferCallToTarget -DtmfResponse Tone9 -CallTarget $dialByNameMenuOption9Entity
$dialByNameMenu = New-CsAutoAttendantMenu -Name "Contoso Dial By Name AA" -MenuOptions @($dialByNameMenuOption9) -Prompt $dialByNameMenuPrompt
$dialByNameMenu = New-CsAutoAttendantMenu -Name "Contoso Dial By Name AA" -MenuOptions @($dialByNameMenuOption9) -Prompt $dialByNameMenuPrompt -EnableDialByName -DirectorySearchMethod ByName
$dialByNameCallFlow = New-CsAutoAttendantCallFlow -Name "Contoso Dial By Name Call Flow" -Menu $dialByNameMenu
$dialByNameAutoAttendant = New-CsAutoAttendant -Name "Contoso Dial By Name" -DefaultCallFlow $dialByNameCallFlow -LanguageId "en-US" -TimeZoneId "UTC" -Operator $operatorEntity -EnableVoiceResponse -InclusionScope $dialScope
Assign Resource Account
New-CsOnlineApplicationInstanceAssociation -Identities @($dialByNameApplicationInstanceID) -ConfigurationID $dialByNameAutoAttendant.Id -ConfigurationType AutoAttendant
Related articles
Plan for Teams Auto attendants and Call queues