Lync Call Pickup

Those of us with a telephony background have been rejoicing of late with the release of several Call Pickup solutions for Lync. Long conspicuous by its absence from the OCS and Lync feature list, it’s been at the top of the Cisco competitive playbook for those aiming to shoot down a Lync Enterprise Voice opportunity. No more.

Several third-party vendors have plugged this hole in the past, with their software add-ons generally running server-side MSPL scripts to redirect a call that’s been “picked up”. German developer partner Colima has what I consider the best solution in the market. It’s the only one (to my knowledge) that requires no client-side plugin, and is thus also fully supported on the Aries series of handsets from Aastra, HP and Polycom. (I’ve not tested it with a SoundPoint, Snom or VVX, although Colima tells me it has been heavily tested with Snom).

Lync 2013 finally brings Call Pickup in from the cold with its inclusion in CU1, with a tweaked CallPark commandlet and an extension to SEFAUtil.

I thought I’d compare both and see how they rate.

What is Call Pickup?

Prior to the evolution to “Stored Program Control” (SPC) PABXs in the late 70s and early 1980s, PABXs were based on relays, perhaps banks of them in Crossbar switches, or even (going back to the 60s) bimotional switches. (Here’s a Strowger link – the best I could do). They were relatively primitive creatures, but they did the job.

Come the computerised revolution and we became able to program them to do all sorts of things, including simple features we’ve long since taken for granted like redirect calls to another destination when the called party was already on the phone or failed to answer.

Call Pickup is the name of the feature whereby a user was able to lift their telephone handset and either press a fixed key or dial a numeric code and be connected to the caller presently ringing to another person’s extension. Etiquette would dictate you greeted the caller with something akin to “Greig’s phone, this is Glen speaking”, so they realise they’ve not reached the person they were seeking/expecting. (Being greeted by a voice in the other gender would often help convey that message quite adequately!).

If there were multiple calls ringing to phones in the one group, it was usually a lottery as to whose call you would answer. In some systems it appeared random, in others it followed the order in which the phones were configured in the pickup group.

The telephone numbers of those in a team or defined area would be pre-configured by the PABX Engineer or Administrator into a list – a “Call Pickup Group”. Depending upon the PABX type, a user could usually only belong to one group.

There were up to three different variants on the Call Pickup theme, and all could be active in the system. The Nortel / “Avaya Blue” PABX referred to these as Ringing Number, Directed, and Group. Other manufacturers might have chosen different names, but the functions of each are relatively universal.

Ringing Number Pickup

When the phone of someone in your group is ringing, you can dial a code or press a key to answer that call.

Directed Pickup

If you know the number of the phone that is ringing, you can dial a code or press a key, followed by the number of the ringing phone to answer that call. e.g. You might not belong to your manager’s pickup group, but if you hear the phone ringing in their office, you could pick it up using this feature. In some systems this feature became a handy way to answer a Night Bell. With a “Directed Pickup” code of “1” and the Night Bell having the extension number “1”, all it took was “11” to answer the bell.

Group Pickup

If you know your team is configured in Pickup Group 1, and the adjoining team is in Pickup Group 2, it’s a simple process to answer a call ringing to someone in that team. If the Group Pickup code is “2”, it’s just “22” to answer a call ringing to a phone in Group 2. This feature presents a superior way of implementing the Night Bell scenario referenced above, as it imposes a lesser burden on the dial (numbering) plan.


Cerebro Universal Call Pickup

Universal Call Pickup is an app that uses MSPL, Server-side API *and* UCMA to handle the call re-routing. You install it on all your FEs in the pool, so you don’t need to add any more server hardware. It includes an optional “Busy on Busy” module that will suppress new calls when you’re already on the phone. (More on that later).

