From the MVPs: Using Lync Server 2013 calling number translation rules to change display number

This is the 25th in our series of guest posts by Microsoft Most Valued Professionals (MVPs). You can click the “MVPs” tag in the right column to see all the articles.

Since the early 1990s, Microsoft has recognized technology champions around the world with the MVP Award. MVPs freely share their knowledge, real-world experience, and impartial and objective feedback to help people enhance the way they use technology. Of the millions of individuals who participate in technology communities, around 4,000 are recognized as Microsoft MVPs. You can read more original MVP-authored content on the Microsoft MVP Award Program Blog.

This post is by Ståle Hansen, a Lync MVP. His blog is Thanks very much, Ståle!

Ståle here. A new feature for Enterprise Voice in Lync Server 2013 is the ability to change the display number for users when they dial out. This could be useful in several scenarios:

  • When you do not have enough numbers on the trunk for all your users
  • When users do not want to show their Direct Inward Dialing (DID) number
  • When a group of people want to show their call center or switchboard number

About the feature

This feature is configured on the trunk that can be found in the Lync control panel under Voice Routing -> Trunk Configuration -> <Site Trunk or Pool Trunk>. At the bottom of your trunk configuration page you have two options:

  • Calling number translation rules
    • It is here you can change the number displayed for a specific DID number or number series.
  • Called number translation rules
    • This will manipulate the number you have called so that it will be received correctly on the other side by the trunk.
    • You can change the format of the number like removing + or add a zero.

How to configure it

    1. Navigate to the trunk you want to configure and click Edit -> Show details….
    2. Scroll down to the bottom of the page.


    1. Under Calling number translation rules, click New.
    2. Enter the regex that fits your needs in terms of manipulating the numbers:
        • Maybe you want to remove some of the last digits to replace them with something else
        • Maybe you want to replace the entire number and show a completely different number
    3. After configuring your rule, click OK to save the rule.
    4. For the rule to take effect, you need to click OK on you trunk configuration, click the Commit button and Commit all.
    5. Accept the changes you made by clicking OK.
    6. You can test your rule by going back in to the Trunk Configuration and scrolling down to the bottom of the page.
    7. Type the number you want to manipulate in the Phone number to test field and clicking Go.
    8. See that your number will change to the number you want to be displayed.


We have now configured a simple Calling number translation rule. The regex builder does not support advanced expressions, so you may need to make the rules yourself.

Notes from the field

At a customer site I have seen trouble with using this approach when the customer also uses a third-party Lync call center product. The scenario was that it worked for a while, but after a week in production, the user became unable to place calls over the trunk or Lync to Lync. Changing the number to a non-manipulated number resolved the issue. I am not sure if it was a bug or that the third-party product interfered with the feature. You should pilot this feature in your deployment over one or two weeks before you roll it out in your organization.

You should give the different users different numbers that normalize to the number you want to display. Do not use extensions because that will not work and the number will not be normalized.


There is another method to do this and this method where available in Lync Server 2010 as well. You can give the same number to different users and use extensions

    1. Assign the switchboard or other function a DID number with an extension: tel:+4798989800;ext=1.
    2. Assign the same DID number to the other users that will show the same number and use different extension:
      • tel:+4798989800;ext=1101
      • tel:+4798989800;ext=1102
      • tel:+4798989800;ext=1103
    3. When these users dial out, the extension will not be displayed and the correct number will show.
    4. To normalize the incoming number correct, create a pool trunk configuration and choose the gateway you expect the call to come from.
    5. In called number translation rules, create a rule to add ;ext=1 to the number like this:


All inbound calls will now be routed to the user or queue assigned with ;ext=1. Everyone will show the same number when dialing out, since extensions will not be shown.

There are, however, some lessons learned using this approach. Fellow Lync MVP Ken Lasko has documented some scenarios where this approach will not work and I have experienced them in Lync Server 2013 as well. The problem is that the mediation server may decline the incoming call with the error code 485 Ambiguous call. This is because it thinks the same number is assigned to several users. The problem is actually related to the + sign; if you remove this, it will work. The workaround to this is therefore:

  1. If you are using a SIP provider, they may be able to not send the + to your Lync server. Call your provider and ask if this is an option.
  2. If you are using a PSTN gateway or IP-PBX that is sending a +, you should be able to easily modify the incoming rule to drop the + sign (as your rule is most likely explicitly adding a +).
  3. Create an MSPL script to forward the incoming number to the auto attendant directly.


Using the new feature in Lync Server 2013 to change the display number is an easy approach to control what number is shown externally. I hope this gives you some idea of the potential in outbound normalization of the calling number in Lync Server 2013.

Comments (2)
  1. Ståle Hansen says:

    An update to this post regarding the pattern for the calling number translation rules. I stated in the article that you need to bevare of using extension with this. There is a solution for that as well. You can add (s*S*)* at the end of the pattern. The pattern in the first example will then be like this: ^+475005(s*S*)*$. In order to do this you need to edit the pattern and insert it manually. I have tested this approach in the field with success. Doug Deitterick also encountered this issue and solved it adding(;ext=d{4})? at the end before $. Read Doug's post about it here:…/issue-with-calling-number-translation-rules-and-e-164-extensions.aspx

    You still need to be aware of incomming calls using this approach though because of the possibility of ambiguous call. I solved this at the customer using a dummynumber range for those users so the incoming number would be unique.



  2. How many entries we can put into calling translation ?

    What about performance if we add for example 1000 entries ?

Comments are closed.

Skip to main content