Frequent visitors to my site should know that I am a voice rock star on top of my other regular networking/wireless/server/virtualization/etc roles. One of the things I have tried to do since the very beginning of my time in voice is avoid using unnecessary shortcuts and make things work right the first time. This is no different when it comes to the likes of route patterns in Cisco Unified Communications Manager (CUCM). I speak of course of the infamous “@” route pattern.
When configuring a route pattern in CUCM, I have seen some documentation suggest that you configure your route pattern using the “@” wildcard and be done. In CUCM, the “@” is a wildcard macro that contains most of the numbering plan for North America, also known as NANP. In North America, we use 10-digit telephone numbers that are composed of a 3-digit area code followed by a 7-digit local number. The first digit of the area code cannot be a zero or a one, and the first digit of the local number cannot be a zero or a one either. The NANP format is usually represented as NXX-NXX-XXXX, where N is a number between two and nine, and X is any number. The “@” wildcard takes this information and builds several route patterns in CUCM than can match numbers that you might want to dial. However, “@” has some additional issues that have to be addressed. Often, you must configure your local area code with a route filter to allow the system to recognize when a local call is dialed. You also will need to configure things like country code and possibly even end-of-dial strings to help calls be terminated quickly. If these items are not configured properly, CUCM will have to wait for the interdigit timeout to expire before deciding to send the dialed digits to the PSTN gateway. By default, this interdigit timeout is 15 seconds, which can be an eternity to a user.
In my career, I have never used the “@” wildcard. I have always configured my own route patterns. To me, it looks much cleaner and is easier to troubleshoot rather than having to unwind a shortcut macro. For the following examples, “9” is used as a pre-dot PSTN access code and is assumed to be stripped at some point before arriving at the PSTN.
911 and 9.911 – Emergency services route patterns. You need to have these or your people can’t dial emergency services. If you’d like to read more about my reasons for configuring both route patterns, check it out over here.
9.[2-8]XX – Service codes. These are defined by NANP to provide 3-digit access to special services. There is no 111 access code. I don’t include 911 in this configuration due to the explicit urgent priority pattern configured explicitly for emergency services.
9.1[2-9]XX[2-9]XXXXXX – Long Distance. Most long distance providers in the country use “1” to signal that a long distance call outside of your area code is being made. This route pattern looks for an 10-digit number prefixed with “91” The “1” is sent with the number to signal a long distance call. This is pretty straight forward and will likely be required on all route plans.
9.011! – International calls. I still configure international call route patterns even if my customers don’t care for them. I limit their use via Calling Search Spaces (CSS). It’s better to have the route pattern configured and available to turn on at a moment’s notice in case the CxO starts asking why he can’t call London or Tokyo. I use a “!” at the end of the route pattern to signal that there could be any number of digits after “011”, which is the international access code for the United States. The caveat is that you must wait for the interdigit timeout to expire before the call is dialed. You can add an octothorpe (#) after the “!” to signal that you are done dialing digits, but if that is your only route pattern, you must dial the # or the call will not go through.
The remaining two route patterns that get configured are a little trickier and often cause issues on the system depending on how they are configured. Local calling is different depending on where you live. Some metropolitan areas are still on the small side, so you are allowed to dial only seven digits to complete a call. This is true where I live in Oklahoma City, which is totally contained in the 405 area code. In other areas, such as Dallas/Ft. Worth or New York City, there are so many telephone numbers that you must use a full 10 digit number to make a call. As more and more phones are sold and activated, especially cellular phones, the move to 10-digit dialing for most everyone is inevitable. Until the day when 10 digits are universal, there are somethings to keep in mind for route patterns.
9.[2-9]XXXXXX is used for 7-digit dialing for local calls. 9.[2-9]XX[2-9]XXXXXX is used for 10-digit local calling. If both of these route patterns are configured on the system at the same time, there can be issues. In the best case, users must wait for the interdigit timeout to expire on local calls, since when only 7 digits are dialed CUCM is still waiting to see which route pattern to match for the call to complete. In the future, there will be no use for the 7-digit pattern, and only the 10-digit pattern will be present. Until that time, here’s a trick you can use to help avoid the interdigit timeout for local calls.
Configure the 7-digit pattern for your local calls. If you live in an area like I do where some calls inside your area code can be dialed at 10-digit and not be long distance, i.e. not prefixed with a “1”, then configure a 10-digit route pattern with the explicit area code set, such as 9.405[2-9]XXXXXX. You don’t need to configure a 10-digit route pattern in this case, since any non-local call outside your area code will require a “1” to dial. This will help you avoid the interdigit timeout on local calls, which should keep your users from rioting. When your city or county or area code finally implements an overlay area code and starts requiring the use of 10-digit dialing, simply remove the explict area code route pattern (9.405[2-9]XXXXXX in the above example) and the 7-digit route pattern and configure the 10-digit route pattern, 9.[2-9]XX[2-9]XXXXXX.
This should be enough to help you configure all of your NANP dialing needs without the horror that is 9.@. Much like the <none> partition, 9.@ is a dirty crutch that usually ends up doing more harm than good, especially when it comes time to troubleshoot odd behavior of route patterns and why one is being overridden by something you can’t even see. By having your route patterns explicitly configured, you not only gain more control over your dialing domain, but you also have the ability to block specific route patterns such as 900 numbers or those nasty Carribean international calls without fear that a crusty old shortcut is still in your system causing you grief and and costing you money.
I’m sure a networking and voice rock star would be acutely aware of the international nature of the internet… The @ system is a macro for the dial plan you have installed which is NANP on cucm by default but can be changed to any other dial plan downloaded from cisco.com
All of my new installs for the last few years have been without the @. It is not fun to support with using a line blocking CSS methodology either. You can still block Caribbean area codes with @ but you end up with the Route Filter of DOOM, I got a copy of it laying around somewhere.
I would like to hear from some non-NANP users to see if they make use of the @ and if they find it useful.
Now with CUCM 7.x+ and the BAT Import/Export feature for everything, manually setting up dozens of route patterns & CSSs is trivial, and you can reduce CSS sprawl even further if you can support the Local Route Group in your design.
I manage cucm for employer in the uk and thus use the uknp (aka gbnp). We inherited the instal from the system integrator and it uses @. We have not had cause to change it yet though I definitely agree with the principal of configuring route patterns from scratch so maybe one day.
The only problem encountered so far is it apparently did not contain the full range of uk mobile (cell) numbers so I have had to add one patten manually
Pingback: When traces lie… « Just another day at the office…
Pingback: Dial Plan Considerations | The Networking Nerd
For service codes, I think instead of 9.[2-8]XX you actually meant to write 9.[2-9]11 otherwise it would match pretty much every call.
For international patterns I like to use 9.011[2-9]! since there is no 0 country-code, and country code 1 should never be dialed as international if that’s the country you are in. Some ITSPs bill very expensive rates for NANP calls dialed as 0111NXXNXXXXXX, which your pattern would allow.
If you do not use wild cards then why the extra work and mess when you can have Router filters correctly handle all of this for you. If ever you managed a world wide system with hundreds of sites in over a dozen dial plans you will understand why router filters make things easy. This is also true when you have over a dozen admins in the system as they can chose a PROVEN route filter and run with it. I have made more money fixing the mess that is above than anything else since your using a TDM design on a VOIP system.
Loved the point of view that the 9.@ is evil and should be banished from the kingdom. Hate it myself…. until I had to develop route patterns that figured out if 9.1xxxxxxxxx was in the local calling area or was long distance. Router filters saved the day, but require the 9.@.
Here’s a question. What would be the pros /cons in looking to remove “9.” totally?? We are all 10 digit dialing for the province now so we are thinking why make users add a 9. 4 digit internal / 10 external.
I use @ because we often implement TEHO routes, and without the @ and RF, it will be a mess to implement this. So it’s very usefull to use it. think about overlaping rate center that have some number share between them, you need to specify the office-code. Good luck with your static route 🙂