Teams And SfB, (oh my) but no Lions or Tigers

Ignite 2017 has wrapped up, and for those interested in Skype for Business and Teams, it was either exciting or frightening. Microsoft is very definitely about to unleash a bump in the net, but there’s no reason to be afraid!

Over the next couple of posts, I’ll recap what was announced in the SfB and Teams space at Ignite – and since Ignite, then I’ll cover what this means for organizations using, or thinking about using, SfB and Teams. Finally, I’ll wrap with a bit of a strategy for IT Pros who might be wondering what just hit them, and what’s next.

Teams is NOT Replacing Skype for Business. (Yet)

There was some discussion prior to Ignite, fueled by an accidentally-released banner message for some Office 365 users, that Teams was replacing Skype. For some, panic ensued. The reality is that Teams is not capable of replacing Skype for Business, and as there is no Teams server for on-premises deployments, Teams could not replace SfB on-prem.

Presentations at Ignite and in the roadmap released shortly after, made Microsoft’s intentions clear: while Teams is the future of Microsoft’s “Cloud first, Mobile First” strategy, Skype for Business is not going away.

Skype for Business Server Roadmap

The next version of on-prem SfB, Skype for Business Server 2019, was announced at Ignite. The highlights of the next version are:

  • There will only be one edition, with Standard Edition being eliminated.
  • There is no director role.
  • There is no PChat role.
  • Only Server 2016 and SQL Server 2016 will be supported.
  • No in-place upgrades.
  • Upgrades from 2013 and 2015 are supported, and as in the past, only two versions are supported in an environment.
  • The 2019 client will be C2R only, no more MSI

SfBS 2019 is based on the SfB Online code, which will allow for a significantly improved hybrid interoperability story. This is also likely behind some of the role removals outlined above.

For Teams, the roadmap announced in late October is all about driving toward feature parity with Skype for Business, including:

  • Better IM chat controls
  • Contact Groups
  • Unified Presence between SfB and Teams
  • Federated Chat
  • Tonnes of updates to the meeting experience
  • Most SfB calling features brought to Teams
  • Support for calls between Skype Consumer and Teams

You can see the full roadmap here

Up next: Guidance for organizations.

Main Number Handling – Putting it all Together in Large Offices, reception coverage

In the previous post, I covered how to have a receptionist have first kick at answering a call, then for the call to be handled by an Auto Attendant if they weren’t available. You might want to have a backup for the receptionist if they’re not able to answer the phone. The easy solution is to also add this person to the Response Group group as an Agent. The trick here is to specify the two agents, and set the Routing Method to Serial in the Group configuration:

Serial Agents

Wit this setup, calls will always first ring “AApple”, then after the Alert Time has expired, the call will go to “BBlueberry”, and finally to the overflow destination. Be sure to watch your Queue and Group timers as discussed here to make sure your call doesn’t bounce around between the users.

This solution works well if you only need a main person and one backup. If you need a main group and a backup group, you would configure two groups, and then create an ordered list in the Queue settings:

Reception Queue

Make sure that the sum of the Group timeout values equals the Queue timeout value, otherwise your call with ring “Reception_Main”, then “Reception_Backup”, and then “Reception_Main” again. For example, I might set the Reception_Main group to 10 seconds, the Reception_Backup group to 15 seconds, and the Queue timeout to 25 seconds.

You can include the users in the “Reception_Main” group as agents in “Reception_Backup” if you want the users in the main group to be able to answer the call if it’s ringing the backup group.

I’ve seen this approach used for a shipping/receiving door buzzer. The driver pushed the door buzzer, which automatically dialed the Response Group (this behaviour was configured in an AudioCodes MediaPack). The Response Group had the shipper/receiver as the main group, and then some other nearby staff who could act as their backup.

Up next: Sending a call from a Response Group to a PSTN or other PBX phone

Outbound Caller ID Overrides and Anonymous Calling

A common request that we get is to mask or change the caller ID of an outbound call. This might be because the caller is a VIP and doesn’t want to be harassed, or they might be a support rep and any returned calls should go to a queue or main number. You might also be calling from a number that doesn’t belong to the carrier you’re sending the call over. There are a handful of ways to handle this scenario in SfB.