The installation process was quite simple, with the installer doing the bulk of the work:

  1. Unzip the installation package and run CerebroServicesSetup.exe. It will install itself to “%PROGRAMFILES%\colima\Cerebro” where-ever it goes to ensure a consistent installation path across multiple FE servers (assuming an EE pool). The installation process creates a Cerebro database in the RTCLOCAL instance on the FE Server.
  2. Depending on your OS, you might need to install .NET Framework version 4.0, 64bit, Full Profile (the Client Profile is not enough). The installer will grab this from the internet and install it for you if it’s not already present.
  3. Installation also involves the creation of a TrustedApplicationPool on the FE. You’ll be prompted to supply a unique SIP Address for the TrustedApplicationEndpoint. I just went with “cerebro@<MySipDomain>”.
  4. Once it’s installed, you’ll see four new services, and they all should be running:
    CerebroServices
  5. Next step is to load the Cerebro PowerShell module:
    Import-Module "${env:ProgramFiles}\colima\Cerebro\Common\CerebroUserPolicies"

    This adds the following commands to the Lync PowerShell:

    PS> get-command *cerebro*
    CommandType     Name                                               ModuleName
    -----------     ----                                               ----------
    Function        Export-CerebroUserPolicy                           CerebroUserPolicies
    Function        Get-CerebroUserPolicy                              CerebroUserPolicies
    Function        Import-CerebroUserPolicy                           CerebroUserPolicies
    Function        Set-CerebroUserPolicy                              CerebroUserPolicies
    
    PS>Get-CerebroUserPolicy gilligan
    Name                                                                         BusyOnBusy                                  CallPickup
    ----                                                                         ----------                                  ----------
    gilligan                                                                           True                                        True
    PS>

    They’re well-crafted, with the usual help and auto-complete, which I found a great pleasure, given my addiction to the Tab key in PowerShell to spare me the tedium of actually having to type anything.

  6. Some global commands (like configuring the call pickup code and e-mail server settings) are done from the Cerebro Configuration management application that you’ll probably only ever run once:
    CerebroSettingsEditor

    If you don’t run it elevated, it’ll pop a box telling you of this requirement, which I think many other apps would benefit from!

  7. The final piece of the puzzle is to setup the Call Pickup Groups. For that, you need to jump to AD, create some security groups with the word “Pickup” in their name, and add your users.
    CallPickupSecurityGroup
    A nice benefit of this approach is that (unlike many PABXs), a user can be a member of multiple pickup groups.
  8. Done!

The User Experience

Whilst the feature works quite well, I was surprised to find that it doesn’t quite operate as I was expecting:

  1. When you hear a phone / Lync Client ringing, go off-hook or otherwise dial the CallPickup code. (The default value, as shown in the image above, is “*5”)
  2. The phone’s display (on my CX600) toggled from Calling / Cerebro / Connected / Ended
  3. The phone now rings with the “picked up” call. Nicely, it shows a subject on-screen to indicate that it’s the transferred call

This brief video on Vine shows the process. How well users adapt to this might be interesting. I guess it was a necessary evil forced by something in MSPL.

The product’s well-documented, with helpful User and Admin guides.

Busy on Busy

Colima also offers the “Busy on Busy” (BoB) module with Cerebro. If you’ve ever wanted to suppress additional calls when you’re on the phone, BoB will do that for you. It’s administered with the Cerebro PowerShell module described above, and can be enabled and disabled for individual users. When you’re on a call and with BoB enabled, callers receive busy tone and if calling from the Lync Client they’re told you’re on the phone:

CerebroBoB-busy

This image represents a quirk in the Lync presence states. At the time I took that screen-grab, a call was ringing to me, so I wasn’t yet actually “On A Call”, thus Lync reports I’m “Available”. A second call to me at the same time was rejected, leading to the contradictory on-screen messaging. There’s nothing we can do about that one, but it’s likely to result in the odd HelpDesk call. (I am however pleased that Cerebro does grab and bounce the second call, even though I’m not yet really on the first).

The option to send the rejected caller to your unanswered calls destination – which would typically be voicemail – is apparently coming in the next release.

A global setting in BoB can be set to send the “recipient” an e-mail each time it rejects a call on their behalf:

CerebroBoB-e-mail

There is no apparent throttling of messages, so every repeated attempt at calling you will generate an e-mail. Accordingly, I think that feature will find itself disabled VERY quickly when it starts to FILL people’s Inboxes with notification spam. And being a global, it only needs to annoy someone higher up the food chain for it to be deleted for everyone. (Or in reverse, if someone higher-up likes it, everyone beneath is going to be stuck with it. Outlook and/or Exchange Transport rules to the rescue I guess!)

I don’t know if Lync/MSPL supports it, but a better option surely would have been to replace the “Retry” button with the offer to Tag the recipient for Status Change Alerts and ditch the e-mail. Or send them to voicemail.


Lync 2013 CU1 Call Pickup

The official Lync 2013 version of CallPickup is based around a hybrid of SEFAUtil and CallPark number ranges. (It wouldn’t surprise me in the least if there’s some MSPL magic making it work under the hood).

Lync uses a new CallParkOrbit range that serves dual purposes: it’s both the Group number a user belongs to, and also the code you dial to pickup their calls. As such, it’s closest in operation to the Group Pickup described earlier. It also means that everyone has to know and dial the right code to pickup a call, rather than just use a generic code (as you do for Ringing Number / Cerebro). This is likely to result in some training and/or user adoption pain. I also can’t see a way of finding out just WHO belongs to a specific Group, which I would have thought an obvious inclusion. Let’s hope that’s in CU2, or it’s here somewhere and I’ve just missed it. Anyone? Anyone? Bueller?

