How to Configure Teams Busy on Busy Call Policies in PowerShell Using CsTeamsCallingPolicy

Inbound Call Contention and the Busy on Busy Mechanism in Teams

In enterprise telephony, call handling rules dictate how incoming Voice over IP (VoIP) and Public Switched Telephone Network (PSTN) calls are processed when the targeted user is already engaged in an active conversation or participating in a meeting. By default, Microsoft Teams Phone employs standard call waiting: when an employee is on a call, an incoming secondary call plays audible call-waiting chimes into the user’s headset and displays an alert banner on their screen.

While call waiting provides awareness of secondary calls, it causes disruption during sensitive business interactions—such as client consultations, executive briefings, technical support calls, or formal presentations. Furthermore, in call centre and customer service environments, having a second call ring a busy agent instead of routing to an available peer or queue undermines telephony efficiency.

To address this contention, Microsoft Teams provides the Busy on Busy (also referred to as Busy on Busy Options) setting, governed through TeamsCallingPolicy in the MicrosoftTeams PowerShell module. The core parameter controlling this functionality is BusyOnBusyEnabledType. By configuring this parameter programmatically, administrators can instruct the Teams telephony infrastructure to reject secondary incoming calls with a busy tone or immediately redirect them to voicemail or delegated colleagues without ringing the busy user’s active client.

Connecting to Microsoft Teams PowerShell

To inspect and update calling policies, ensure the latest stable release of the MicrosoftTeams PowerShell module is installed. Connect to your Microsoft 365 tenant using an administrative account assigned the Teams Administrator or Global Administrator role:

# Install or update Microsoft Teams PowerShell module
Install-Module -Name MicrosoftTeams -Scope CurrentUser -Force -AllowClobber

# Establish authenticated tenant session
Connect-MicrosoftTeams

Auditing Existing Busy on Busy Settings in CsTeamsCallingPolicy

Before applying modifications, inspect the current Busy on Busy configuration across your tenant calling policies using Get-CsTeamsCallingPolicy:

# Query Busy on Busy configuration across all calling policies
Get-CsTeamsCallingPolicy | Select-Object Identity, BusyOnBusyEnabledType, AllowCallForwardingToUser, AllowCallForwardingToPhone

The cmdlet output enumerates the policy identities and their configured routing behaviors:

Identity                 : Global
BusyOnBusyEnabledType    : Disabled
AllowCallForwardingToUser: True
AllowCallForwardingToPhone: True

In default tenant configurations, BusyOnBusyEnabledType is set to Disabled, meaning standard call waiting is active for all users.

Understanding BusyOnBusyEnabledType Parameters

The BusyOnBusyEnabledType parameter accepts three distinct operational values:

  • Disabled (Default): Standard call waiting behavior. Incoming calls ring through to the user’s endpoint, playing call-waiting audio chimes while the user is engaged in an active call or meeting.
  • Enabled: Rejects the incoming call with an immediate busy signal. For PSTN callers, the carrier generates a busy tone (SIP 486 Busy Here). For internal Teams callers, the client displays a “User is busy” notification.
  • Unanswered: Bypasses the user’s active client and routes the secondary call directly according to the user’s unanswered call rules (configured via Set-CsUserCallingSettings). The call diverts seamlessly to voicemail, a call delegation group, or an alternate colleague without interrupting the busy user.

Configuring Busy on Busy Globally for All Users

If your organization decides to eliminate call waiting disruptions enterprise-wide and route secondary calls directly to voicemail or coverage delegates, update the tenant-wide Global policy using Set-CsTeamsCallingPolicy:

# Configure Busy on Busy to route secondary calls to unanswered destinations
Set-CsTeamsCallingPolicy -Identity "Global" -BusyOnBusyEnabledType Unanswered

Alternatively, to return a traditional busy signal to callers whenever an employee is already on a call:

# Configure Busy on Busy to reject secondary calls with busy tone
Set-CsTeamsCallingPolicy -Identity "Global" -BusyOnBusyEnabledType Enabled

Creating Scoped Calling Policies for Specific Departments

In many enterprise organizations, different teams require different call-handling policies. For example, technical support specialists and executive leadership may prefer Unanswered to protect meeting focus, while sales representatives may require Disabled (call waiting) to ensure they never miss urgent prospect calls.

To create a dedicated calling policy for executive and support staff:

# Create custom calling policy with Busy on Busy set to Unanswered
New-CsTeamsCallingPolicy -Identity "ExecutiveCallingPolicy" `
    -BusyOnBusyEnabledType Unanswered `
    -AllowCallForwardingToUser $true `
    -AllowCallForwardingToPhone $true

To update an existing custom calling policy:

# Update existing custom policy
Set-CsTeamsCallingPolicy -Identity "SupportCallingPolicy" `
    -BusyOnBusyEnabledType Enabled

Assigning Calling Policies to Target Users

Once defined, assign custom calling policies to individual user accounts using Grant-CsTeamsCallingPolicy:

# Assign custom calling policy to an individual user
Grant-CsTeamsCallingPolicy -Identity "[email protected]" -PolicyName "ExecutiveCallingPolicy"

To assign the policy en masse across all members of a department security group in Microsoft Entra ID:

# Assign calling policy across an entire Entra ID security group
$GroupId = (Get-MgGroup -Filter "DisplayName eq 'Executive Staff'").Id
New-CsGroupPolicyAssignment -GroupId $GroupId `
    -PolicyType TeamsCallingPolicy `
    -PolicyName "ExecutiveCallingPolicy" `
    -Rank 1

To verify the effective policy applied to a user account:

# Confirm effective calling policy assignment
Get-CsUserPolicyAssignment -Identity "[email protected]" -PolicyType TeamsCallingPolicy

Verifying Interaction with User Calling Settings

When using BusyOnBusyEnabledType Unanswered, verify that the target user has a valid unanswered call destination configured (such as voicemail or call delegation) using Get-CsUserCallingSettings:

# Inspect user's unanswered call routing state
Get-CsUserCallingSettings -Identity "[email protected]" | Select-Object Identity, IsUnansweredEnabled, UnansweredTargetType, UnansweredTarget

If unanswered routing is enabled with UnansweredTargetType Voicemail, secondary calls route directly to the user’s voicemail inbox without delay.

Configuring BusyOnBusyEnabledType in PowerShell provides precise administrative control over inbound call routing, safeguarding employees from unwanted call interruptions and streamlining enterprise telephony operations.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.