Using a number that doesn’t belong to the carrier you’re sending the call over can have some odd results. They may allow it, they may block it, or they may override it with another number, usually your billing telephone number (the “BTN”) for the trunk. The BTN is usually not taken from a customer’s block of DIDs, may not have a caller ID string or 911 address associated with it, and typically is not assigned to any endpoints, so sending the BTN as the caller ID won’t help anyone that you’re calling.

You can use the “Suppress caller ID” and “Alternate Caller ID” on a route  to set a number of your choosing. This would apply to all calls using  this route. If you want to override some users’ numbers and not others, you’ll need a of duplicate your voice policy, usage, and route, and then set the override on one route. Repeat this exercise if you have different users that need to send a different number. If you need more flexibility than this, check the other options. On the plus side, this solution doesn’t care which trunk/gateway the call is routed to.

A Trunk Translation rule gives you more flexibility than the alternate Caller ID solution. You can set a series of translation rules using regular expressions on the Trunk Configuration (you could cheat and do so globally if you’re in a small organization, but you’ll just wind up undoing and redoing all of your work if you expand).

The use of regular expressions means that you can easily handle multiple translations per trunk without needing all those extra voice policies, usages, and routes. You also get the flexibility of regular expressions to match and change only certain parts of a number and leaving the rest, like 236-551-xxxx to 236-555-xxxx.

If you have multiple trunks/gateways, you’ll need to configure appropriate rules on all of the gateways.

Trunk Translation is generally seen when performing Least Cost Routing (aka Toll Bypass), such as when a user from the UK calls a number in New York. The New York telco may not like the UK number, so you can configure translation rules so that the call appears to be from the New  York office. You lose the personal DID of the caller, but the call will go through. I’ve also used this when a different carrier is providing a backup trunk, and they won’t allow the numbers from the first carrier.

The two above options are configured by administrators, are generally deployed because of telco requirements, and aren’t very flexible. It’s possible to use some other calling features to allow your users to be in control.

Delegation, also known as Boss/Admin, allows an assistant to answer calls and place calls on behalf of their boss. This functionality can be used to allow a user to selectively mask their number with another, when they choose. I’ve typically seen this setup for VIPs, when they want the recipient to see some alternate number – maybe there assistant, or an auto attendant.

To implement this, you’ll need to setup a dummy “boss”. Delegate the dummy boss account to the real boss. Now the real boss can place calls as the dummy boss. Next, if you don’t want returned calls to simply get a busy signal or dummy boss’s voicemail, setup the dummy boss to forward all calls to the assistant, or the auto-attendant.

Don’t setup delegation between a boss and their assistant to be two-way. Weird things can happen!

The gotchas with this solution are mainly around client support. Not all clients support calling on behalf of someone else, especially mobile.

You can also use a Response Group that’s configured to have Agent Anonymity. This gives users who are agents in that Response Group to place calls on behalf of the Response Group. See my Main Number Handling posts on Response Groups for details on how to do this. This solution has even more limitations that the Boss/Admin option above. Client support is limited to the Windows client, and your users will need to be homed on the same pool that the Response Group is homed on. This is a good solution is good if the users are already agents in the Response Group (such as on a helpdesk), but otherwise I wouldn’t bother with this one.

And lastly, Ken Lasko outlines how to implement *67 in Skype for Business here.

If you’ve got any other solutions for number privacy, hit me up in the comments!

Main Number Handling – Cloud PBX Auto Attendants

We’ve covered how to setup an Exchange Auto Attendant for your Skype for Business environment. Microsoft has recently released a new offering, the Cloud PBX Auto Attendant.

