The usual way to block these numbers was to program an exception for them in the relevant route regular expression. I was on my way to figuring out how to programatically do this through the Optimizer when I stumbled upon this little gem of a post from Brian Rubart's UC Blog. He came up with the brilliant idea to use the Lync Announcement and Unassigned Number service to block these numbers. So, rather than just returning an uninformative fast-busy when someone tries to call a premium rate number, the Announcement service will tell the user why the call cannot be completed.
The only downside I can see to dealing with premium numbers in this manner is that its a setting that will affect all users. There isn't a way to allow specific people to call premium rate numbers.
In the latest revision of the Dialing Rule Optimizer, you now have the option to use the Announcement service to block premium rate numbers. All you need to do is to put a checkmark beside Block Premium Numbers. It will create the relevant Powershell commands at the bottom of the resulting PS1 file.
The Powershell commands will create the announcement using text-to-speech synthesis in the language of the selected country. You can modify the announcement text as you see fit. You can also modify the default premium number ranges or add your own if you wish.
An example is below. Don't try to run these commands outside of the context of the Optimizer-generated script. It relies on variables set earlier in the script:
New-CsAnnouncement -Parent $AppSrv.Identity -Name 'Announce_BlockedNumber_NA' -TextToSpeechPrompt 'The number you have dialed is prohibited due to corporate policy. If you need to reach this number, please notify your manager.' -Language 'en-US'
New-CsUnassignedNumber -Identity 'PremiumRate_NA_1' -NumberRangeStart '+19002000000' -NumberRangeEnd '+19009999999' –AnnouncementService $AppSrv.Identity -AnnouncementName 'Announce_BlockedNumber_NA'
New-CsUnassignedNumber -Identity 'PremiumRate_NA_2' -NumberRangeStart '+19762000000' -NumberRangeEnd '+19769999999' –AnnouncementService $AppSrv.Identity -AnnouncementName 'Announce_BlockedNumber_NA'
If you are so inclined, instead of using text-to-speech, you can use an audio file (in WAV/WMA format). Import the file using the Import-CSAnnouncementFile command as below...
$a = Get-Content ".\GreetingFile.wav" -ReadCount 0 -Encoding Byte...and then assign it to the announcement using the -AudioFilePrompt switch in the New-CSAnnouncement command.
Import-CsAnnouncementFile -Parent ApplicationServer:redmond.litwareinc.com -FileName "WelcomeMessage.wav" -Content $a
You can also send blocked calls to a SIP URI like sip:email@example.com or a phone number like "sip:+firstname.lastname@example.org;user=phone", by using the -TargetURI switch in the New-CSAnnouncement command. That way, you can shame your users verbally when they try to call blocked numbers. Fun times!
If you have any suggestions for additional features, corrections to the premium number list, or if you can help me correct the Google-translated text I used for the other languages supported by the Optimizer, please drop me a line.