In enterprise voice infrastructure and unified communications environments, outbound Public Switched Telephone Network (PSTN) calling represents an operational telephony cost. In busy call centres, financial institutions, or multi-tenant corporate offices, users occasionally place outbound calls to conference bridges, interactive voice response (IVR) systems, or international numbers and forget to disconnect the call. In other scenarios, rogue dialler scripts, misconfigured automated alarm systems, or telecommunication toll fraud can initiate persistent PSTN connections that remain active for days, racking up thousands of dollars in carrier toll charges.
To establish safeguard controls against runaway call durations and fraudulent connection loops, Microsoft Teams Phone provides PSTN Call Duration Limit Policies. Administered via the CsTeamsPstnCallDurationLimitsPolicy cmdlets in PowerShell, these policies allow voice administrators to enforce automated maximum call duration thresholds on outbound and inbound PSTN calls. This guide demonstrates how to audit, create, modify, and assign call duration limit policies across Microsoft Teams tenants.
Architecture of PSTN Call Duration Enforcement in Teams Phone
PSTN calling in Microsoft Teams connects through Microsoft Calling Plans, Operator Connect, or Direct Routing SBC gateways. When an endpoint establishes a call traversing the PSTN interface, the Teams Call Controller initializes a session supervision timer governed by administrative policy:
MaxCallDurationMinutes: Defines the maximum duration (in minutes) an individual PSTN call can remain connected before the Teams media controller automatically initiates session termination.- Automated Warning Tone / Teardown: When the duration ceiling is reached, the Teams signaling plane issues a standard SIP
BYEmessage to the PSTN carrier gateway, terminating the call cleanly and releasing the telecom trunk. - Granular Policy Assignment: Policies can be applied globally across the entire tenant, or targeted specifically to individual users, common area phones, meeting rooms, or branch security groups via granular policy assignment.
Internal peer-to-peer VoIP calls between Teams users (Teams-to-Teams audio/video) and internal group meetings are not impacted by PSTN duration policies, ensuring that legitimate internal collaboration remains uninterrupted.
Connecting to the Microsoft Teams PowerShell Module
Configuring Teams telephony policies requires administrative privileges (Teams Administrator or Global Administrator) and the current Microsoft Teams PowerShell module (version 4.0.0 or later).
Open an elevated PowerShell session and execute:
# Install or update the Microsoft Teams module
Install-Module -Name MicrosoftTeams -Force -AllowClobber
# Authenticate to the tenant
Connect-MicrosoftTeams
Inspecting Existing PSTN Call Duration Limit Policies
Before implementing custom restrictions, review the baseline global configuration and any pre-existing policies within your Microsoft 365 tenant.
To inspect all configured call duration policies, execute:
Get-CsTeamsPstnCallDurationLimitsPolicy | Format-Table Identity, MaxCallDurationMinutes, Description
To inspect the Global tenant-wide default policy in detail:
Get-CsTeamsPstnCallDurationLimitsPolicy -Identity "Global" | Format-List *
In standard tenants, the Global baseline is typically unconfigured or set to maximum carrier defaults (e.g. 240 minutes / 4 hours) unless explicitly restricted.
Creating Custom Duration Limit Policies with New-CsTeamsPstnCallDurationLimitsPolicy
To protect against accidental dial-in loops or prevent excessive toll costs on specific cohorts—such as lobby phones, conference rooms, or temporary contractors—create dedicated policy instances.
To create a policy limiting PSTN calls to a maximum duration of 120 minutes (2 hours):
New-CsTeamsPstnCallDurationLimitsPolicy `
-Identity "Standard-PSTN-2Hour-Limit" `
-MaxCallDurationMinutes 120 `
-Description "Restricts standard employee PSTN calls to a maximum of 2 hours"
For common area phones or public lobby kiosks where long-distance or persistent calls present heightened fraud risk, create a strict 30-minute ceiling:
New-CsTeamsPstnCallDurationLimitsPolicy `
-Identity "Lobby-CommonArea-30Min-Limit" `
-MaxCallDurationMinutes 30 `
-Description "Strict 30-minute maximum call duration for public lobby phones"
Modifying Existing Policy Thresholds with Set-CsTeamsPstnCallDurationLimitsPolicy
When operational requirements change or call centre workflows demand extended connection windows, update existing policies without recreating the policy object.
To increase a policy’s duration ceiling from 120 minutes to 180 minutes (3 hours):
Set-CsTeamsPstnCallDurationLimitsPolicy `
-Identity "Standard-PSTN-2Hour-Limit" `
-MaxCallDurationMinutes 180
Verify that the updated limit was accepted by the tenant:
Get-CsTeamsPstnCallDurationLimitsPolicy -Identity "Standard-PSTN-2Hour-Limit"
Assigning Call Duration Limit Policies to Users and Device Accounts
Once custom policies are established, assign them to target users, Teams Rooms, or Common Area Phone accounts using the Grant-CsTeamsPstnCallDurationLimitsPolicy cmdlet.
To assign the policy directly to an individual user account:
Grant-CsTeamsPstnCallDurationLimitsPolicy `
-Identity "[email protected]" `
-PolicyName "Standard-PSTN-2Hour-Limit"
To assign the policy to a Common Area Phone resource account:
Grant-CsTeamsPstnCallDurationLimitsPolicy `
-Identity "[email protected]" `
-PolicyName "Lobby-CommonArea-30Min-Limit"
To verify the effective policy applied to a user or resource account:
Get-CsOnlineUser -Identity "[email protected]" | Select-Object DisplayName, UserPrincipalName, TeamsPstnCallDurationLimitsPolicy
To assign policies in bulk to members of an enterprise department or office security group:
# Assign policy by Entra ID Group ID
$GroupId = "c1d2e3f4-a5b6-7890-bcde-fa1234567890"
New-CsGroupPolicyAssignment `
-GroupId $GroupId `
-PolicyType TeamsPstnCallDurationLimitsPolicy `
-PolicyName "Standard-PSTN-2Hour-Limit" `
-Rank 1
To unassign a custom policy from a user, allowing them to inherit the Global default policy:
Grant-CsTeamsPstnCallDurationLimitsPolicy -Identity "[email protected]" -PolicyName $null
Removing Obsolete Call Duration Limit Policies
When retiring temporary project profiles or consolidating telephony settings, clean up unused policies.
Before deleting a policy, ensure it is no longer assigned to active user accounts:
Remove-CsTeamsPstnCallDurationLimitsPolicy -Identity "Lobby-CommonArea-30Min-Limit" -Confirm:$false
Auditing PSTN Call Teardowns in the Teams Admin Center and CDR Logs
To verify that duration limits are functioning properly and inspect calls terminated due to policy enforcement:
- Navigate to the Microsoft Teams Admin Center (
admin.teams.microsoft.com). - Go to Analytics & reports > Usage reports > PSTN and SMS (preview) usage.
- Select your reporting date range and click Run report.
- Inspect the Duration (seconds) column and call termination reason. Calls terminated by the policy display duration values matching your configured minute thresholds, with SIP response codes indicating administrative release, confirming successful cost control governance.