It is perhaps worth noting that Lync’s Call Pickup contains no authorisation mechanism to determine your suitability to pickup a call. If you know their Orbit/Group number (and know their phone is ringing), you can pick up the GM’s calls from the courtesy phone at Reception.

Here’s how I made it work. Nods to Matt Landis, Richard Brynteson and the ResKit documentation.

  1. Install CU1 on your FE server(s). Don’t forget the database updates!
  2. Install the Reskit on your preferred server. In my Lab I used the FE, but in the wild you might prefer to quarantine it to a separate “Applications” server.
  3. Lync uses a new CallParkOrbit range that serves dual purposes: it’s both the Group number a user belongs to, and also the code you dial to pickup their calls. Let’s create the range now, and later we’ll assign users to specific Orbits / Groups:
    New-CsCallParkOrbit -Identity “Minneapolis” -NumberRangeStart “#100” -NumberRangeEnd “#199” -CallParkService pool.domain.com –Type GroupPickup
    e.g. New-CsCallParkOrbit -Identity “CallPickup” -NumberRangeStart “#120” -NumberRangeEnd “#149” –CallParkService lync2013se.contoso.com –Type GroupPickup
    
    Identity           : CallPickup
    NumberRangeStart   : #120
    NumberRangeEnd     : #149
    CallParkServiceId  : ApplicationServer:lync2013se.contoso.com
    CallParkServerFqdn : lync2013se.contoso.com
    Type               : GroupPickup
  4. Create a trusted application pool. As luck would have it, I could skip this step, as my FE was already a trusted pool, as it also hosts Cerebro.
    New-CsTrustedApplicationPool –id <Pool FQDN> –Registrar <Pool Registrar FQDN> -site Site:<Pool Site>
    e.g. New-CsTrustedApplicationPool –id lync2013se.contoso.com–Registrar lync2013se.contoso.com -site Site:4
  5. Add SEFAUtil as the trusted application:
    New-CsTrustedApplication –ApplicationId sefautil –TrustedApplicationPoolFqdn <Pool FQDN> –Port 7489
    e.g. New-CsTrustedApplication –ApplicationId sefautil –TrustedApplicationPoolFqdn lync2013se.contoso.com –Port 7489
  6. If you’re successful, Lync will output the config of the app, and advise you have to Enable the Topology. So let’s:
    Enable-CsTopology
  7. Now take SEFAUtil for a test drive to see if it’s working. Navigate to the folder it’s in: “C:\Program Files\Microsoft Lync Server 2013\ResKit”
  8. Run a query on a random SIP account just to see if it’s working:
    SEFAUtil.exe <user SIP address> /server:<Lync Server/Pool FQDN>
    e.g. PS C:\> .\SEFAUtil.exe sip:greig@contoso.com /server:lync2013se.contoso.com
    
    User Aor: sip:greig@contoso.com
    Display Name: Greig Sheridan
    UM Enabled: True
    Simulring enabled: False
    User Ring time: 00:00:15
    Call Forward No Answer to: voicemail
    PS C:\Program Files\Microsoft Lync Server 2013\ResKit>
  9. OK, that was successful, so now let’s see if we can add some members to a pickup group:
    SEFAUtil.exe /server:<Lync Server/Pool FQDN> sip:katarina@contoso.com /enablegrouppickup:199
    e.g. PS C:\> .\SEFAUtil.exe /server:lync2013se.contoso.com sip:greig@contoso.com /enablegrouppickup:#120
  10. Done!

 

The User Experience

While the Admin side of Lync Call Pickup is slow (with SEFAUtil taking around 10s to respond to every command), the user experience is MUCH more like you’d expect of a traditional Call Pickup: Lift the handset / dial code / say hello to the person at the other end.

In my lab I found Lync fast to answer and connect the call, although it’s not quite perfect. Hyper-caffeinated users will notice Lync jump through the following two screens on the way to connecting the call (the third image).

image

image

image


Feature Comparison

Feature Cerebro Lync 2013 CU1
System requirements No server required: It’s installed on every FE Lync 2013 CU1 installed on every FE. New/separate server recommended for SEFAUtil
Lync 2010 servers? Yes No
Lync 2013 servers? Yes Yes
Lync 2010 & 2013 Hybrid? Supported installed on the Lync 13 FE only in a Hybrid environment ??
Management PowerShell module (provided). Groups are based around AD Security Groups Lync PowerShell commands for initial setup. SEFAUtil for Group Management
Pickup from Lync Client Yes Yes
Pickup from Aries Phone Yes Yes
Pickup users homed to SBA? Yes (if Cerebro is installed on the SBA and both the “picker” and “pickee” are homed to the SBA) ??
Pickup Ringing Number Yes No
Pickup Directed Yes. A pre-requisite is that both parties belong to at least one common pickup group No
Pickup Group No Yes
Pickup priority / sequencing FIFO. The first phone ringing is picked-up first ??
Call Types?
  • RGS = Yes
  • Private Line = ?
  • Delegation = Yes
  • Team Call = Yes
  • Personal Contact = ?