The two are very similar in their functionality, with some key differences. Firstly, Exchange Auto Attendants ( are an Exchange function, and not a Skype for Business function. Secondly, Exchange Auto Attendants can be in Exchange online or Exchange on-prem, work with SfB users regardless of where they’re homed, and can even integrate with other PBXs.

General

Cloud PBX Auto Attendants, being so new to the world, haven’t yet achieved a similar level of functionality. If you’re reading this blog a number of months after it was written, hit the Cloud PBX Auto Attendant tag to check for a blog covering updates!

When you’re configuring or calling a Cloud PBX Auto Attendant, the “look and feel” is nearly identical to that of Exchange Auto Attendants. You get the same informational, business-hours, and after-hours greetings.

When it comes to scheduling your business hours, Exchange Auto Attendants offer 15 minute granularity, where Cloud PBX Auto Attendants offer 30 minute granularity. You can, however, still set as many open/closed periods as you’d like.

Speech recognition is similar as well, and when you configure a name as a menu option, the Auto Attendant will recognize that name

Directory Search

Directory Search is an area where things differ between the two products. In Cloud PBX Auto Attendant, callers can speak or spell the name of any SfB ONLINE user, and that user can be homed in any of the regions that the tenant has. That user doesn’t need a PSTN Calling license, or a PSTN Calling number. The caller cannot reach a Cloud PBX user who has PSTN connectivity through an on-prem connection, either through CCE or a full on-prem pool, nor can they reach users who are home on-prem.

A feature of both Exchange Auto Attendant and Cloud PBX Auto Attendant is the ability to set a scope, or limit, of who callers can search for. You might want to protect VIPs, or only allow callers to reach sales staff.  If you happen to be part of an organization with more than 50,000 users, you cannot use name recognition to search for a user – but all other speech recognition works.

Operator

With Exchange Auto Attendants, you provide an extension for the operator, and when a caller presses 0, they are transferred to that extension. The “extension” can be any number, so long as you configure Exchange and your PBX/SfB to permit the call.

Cloud PBX Auto Attendant allows Online SfB users with a Cloud PBX license to be operators, regardless of what region they’re in. A PSTN Number or PSTN Calling user licenses isn’t required. You can also send calls directly to voicemail, or to a Cloud PBX Call Queue (the Cloud PBX equivalent of a Response Group).

You cannot use SfB on-prem users, Cloud PBX users with have PSTN connectivity through an on-prem connection, either through CCE or a full on-prem pool. You also can’t use on-prem only services like response groups.

Menu Options

Menu options are straight-forward. Indicate the dialpad button for a caller to press, and then the action to take when that button is pressed. One difference here versus Exchange Auto Attendants is that there is native functionality to transfer the call to a Cloud PBX Call Queue, instead of you having to indicate a phone number or SIP address.

The GUI is a bit different here compared to Exchange Auto Attends. You get buttons arranged in a row, with a list of the options you’ve configured below:

Buttons

Other Bits and Pieces

You’ll need a Cloud PBX Service Number to assign to your Cloud PBX Auto Attendant, and you can use both tolled and toll-free. You can use a new service number for setup and testing, and port in your existing number.

The timing of the port may prove awkward if this is your main number. You can setup your Cloud PBX Auto Attendant with a new number, and have your existing main number forwarded to it. When you receive notification that the number has ported, you can edit your Cloud PBX Auto Attendant to use the new number directly.

Your Tenant needs to have E5, or E3 plus Cloud PBX licensing, in order to have Cloud PBX Auto Attendant available.

If you want your Cloud PBX Auto Attendant to direct calls to a voicemail box, you should setup a phantom user (a user account with no real human attached to it).

Evaluation and Adoption

Your first step in evaluating and (possibly) adopting Cloud PBX Auto Attendants is to document the functionality of your current auto attendant. Then, review the functionality and the limitations mentioned above. If Cloud PBX Auto Attendant can do everything you need, then you’re all set – time to deploy!

If you identify some gaps, you have two choices. One, you can change your requirements to match what’s available now, or two, you can wait. Additional functionality is expected to be released as development occurs.

Be sure to check the Office 365 Roadmap to see if a feature you’re interested in is on the way.

You can also provide feedback on what features you feel are important with Skype for Business.

Learn More

Head to the Skype Operations Framework academy page to learn more!

Cool Tool – Find duplicate LineURIs

Every once in a while – and by that, I mean ALL. THE. TIME. – I run into a situation where a number that I’ve been asked to provision as a LineURI for a SfB endpoint is already in use:

Failed

“Filter failed to return unique result” has got to be one of the most frustrating errors that you can receive. At least it doesn’t tell you to contact your system administrator…

Sometimes this is easy to figure out by searching for that number in the User Search section of the Control Panel:

UserSearch

And other times it’s not, because the number is hiding, assigned to one of the following:

  • User LineURI
  • User PrivateLine
  • CsAnalogDevice
  • CsCommonAreaPhone
  • CsExUmContact
  • CsDialInConferencingAccessNumber
  • CsTrustedApplicationEndpoint
  • CsRgsWorkflow
  • CsMeetingRoom LineURI
  • CsMeetingRoom PrivateLine

And you know what you don’t want to do? You don’t to have to dig out PowerShell and search all of these manually. What you need is a script to do this for you, and while there are a couple out there, the one by Lasse Wedø is my favorite.

It’s comprehensive, well-written, has nicely formatted output, and has a tonne of parameters available if you want to do a more complex search. The simplest form of search looks like this:

PS Search

which seems just about right to me. Download the script and give it a try next time you run into duplicate number issues.

Main Number Handling – Auto Attendants

I’ve written quite a bit about SfB Response Groups, so let’s dive into their Exchange cousin, the Auto Attendant – AA for short.

Auto Attendants allow Exchange to answer calls to your organization. You can play greetings, set schedules, allow callers to reach your users by saying or spelling a user’s name or dialing their extension, or you can provide them a list of options that they select by pressing a key.

Creation

To create an Auto Attendant, open the Exchange Admin Center, select UM dial plans, open the dial plan that you want the AA created under, and click the + in the Auto Attendant section.

You’ll need to provide a name, indicate if you want the Auto Attendant active immediately after you create it (you might not if you’re preparing for a future migration), indicate whether you want the AA to respond to voice commands, and provide a phone number to reach the Auto Attendant at. Note that you don’t *have* to provide a phone number, which is handy for lab work and setup before a migration. You will of course need to circle back and provide at least one phone number before anyone from the PSTN can use your AA to reach your organization.

If you’re in a SfB environment, you’ll need to run the New-CsExUmContact command to create a contact object so that your SfB environment knows about the AA endpoint. Non-SfB environments will need to follow different setup steps which I won’t cover here.

Options

Now that your AA is created, you can double-click it to configure additional options.

ConfigMenu

General

Under General, you see the same options as when you created the AA, joined by a few others: setting a language, business name, and business location. Set the name and location accurately, as they can be read to a caller by the Auto Attendant. Here, you can also set a backup Auto-Attendant, that callers can be sent to when voice recognition isn’t working well.

Greetings

Under Greetings, you can set business hours and after-hours greetings. You can also add an informational message, and optionally set this message so that callers cannot skip it. This is useful for things like unexpected closures dues to weather

Business Hours

Under Business Hours, you can set the timezone for the Auto Attendant, and then you can configure your business hours  as granular as 15 minute intervals. Here, you can also specify your Holidays using a start and end date, and specify a Holiday Greeting. Note that the holiday greeting is played from 12:01am to 11:59PM on the day(s) you configure. You can’t have the holiday greeting start at the close of business on the last day of work. You can use the announcement feature for this, or sneak in at the end of the day and reconfigure the holiday greeting to have started that day. Note that after the holiday greeting plays, callers are sent to the after-hours greeting and menu.

Menu Navigation (or not)

I’m going to skip menu navigation for now…

Address Book and Operator Access

Under address book and operator access, you can specify what permissions callers have to reach users, user voicemail without ringing the user, for searching the directory for users,  and for transferring to an operator. Note that “operator extension” here is the operators actual phone number, not what key you want the caller to press.

Dialing Authorization

Under dialing authorization, you can set where users can dial via “outdialing”.

Menu Navigation (for real)

This section is the meat and potatoes of the AA is configuration. There are two sections, business hours and non-business hours. The options within each section are the same:

  • You can upload a record prompt file – if you don’t, the AA will read the options for each entry using text-to-speech.
  • You can enable or disable menu navigation, but you do need to enable menu navigation for your AA to work, so go ahead and enable it.

If you click the + or pencil button, you can created or edit a menu entry. You need to configure the prompt, which will be read by the AA using text-to-speech if you haven’t uploaded a greeting.

Entry Configuration

You can pick when key you want to assign this action to. You can select 1-9 or timeout. 0 is reserved for reaching the operator at the extension programmed earlier.

Menu Navigation Entry

When the key is pressed, you can optionally play an audio file. After then you can select one additional action:

  • None
  • Transfer to an extension (This can be an internal or external number, so long as it is permitted by the dialing authorization rules you configured above)
  • Transfer to another auto-attendant (this is useful if you want different languages, or transfer someone to a different country or group, but please don’t try to build an IVR solution with multiple Auto Attendants)
  • You can leave a voice message for a user, without ringing them. This usually goes to a generic voicemail box
  • You can have the text-to-speech reach your business hours (you entered this carefully under the “general” section)
  • You can have the text-to-speech reach your business location (you entered this carefully under the “general” section)

The business hours and location that are read out are what you entered in the “general” section. If they are pronounced funny with correct spelling, you may need to spell them phonetically so that they sound proper. The text string that you enter is never seen by users, so you don’t need to worry about weird spellings.

If you don’t set a timeout option, callers will be offered the same menu again. I prefer this option, since there is no explicit keypress to repeat the menu choices.

Up next

Response Groups and Auto Attendants share some common features, but differ considerably with others. Up next,  a comparison of Auto Attendant and Response Group capabilities and functionality.

Main Number Handling – Shared Line Appearance

There’s another SfB call handling option that we haven’t covered yet, called Shared Line Appearance, or SLA. Where Call Pickup Group felt like “let’s cram old school PBX functionality into SfB”, SLA feels like “Let’s cram old school key system functionality into SfB”.

CsServerApplication

The first step is to create a CsServerApplication, which provides the queue-like functionality. This runs on your FEs, and you only do this setup once.

Create a User

With SLA, you create a user object (that’s not assigned to an actual person, it’s like the phantom user concept), and assign the Line URI to that user.

 

CsSlaConfiguration

Next up is creation of the CsSLAConfiguration that’s not unlike what we saw for Response Group Queues:

  • Set a maximum number of calls
  • Set busy option, which is what happens when the maximum number of calls is exceeded (like a Queue overflow). Options are busy on busy – a busy signal!, voicemail, or to forward the call to another SIP address.
  • Set Missed Call (no answer) option – disconnect, busy signal, or forward to another SIP address.

I don’t understand why an organization would allow a call to ring, and then when it’s not answered, send a busy signal to the caller. One would think that voicemail – even a greeting with no option to leave a message – would provide a better option, but hey, there’s no option to send a Missed Call to voicemail!

CsSlaDelegates

The last bit of functionality that you configure is to configure user(s) as delegates of the SLA object created above.

When a call comes in to the Shared Line, all of the delegates phones will ring, showing the caller’s information. Delegates can also see how many calls are “queued”, and can see who has answered each call.

Limitations

Delegates cannot place an outbound call on behalf of an SLA. Further, SLA is only supported on certain models of deskphones. Windows, Mac, and mobiles do not support SLA.

Summary

I’ve never deployed SLA for a main number. In fact, I’ve never deployed SLA, have never met a customer who has, and could not find any coworkers who have, either.  Compared to Team Ring (or Delegation) of a phantom user, SLA is limited to certain devices and doesn’t allow outbound calling like Delegation (which is odd, since SLA uses Delegation under the hood). I don’t understand why there is an option to send a call to voicemail when the “queue” has too many calls, and no option for sending a call to voicemail when it’s not answered.

I don’t recommend SLA for handling a main number for an organization that faces the public or paying customers. If you’re considering SLA for other uses, you need to set it up and test, test, test to see if it’s going to meet your needs. My guess is that it won’t.