Microsoft Teams dial by extension

Microsoft Teams Dial By Extension

It is common in larger organisations for users to have internal extension numbers rather than direct dial numbers. The reason is more often down to cost as direct dial (DDI) numbers are rented on a monthly basis from the telecoms service provider. Although the cost of renting a DDI can be as low as £1 per month, when companies have several thousands of DDI numbers, this quickly escalates.

Therefore, extensions for users is preferred for those who do not require a direct number but still require the ability to make outbound business calls.

Extensions are internal numbers that are controlled on the company’s PBX system. They are for internal use only and cannot be called directly from the Public Switched Telephone Network (PSTN), or outside of the company. The PBX takes care of the internal routing which allows users to dial 57891 to reach ‘George Dennis’ for example, and is unique to that PBX.

Difficulties arise when these extension users want to receive incoming calls from external callers. How can they do this?

Option 1 is to employ a company switchboard. The caller dials the switchboard number and an operator answers and greets the caller. The caller asks the operator to connect them to ‘George Dennis’ and the operator searches an internal phone directory to find George’s extension and then transfers the caller to that extension.

Option 2 is to use software. Using an automated directory services application, or auto attendant as it is known, performs the same function as the operator in option 1 but without the dependency on a human answering the phone. Instead, the auto attendant will prompt the caller to enter the extension number of the person they want to speak with. The caller will use their dialpad and enter the extension number and the auto attendant will transfer the caller to that extension.

Option 2 is more favourable to companies because they do not need to employ dedicated staff to support this service.

Auto Attendants have been available in PBXs for a number of years. However, until recently, Microsoft Teams has not been able to support this.

Extension Dialing in Microsoft Teams

To enable extension dialing in Microsoft Teams you will need an auto attendant and also some configuration of your Active Directory.

Before creating the auto attendant it is important to get your Active Directory into a supportable state for extension dialing in Teams.

Security Groups

By default, the auto attendant will search for extensions in your entire AzureAD. This may include extensions that you do not want to expose to external callers such as executives. In order to limit the auto attendant search to approved users, create a security group in AzureAD (this can also be an AD synched group) to exclude the users you do not want the attendant to search and transfer callers to.

Once you have created this group, add the members who need to be excluded.

Telephone Field in AzureAD

In order for the auto attendant to find users by extension number, their telephone field in AzureAD must be properly formatted. The auto attendant will search AzureAD for the extension number before transferring the call to that extension in Teams. Therefore, the telephone number field needs to match a specific format.

If you use on-prem Active Directory with AzureAD synch, then the telephone attribute in AD is the source of authority and this must be in the correct format to synchronise to AzureAD.

The format must be one of the following:


x is a literal character which define eXtension. 12345 represents the extension number. If you wish to include the board number in their telephone number field e.g. +441234567890, you must use the full E.164 format and not standard format. More information on the supported formats can be found here.

If you are using cloud managed identities in AzureAD, you can apply extensions using AzureAD PowerShell

Set-MsolUser -UserPrincipalName [email protected] -Phonenumber "+441234567890x12345"

If you are using on-prem Active Directory you can use AD PowerShell to set the telephone field

Set-ADUser -Identity user -Add @{telephonenumber="+441234567890x12345"}

Once this is complete, you will need to either wait for or force AzureAD synchronization.

Creating the Teams Auto Attendant for Extension Dialing

Now that your AzureAD and users are configured properly, you can configure your auto attendant.

For this part of the blog, we assume that you know how to create an auto attendant at a basic level. The Resource Account for the auto attendant must have the Teams Phone System Resource Account License assigned to it as this auto attendant will be assigned a direct phone number. Make sure that this has been assigned before proceeding.

First, assign the phone number to the resource account that external people will call.

When editing the auto attendant, on the call flow page in the Teams Admin Center, make sure the following settings are configured to enable extension dialing for Teams.

Microsoft Teams dial by extension settings

Under call routing options, click ‘Play menu options’. Add a greeting. This can be custom recorded or using Text to Speech. In your greeting, make sure to instruct the caller what to do e.g. “If you know the extension of the person you want to speak to, enter it now followed by the # key“. Then under ‘Directory Search’ select ‘Dial by extension’ and press next.

You do not need to set any key options if you do not have a need to.

TIP: Set an operator for the auto attendant for callers to reach in the event they cannot be connected to a user for the best customer service experience.

Continue through the steps of the auto attendant, completing out of hours and holiday handling as required. You will then come to the ‘Dial Scope’ setting. Here is where you’ll exclude the security group containing all users who cannot be called via the auto attendant.

Restricting callers when calling extension numbers in Microsoft Teams

Save the auto attendant to complete the configuration.

Teams User Configuration

For callers to be able to reach users when dialing by extension via a Teams auto attendant they must also be licensed for Microsoft Teams Phone System. It is not supported for non-enterprise voice enabled users to receive transferred calls from external sources.

Once the user is licensed for Teams Phone System they must be enabled for enterprise voice. They MUST be assigned the same number in their Teams LineURI as the one set in their AzureAD telephone field. Microsoft Teams does not check that the number assigned in the user’s LineURI is the same as the one found in their AzureAD account or vice versa. The two properties are mutually exclusive but are reliant on having the same data in them.

If you have x12345 configured in AzureAD telephone number field but in Teams for the same user you have their extension saved as 2346, they will not be called by the auto attendant. If another user has extension 12345, then the auto attendant will connect the caller to the wrong user.

Testing Dial by Extension in Teams