Private Line, Delegation, Team Call, Sim-Ring, Response Group and Personal Contact calls cannot be picked up
Busy On Busy Optional module ($) No
Price Licenced by functionality & user count. Generate a quote here Free

Summary

If you have Lync 2010, Cerebro is clearly your only option here. Whilst it works a little differently than the traditional feature, it does what it’s meant to, seems to pick up just about everything, and you get the option of BoB too. (For some customers, BoB alone might be enough to win you over).

For a Lync 2013 deployment, each has their strengths and weaknesses, but I think ultimately it’s a text-book example of “you get what you pay for”. The free offer from Microsoft is a basic pickup experience. It’s true to the traditional expectations at the user-level – you dial the code, you get the call – but it will only pickup a ‘vanilla’ call to the other party. Admin is slow through SEFAUtil and you can’t easily determine who belongs to a group. It’s also open-slather – the moment you know someone’s pickup group you have free rein to answer their calls.

Conversely, with its “ring back” call operation, Cerebro’s is a peculiar user experience, but gains points for being able to pickup all(?) call types and offering a consistent Pickup code as well as the ability to do a Directed pickup. It also has the advantage of being more secured than the official Lync version, with you needing to belong to the same pickup group as someone before you’re able to retrieve their calls. Add the neat PowerShell interface with Pickup groups maintained in AD and it comes across as a very Enterprise-friendly utility.

Being early versions of a new software feature the bugs and quirks in each application will hopefully be soon ironed out. I found Colima a very responsive and enthusiastic vendor, so some of the rough edges are likely to be improved in a very short timeframe, whereas the Goliath in the picture often moves at a glacial pace, such that I wouldn’t expect anything much to change except in ~quarterly increments as each CU is released. I wouldn’t be surprised if Microsoft does nothing further with Call Pickup. It’s a boutique feature only relevant to some regions, and like with the Response Group, if their basic offering is insufficient you have partner solutions like Cerebro to fill in the gaps.

Price and Availability

Cerebro is available online. You can generate your own quote here. You can also download the full installation code and enjoy a free 30-day trial licence.

If you need to upgrade your Lync 2013 deployment for CU1, I have the files linked here. As it’s superseded by later updates, you might prefer to check my Lync 2013 Resource Toolkit page.

 

G.

3 Comments

  1. Hi,

    in the feature comparison, you say that Lync 2013 CU1 is unable to pick up a call if the called user has set sim ring to his cell phone (or maybe his enterprise DECT) on his Lync client ?
    Do I understand well ?

    Awful
    I’m waiting for Lync 2013 CU1 because we are just starting deploying Lync in my organization and lot of people complain about lacking of call pickup, but they complain because they need to have simultaneous ring to their DECT phone, when they are out of office, and “team call” to let another people answer a call if they can’t use their DECT (generally with a rules like if my phone rings 3 times, take it, I can’t answer).
    Actually in Lync you can’t have both simring and team call.
    And team call has another problem, if you have desk phone, you can’t say them to not ring for team call. Insupportable
    So for me, Call pick up was the absolut solution. I set sim ring to my DECT phone, and my colleagues know that if my phone rings x times, they have to pickup my call.
    If we can’t do that it’s incomprehensible

  2. Hum, or maybe the simring limitation is only to destination ? user A simring to user B, phone of user B ring but it’s a user A’s call, I can’t pickup ?

    It will be more logical….

  3. This is a major plus and step in the right direction, my companies have experienced major issues migrating from a legacy PABX where a simple line appearance button that flashed and could pick up calls that way, very simple and basic but worked very well especially as users sometimes do not understand\ or want to ensure they have correct settings in Lync

    In my opinion Simul Ring\ Team Call Group are stil a very long winded way of achieving the same outcome and i wont list the many disadvantages to this, especially as we run primarily LPE CX600 phones for most users

    I think if there was a way to replicate this call appearance on Lync Phone with a pop up maybe and then dial a code to pick up rather than listen for a ring this would be a major win to work with this new Call Pickup feature

Leave a Reply

Your email address will not be published. Required fields are marked *

... and please just confirm for me that you're not a bot first: Time limit is exhausted. Please reload the CAPTCHA.