Hello Readers, I hope you are well.
This is a very quick post to show you how to enable extension dialing in Microsoft Teams.
The use case should be fairly obvious. I will also add that there are better ways to reach users or service numbers than extension dialing. Dial-by-name, being the one I would recommend in most cases. But what if you need to enable it so users can dial 3 or 4 digit numbers to reach people or a call queue. It’s likely they want to do that because that’s what they were used to in the previous system. The last thing you want to do is introduce friction when migrating to a new system when you want to ensure there is adoption.
As I said, I would recommend ensuring that users are aware that they can easily search for users by name when calling them or initiating a transfer. Some will hopefully see the logic and start using the new way. But you should also know that it is possible to give the users that are used to it, a way to keep doing it the way they did it before.
My example is for a very specific use case and came from a question I received from someone through social media. They asked if it was possible to add an extension number to a call queue in Teams via Direct Routing. I said it was of course possible to assign an on-premises telephone number to a call queue. But they wanted to use an extension number in addition to the full telephone number.
I said that it was possible to get the users to dial the call queue by name. Just use the SIP address and that will result in a call to the call queue.

That will show in your call history as the display name you gave your resource account.

You can even add the address to a contact if you call it frequently.
He said that’s great, but the users want to dial the extension they used in Skype for Business. How do it do that?
If you read my blog, you’ll know I wrote a post on how to assign a direct routing number to a resource account. I tried, just to see what would happen, to add an extension to to an existing resource account in addition to the telephone number.
Set-CsOnlineApplicationInstance -id
ResourceAccount@domain.com
-OnpremPhoneNumber "+441635776443;ext=6443"
To my surprise, the Skype Online PowerShell module took the above command without error. However, I ran repeated Get-CsOnlineApplicationInstance -id
ResourceAccount@domain.com and the Phone Number attribute never updated to show the extension number. I didn’t expect it to, but wanted to make sure.
So I thought, in Skype for Business, you would do this using a normalization rule. So, knowing that the Teams Admin Centre now has dial plans, that’s where I went next.
How to do it
Open the Teams Admin Centre and expand voice and go to Dial Plans

Now click on the Global Dial Plan (or your custom dial plan) or create a new one to assign to users.

Under Normalization Rules click Add

Now just fill in the form with the details of your use case.

Give it a name
A Description is that is useful
Then a condition match
And the result
My rule was to take a 4 digit number, starting with 6 and add a prefix which was +44 (the country code) 1635 (the area code) and the last two digits before the last 4/extension number. Effectively translating the extension number into a standard (E.164) format.
You can even test the rule before you save it to see if you get the result you’re after.

If it looks good, save it. Now you will see your rule listed.

Now wait about 5 minutes and you can test it in Teams. In my case, as I said, I used it to create a 4 digit dialing rule that mapped to the direct routing DDI I had assigned to a specific resource account that was assigned to a call queue.
Testing
Dial the 4 digit number using the dial pad in Teams. That will normalize after you hit dial and it will route to the full e.164 number for your resource account and place a call to the call queue. In my case, Customer Services.

Of course, I used it for a very narrow use case. If you have a block of numbers and you want to enable extension dialing for all users, this method will work. You can narrow it down further if you have a single MSN to route/translate. I could have used the actual 4 digit extension as the starting digits. This is often used when you want to map an old extension to a new DDI range or new number.