You are now ready to test Microsoft Teams dial by extension using auto attendants. Call the number you assigned to the auto attendant and enter the extension number of the user you want to reach. You should be connected.

But this is only part of the calling story for these users. What if internal users want to call a Teams user extension?

Internal Calling for Extension Users in Teams

Calling internally using Microsoft Teams it is best practice to search for the user you wish to call via name rather than extension number. However, the problem arises when users need to call internal services rather than specific users. These services could be security, a canteen on a certain floor, HR, Finance, First Aid in a specific building etc. etc.

Where organisations have one number for each of these services it is easy to communicate company wide that to call ‘First Aid’ in Teams, they just need to search for ‘First Aid’ in Teams and call the single user account that is found.

Where there might be multiple numbers for the same service depending on building location, it is harder for the users to call the right service for them as multiple records will be found. However, it will be easier for them to remember an extension number.

Using extension numbers, you can allow users to dial ‘7777’ to reach First Aid no matter what location they are at and route the caller to the correct first aid station in that location.

To configure this you will need to create a dial plan in Teams for each location and assign it to users within it. In the dial plan you will need to create a transformation rule that will transform the extension number to the unique number for that location’s service account e.g. first aid.

Dial Plan in Teams

Internal Calling from PBX to Extension Users in Teams

In companies that have disparate phone systems with a number of users in Teams and another set on a PBX, being able to call between these systems becomes a critical business requirement.

With Microsoft Teams, it is only possible to interconnect with PBX users if the Teams user is configured for Direct Routing. If the Teams user is configured for Microsoft Calling Plan or Operator Connect, then the only way in which a native PBX user can call the Teams user is by dialing their DDI number.

If the Teams user is a Direct Routing enabled user, then PBX users will be able to call these Teams users using their extension number.

In order for this to happen, the Teams user’s LineURI must be configured in the format of +441234567890;ext=12345.

This can be set in the Teams Admin Center, or by Teams PowerShell.

Assigning an extension in Teams

The PowerShell command is

Set-CsPhoneNumberAssignment -Identity [email protected] -PhoneNumber "+441234567890;ext=12345" -PhoneNumberType DirectRouting

Once this is set, you will need to configure your Direct Routing SBC to prepend the shared CLI and ext= to the called number transformation rules before the call is sent to Teams. You’ll also need to update the routing rules on your PBX to route Teams extensions out to your Teams SBC.

External Calling for Extension Users in Microsoft Teams

It is possible to grant outbound external calling for users with extension numbers in Teams using Direct Routing.

As their extension number is not a public number, if you simply assigned them a voice routing policy to route their calls to your SBC and onto your carrier, one of two things will occur.

  1. The call may be denied by your carrier due to invalid Caller ID
  2. The call may be processed by your carrier but the Caller Display will be set to ‘Anonymous’

The problem with anonymous calls is that the receipient answer rate for these calls is significantly lower than calls with a Caller Display. This burns time and resources in trying to repeatedly contact the customer until they answer. Compounding the problem even more, should the recipient ignore the anonymous call and leave it to voicemail, the caller will verbally leave a message and a number to call back on (which will be the auto attendant number).

However, because voicemail systems cannot call back numbers verbally left within the message, this requires the listener to remember (or write it down) the number and then place the return call manually.

This almost never happens because it is too much effort for them so messages get ignored, creating a viscious circle.

Best practice is of course to present a callable number to the recipient and one that your carrier can approve. This number should be the number your auto attendant is configured for allowing the caller to call back and together with the information left in a voicemail e.g. “Please call me back on extension 12345” is infinitely easier to remember for a caller to enter when prompted.

To facilitate this in Teams, you can use Caller ID Policies.

Caller ID Policies allow you to substitute the Caller ID of a user which is derived from their Teams LineURI with another number i.e. the auto attendant number.

To do this, create a Caller ID Policy in the Teams Admin Center and change the ‘Replace Caller ID with’ setting to ‘Resource Account’ followed by ‘Replace the Caller ID with this Resource Account’ to the resource account name attached to the auto attendant providing the dial by extension functionality.

Caller ID policy change in Teams

Once created, you will need to assign this policy to the users with the extension numbers. This can be done in the Teams Admin Center. However, if you want to bulk assign this, PowerShell is required.

Grant-CsCallingLineIdenity -Identity [email protected] -PolicyName "PolicyName"

Finally, you will need to ensure the Resource Account for the auto attendant is assigned the correct voice routing policy to route calls via your Direct Routing SBC.

Grant-CsOnlineVoiceRoutingPolicy -Identity [email protected] -PolicyName "RoutingPolicyName"

How Callroute Can Simplify Extension Dialing

Using Callroute, you can simplify dial by extension in Teams by using our self-service portal and auto provisioning solution.

Our self-service portal allows you to connect your own carrier to Teams and combined with complete number management you can assign inbound numbers to your users and resource accounts in a click of a button with no PowerShell or Teams Admin Center knowledge. We will automatically assign dial plans and voice routing policies so that the accounts are properly configured.

Using our automated provisioning solution that synchonises with your AzureAD, Callroute will read the telephone number field and automatically assign the LineURI to the Teams user during its synchronisation. You can of course override this manually within our portal if required.

If this sounds like something that your company could benefit from, why not schedule a demo?

Some Other Articles You Might Like

Intermittent Microsoft Teams calling issues reported globally. This issue appears to be affecting all Microsoft customers worldwide. Microsoft are currently investigating the issue. All Callroute systems are fully operational. More information will be provided as soon as possible.