As any half-decent taxidermist will tell you, there’s more than one way to skin a cat.
And so it is with Skype for Business. The clever bit is determining the best method to use when faced with a given challenge. Occasionally you’ll encounter a complicated job-sharing or multiple-hop call distribution scenario that doesn’t fit the basic user config parameters of Team Calling or Delegates. We usually tend to reach into the “kit”-bag (do you like what I did there?) and whip out a quick Response Group if we need a basic IVR, some time-of-day automation, or the sorts of call distribution and overflow that the RGS can deliver.
Another neat solution is to create a “dummy” user in AD and have it permanently “Team Calling” perhaps two users sharing the same role. During the day the calls go to which-ever of the two is signed in, and after hours or any time neither is in, the calls automatically route to the shared voicemail box.
If someone leaves and you want to “piggyback” their number on yours, a simple called number transformation rule in your SBC will usually suffice.
Enter Unassigned Number trickery…
My colleague Glen T recently showed me another approach employed by one of our customers. They’d configured CsUnassignedNumber “ranges” that spanned only a single number, and calls to that “range” (number) were instantly forwarded to someone else. I agreed with his observation that that was a neat alternative to the SBC piggyback approach, and it’s also able to capture internal calls: you can delete that user’s account from SfB but leave the number still allocated to their AD account now resident in your Deleted Users OU, and people looking for them still find them in the Address Book and are redirected as required.
Except it wouldn’t work from a VVX – the caller would hear one burst of ringback tone and then the call would terminate.
Here’s the test setup I created in my lab to dupe the issue. As you can see the “range” encompasses only one number:
PS C:\_Install\Scripts> New-CsAnnouncement -Identity ApplicationServer:s4b2015se.contoso.com -Name "Forward without Announcement" -TargetUri "sip:greig@contoso.com" Identity : Service:ApplicationServer:s4b2015se.contoso.com/57a-GUID-BLAH-79ac Name : Forward without Announcement AudioFilePrompt : TextToSpeechPrompt : Language : TargetUri : sip:greig@contoso.com AnnouncementId : 57a-GUID-BLAH-79ac PS C:\_Install\Scripts> PS C:\_Install\Scripts> New-CsUnassignedNumber -Identity "CTVN without announcement" -NumberRangeStart tel:+61270001291 -NumberRangeEnd tel:+61270001291 -AnnouncementService applicationserver:s4b2015se.contoso.local -AnnouncementName "forward without announcement" AnnouncementServiceId : ApplicationServer:s4b2015se.contoso.com AnnouncementServerFqdn : s4b2015se.contoso.com AnnouncementName : Forward without Announcement AnnouncementId : 57a-GUID-BLAH-79ac Identity : CTVN without announcement NumberRangeStart : tel:+61270001291 NumberRangeEnd : tel:+61270001291 Priority : 1 PS C:\_Install\Scripts>
If you call this “unassigned” number from an SfB client or the PSTN, the call will present to me as expected.
If you call it from a VVX, the caller hears one burst of ringback tone and then the call terminates.
The fix?
The neat fix Glen found was that you only need to provide some kind of message in the UnassignedNumber handling – and my good friend “1s-Silence.wav” was sufficient.
With the config above, this is all I needed to add to retrofit the solution. (Yes you need a short wave-file. Try this one with my compliments).
PS C:\_Install\Scripts> Get-Content "c:\1s-Silence.wav" -ReadCount 0 -Encoding Byte | Import-CsAnnouncementFile -Parent ApplicationServer:s4b2015se.contoso.com -FileName "1s-Silence.wav" PS C:\_Install\Scripts> Set-CsAnnouncement -identity "Service:ApplicationServer:s4b2015se.contoso.com/57a-GUID-BLAH-79ac" -AudioFilePrompt "1s-Silence.wav"
Here’s the resulting “announcement”:
PS C:\_Install\Scripts> Get-CsAnnouncement -identity "Service:ApplicationServer:s4b2015se.contoso.com/57a-GUID-BLAH-79ac" Identity : Service:ApplicationServer:s4b2015se.contoso.com/57a-GUID-BLAH-79ac Name : Forward without Announcement AudioFilePrompt : 1s-Silence.wav TextToSpeechPrompt : Language : TargetUri : sip:greig@contoso.com AnnouncementId : 57a-GUID-BLAH-79ac PS C:\_Install\Scripts>
With the above in situ, all was a source of joy.
Postscript
- Whilst broken in releases up to and including 5.5.1.11526, the issue appears to have been fixed in the latest UC certified firmware versions 5.5.2.8571 & 5.6.0.17325, so a firmware update is likely to be all you need.
- If you’re feeling so inclined, I’m fairly confident adding a text-to-speech prompt like “please hold your call is being transferred” would work too – but that gives the game away.
- My original “silence.wav” (*much* closer to 0s duration and enough to fool Exchange Auto-Attendants) didn’t cut it, so I went with the 1s version we have here now. You might choose – or need – to tinker with the duration if 1s doesn’t work for you.
- Whilst the use of CsUnassignedNumbers is a clever approach to a redirect, it has one critical weakness in that the number it’s using will flag up as vacant in all scripts that test for vacant number – including “mine” (appropriated from Ståle) – and you risk it being re-issued to a new starter incorrectly.
Revision History
20th August 2017: This is the initial post.
– G.
Confirmed that this bug does NOT affect a Polycom Trio running firmware 5.4.5.9188
Actually, I lie. This works as expected when transferring to a PSTN number, but when redirecting to my SIP ID, it fails