And that’s all folks! Hope it was sueful
For more information about Normalization Rules in Teams you can read about it on the Microsoft Docs page.
thanks for the useful blog post randy! I’ve played around with dial string manipulations on the SBC to achieve similar results. This can be useful as well if the other party might not be migrated to Teams DR yet and is homed on a legacy PBX system.
LikeLike
Glad it was useful Martin. Normalization in Teams keeps it quite simple and easy for a normal Teams admin to look after. Not all of them will have SBC experience. And I know a partner can step in and help there.
One more advantage is that it is possible to configure these in PowerShell, which means they can be done in bulk and potentially automated.
I am thinking back to one of the first Lync 2010 deployments I did where the company insisted on extension dialing, but their 3 digit extension did not match the last three of their DDIs. That meant several hundred individual normalization rules to map each 3 digit extension with the correct DDI.
LikeLike
Microsoft limits the normalization rules to 50. So if your a big company with more than 50 users, you’re SOL.
LikeLike
Hello Randy. Very interesting article. Maybe you can help me. We are trying to get a solution to announce every incoming call to a Bot. This one can achieve by assigning all DIDs to Resource accounts and let the Bot redirect incoming calls to the specific user. But a Teams user needs an OnPremLinePhone (Direct Routing) number. May we assign Extension numbers to all Teams members? And can we define the outgoing DID for an extension through a policy?
LikeLike
I’ve followed the instructions and waiting 24+ hours, but keep getting the “Sorry, I couldn’t find anyone with this extension number”.
Is there something different we need to do for online numbers or AAD Sync’d tenants?
I already made the number change in our on-premise AD.
+1XXXXXXXXXX;ext=XXXX (the X’s are actual numbers 🙂 )
LikeLike
Ext=xxxx isn’t relevant in Teams. I ran the command to see if it succeeded.
You need to create a normalisation rule to normalise an extension and add the rest of the e164 number.
When you dial and extension that is covered by a rule. It should convert, then do a lookup in Teams until it finds a match against a user or a service number.
For instance. Dial 4567 and the rule adds +44207256 and makes the full number +442072564567
LikeLike
Thanks, Randy. If our legacy extensions don’t match-up to our phone numbers, are we just out of luck?
LikeLike
No. You can create one to one normalisation rules for every phone number. I did this once or twice in Lync projects. It’s a pain, especially at scale. But it’s possible.
User with legacy ext 1234
And a DDI +442072360987
Create a rule to delete all 4 digits and replace with the full e164 number.
Then repeat
Better if you can to convince them that extensions are dead and to dial by name.
Useful though for small numbers of extensions for Hunt groups etc.
LikeLike
Thanks, Randy!
Oh, I know I should convince them that extensions are dead, but I’m still trying to convince some of them that they don’t need a physical phone on their desks to make calls 😊
LikeLiked by 1 person
Hi Randy, Is there a way to have caller-ID conditional on say the area/country code called? i.e. you want UK user to have US service numbers as the caller ID when call US customers, but UK when calling UK numbers.
LikeLike
Not in Teams natively.
LikeLike
So does this mean that adding the ext=xxxx is redundant in Teams altogether? The normalisation rule on it’s own does all the work? Is it just a leftover from S4B?
LikeLike
Exactly right
LikeLike
if you want to use a dial by extension directory on an auto attendant in teams you need to have an extension listed in one of the phone number fields for that user. the normalization rules dont work for that. its odd but thats how teams does it.
LikeLiked by 1 person
Hi Randy,
this is a really nice articel.
I have a problem with german service numbers. They all are starting with 0800 123456, can you please tell me how the normalization shoud look like that teams is calling 0800 123456, actually it is always dialing +49800 123456.
Many thanks
Best Regards
Michael
LikeLike
Great article. I did as you suggested and created a new rule for each extension, whereby the if the numbe beings with the exact extension number (e.g., 123) and is exactly 3 digits then remove all 3 digits and replace with the full telephone number. The TEST works in Teams, but when calling by this it says, “Sorry, the user is unavailable.” So… not sure what’s going on — was hoping it would work. Thanks!
LikeLike
When an external PSTN caller calls inbound via an Auto-Attendant you need to enable Directory extension calling and you need to have added the ;ext=6443 to the users Azure Active Directory ‘Office’ or ‘Mobile’ field.
The Dial Plan is only useful internally to a Teams Phone System tenant.
Inbound Extension Dialing (via Auto-Attendant) can be used with just a Phone System license, which can enable use of an extension number specified in Azure Active Directory’s Office/Mobile Phone field to allow this kind of external inbound extension dialing, the user in this instance only requires Phone System license to interact with AA. Ref. https://docs.microsoft.com/en-us/microsoftteams/create-a-phone-system-auto-attendant#directory-search
LikeLike
Correct — I’m referring to my dial-plan working for internal dialing only, not for external users.
LikeLike
Hello Entagian,
Do you know if this trick works with a Resource Account ? We have a Call Queue that is supposed to have an extension and this extension should be reachable from the Auto Attendant after an inbound call. I tried to add this phone number + extension on the office phone field of the RA in Azure but doesn’t work. (and if you try to add the number directly with Set-CsOnlineApplicationInstance it also doesn’t work as the pilot number is already used for the AA, powershell is dropping an error.)
LikeLike
That’s exactly what I have configured in my tenant. Resource account has a phone number +441234775443. Dial plan has a normalization rule for ext dialing with a pattern ^(5\d{3})$ and translation +44123477$1.
This will normalize 5443 as +441234775443. It only works for internal dialing from any user with the dial plan with the rule.
LikeLike
Why do you need translate 5443 ? i f the resources account as assigned internal phone # 5443 (or assign phone number as +441234775443;ext:5443 or ext:5443)
so you can dial 5443 to reach your resource account .
LikeLike
The extension won’t work unless it’s normalised to translate the extension to the full number
LikeLike
Hi Randy, thnx for this post, this is working well for our company. Just one question: is it also possible in Teams that the number resolves to the name? Like if you press 6443 Teams will show an icon with phone number: +441635776443 but it doesn’t resolve to a name, like ‘Custimer Service’ (by your example)
LikeLike
Now that would be epic. But no. Not currently. One for Uservoice. I’d bet that’s on there
LikeLike
Hi Rany
Very useful blog – thank you.
How can we achieve that users without an full +441635776443 DID could be reached by colleagues inside the same company by a 4 digit number?
I know, we always advise customers to use names to call team members AND to assign a DID to all Users, but unfortunately there are some situations, where this kind of setup is not possible, and this feature is required.
For example.
Customer DID Range (with Direct Routing): +441635776400 to +441635776499
User A: +441635776445;ext=6445
User B: User without DID Number – Mobil Phone User only or Field Engineers for example. This User needs an Internal 4 Digit Number Only like 5045 (in addition to MS Teams).
Is there a solution with dial-plan/normaliziation rules without the need to adding an additional prefix like 9-5045 to the “old existing and known” extension 5045 of User B (used on the old on-prem PBX System).
Is there any way to achieve such a result?
Many thanks in advance for your feedback.
LikeLike
Hi Fabio,
Ext dialing in Teams is basically the same as it was in SfB, Lync and OCS. Just assign the number you want a user to be reached on and make sure there is a dial plan and normalization to make sure it gets there. I need to update the post or write a new one based on the new commandlet Set-CsPhoneNumberAssignment.
Set-CsPhoneNumberAssignment -Identity userB@domain.com -PhoneNumberType DirectRouting -PhoneNumber 5045
Wait a little while and call the user. I was able to dial +5045 from the Teams desktop client and an MTRA and it routed fine without a normalization rule in the dial plan.
Then I decided to create a normalization rule to add the + for me
Pattern: ^(50\d{2})$
Translation: +$1
After that I was able to dial 5045 and it routed to the user I assigned it to as an internal call.
I hope this helps
LikeLike
Hi Randy
Many Thanks for your reply.
I was not familiar with the Set-CsPhoneNumberAssignement commandlets as i always run the Set-CsUser – Identity -EnterpriseVoiceEnabled – HostedVoiceMail -LineURI “tel: xxxx cmdlts for our purpose.
I will setup an test enviromente and go thru with your suggestions.
Many Thanks again.
BR
LikeLike
Set-CsPhoneNumberAssignment is replacing all of the previously used methods for number assignment to make it much more straightforward. Other methods will be retired completely end of May https://admin.microsoft.com/AdminPortal/Home?ref=MessageCenter/:/messages/MC316139
LikeLike
Internal 4 digits dialing will it work with calling plan licenses as well?
LikeLike
yes. Normalization is not voice infrastructure dependent. Doesn’t matter if you’re calling plans, Operator Connect, Direct Routing or all three
LikeLike
Can you review the current steps for setting up legacy extension dialing
LikeLike