In Lync 2013 Cumulative Update 1 (February Update) Microsoft added the new call pickup group feature. Call pickup has been a classic voice feature since the very early days of PBXs. As a result, lots of businesses are still used to being able to answer other people’s calls by dialling special access codes from their phone. So it’s great that Lync finally has this capability to help ease some of the pain points for businesses transitioning from their previous traditional PBX systems to the new world.
Group Call Pickup Operation:
- Calls coming in to any member of a call pickup group can be answered by dialling a special access code for that group. Note: the person wanting to answer the call will physically need to hear the other person’s phone ringing.
- Any other user on the system can answer a call to a call pickup group by dialling the call pickup access code associated with that group. This feature does not restrict the call to only be answered by people in the group.
- If there are multiple calls ringing on phones in the same group, the first call into the group is the call that will be answered when the access code is dialled. The other calls in the group will be queued in the order the calls came into the group after that.
- Only direct calls to a user’s phone number can be answered with call pickup. (see limitations below for more details)
Call Pickup Groups in Lync 2013 have the following limitations:
- Users can be assigned to only one call pickup group at a time.
- Call pickup service uses the call park services running on the Lync front end server. When a call rings on a call pickup group user’s number it will simultaneously be automatically parked on the call park service. If the user picks up the phone the parked call is removed, or if the call pickup number used to answer the call, the user’s phone will stop ringing.
- Calls into a call pickup group can be answered by any phone within the organisation, as long as the user wanting to pick up the call knows the correct access code to dial for that group.
- Response group calls ringing on a call pickup group user’s phone cannot be answered via call pickup.
- Delegate Calls – Calls delegated to another phone cannot be answered with call pickup.
- Team Calls – Calls to users with team calling configured cannot be answered using a call pickup access code.
- Simultaneous Ring Calls cannot be picked up with group call pickup.
Unfortunately, configuring call pickup groups has not been very easy to do (till now), due to Microsoft only giving access to configure call pickup groups through the very archaic SEFAUtil from the Lync Resource Kit (ResKit). This tool was originally designed to be used for administratively configuring Call Forwards and Team Calling by running commands from the prompt. SEFAUtil can check which call pickup group a user is in, or set which group a user in, via the command line.
A big problem with SEFAUtil (and also the Powershell commands in Skype for Business) is that it usually takes 2-5 seconds to check the settings for each user, and another 2-5 seconds to change their setting via the command line. In addition to this, you can’t directly query a call pickup group number to see which users are in that particular group. Instead, you have to query each user individually to establish the call pickup groups of which they are a member. If you think about that, for 1000 users it could take you (1000 x 5 seconds) well over an hour just to discover which groups all the users are in. This seems a little excessive to me.
It’s time for a better way…
Lync 2013 Call Pickup Group Manager
So after many evenings in the lab scripting away, I have created a tool that will hopefully make life (when it comes to call pickup groups, at least), a bit easier. So what does it look like?
Features of Lync 2013 / Skype for Business Call Pickup Manager:
- Works with both Lync 2013 using SEFAUtil or with Skype for Business CU1+ using Powershell commands.
- View all call pickup group configuration (Orbits, Groups and Users) in one simple interface.
- Call Pickup Group Manager discovers call pickup configuration information directly from the Lync / Skype for Business database. This avoids having to poll every user individually using SEFAUtil or Powershell to find their settings. This makes configuration discovery much faster than SEFAUtil or Powershell can offer in Lync 2013 or Skype for Business.
- Easily Add, Edit or Delete Call Pickup Orbits.
- Group-centric configuration of groups. ie. You can look up groups and see which users are in them rather than looking up each user individually to find their group assignment.
- Multi-selectable user list boxes for adding or removing multiple users at once.
- Use the "Find Selected User" button to find which group a user is assigned in.
- Use the Filter button to reduce the user list to quickly find the user you want to add.
Updates
1.01 Update:
- Pre-Req check will now look under the default reskit location on all available drives (not just C:)
- If SEFAUTIL gives no response (due to an unknown error in SEFAUTIL) the tool will display an error to the user.
- Added the Import-Module Lync command in case you run the script from regular Powershell or use the Right Click Run using Powershell method to start the script.
- Added the undocumented "/verbose" flag to the SEFAUtil calls to help with debugging SEFAUtil issues. See post: http://www.mylynclab.com/2014/04/sefautil-and-lync-2013-call-pickup.html
1.03 Common Area Phone Update:
- This version has been updated to handle Common Area Phones. Some people reported errors being displayed by the tool when they had manually set (with SEFAUTIL) Group Call Pickup against Common Area Phones (ie. against the SIP URI of the Common Area Device, eg: sip:fbcb642b-f5bc-477a-a053-373aef4c00f8@domain.com). As of this version Common Area Phones will be included in the user list, and you can add and remove them from Call Pickup Groups.
- User listboxes are now slightly wider to deal with the long SIP addresses of Common Area Phones.
- When the tool loads it will display in the Powershell window the SIP Address and Display Name of all common area devices so you can match the (GUID looking) SIP address in the tool to the display name of the device.
1.04 Scalability Update:
- Now supports window resizing.
- Added Filter on Lync users listbox to cater for deployments that have lots of users.
- Script is now signed.
1.05 Skype for Business Update:
- Now checks that Group number matches a range that exists in one of the Call Pickup Orbits before allowing it to be added to the group list.
- Up and Down keys in Orbit listbox now update orbit details properly.
- You can now specify an alternate location of SEFAUTIL.exe in the command line. (Example: .\Lync2013CallPickupManager.1.05 "D:\folder\SEFAUTIL.exe")
- Now checks the Skype for Business RESKIT location.
- Put a dividing line between the Orbit creation section and the Group configuration section to try and indicate a divide between the two areas.
- The Group list box label now displays the group name being listed up so the user understands better what group the user list is associated with.
2.00 Major Updates (11/4/2016):
- When using Skype for Business the new Call Pickup Group Powershell commands (Available in Skype for Business CU1+) for user settings are detected and used instead of SEFAUTIL. This means you don't have to worry about any SEFAUTIL configuration anymore in Skype for Business CU1 or higher!
- Unfortunately the Skype for Business Powershell commands have proved to be too slow for the discovery of all users Call Pickup Settings (because "Get-CsUser | Get-CsGroupPickupUserOrbit" has to iterate through all users taking about 2 seconds per user and takes ages). So I have retained and improved the direct SQL discovery method from version 1.0 for both Lync 2013 and Skype for Business.
- Changed the way the Groups list box works. It now will be automatically filled with all the available groups from the Orbit ranges assigned in the system. If there is a user in a Group then it will be highlighted in Green text with Yellow background to help you find users without looking in empty groups.
- When Orbits are added all the available groups will automatically be added to the available Groups list. Note: when you remove ranges that contain groups with users in them the group will no longer be accessible in the interface, however, the Pickup Group will still function. So make sure you remove users from groups before you delete the Orbit range.
- Added a refresh button so the data can now be updated from the system whenever you want.
- Improved the speed of looking through groups by re-architecting some of the code.
- After a user is added or removed from a group the tool does not rescan all user's data again. Whilst this method always ensures the data being displayed is up to date, it's also much slower. This version is optimised for speed :)
- Added pretty looking UP and DOWN arrow icons on add and remove buttons to try and clarify operation.
- Added the "Find Selected User" button to find which group a user is assigned to.
- Added help tool tips on buttons.
2.01 Enhancements
- Added an export to CSV data to the app.
- Fixed an issue with highlighting groups with users in them.
- Now supports Skype for Business 2019.
DOWNLOAD HERE
Prerequisites to use Call Pickup Group Manager
There are some important prerequisites that you need to use on both Lync 2013 and Skype for Business for the Call Pickup Group Manager to work properly.
Lync 2013 Prerequisites:
- Requires SEFAUtil installed on the system to Add, Remove, and Edit Call Pickup Settings.
- Requires SQL Dynamic Ports opened in Windows Firewall on all Front End servers.
Skype for Business (CU1+) Prerequisites:
- Skype for Business (CU1+) uses inbuilt Powershell commands to Add, Remove, and Edit Call Pickup settings (this is baked into the CU1 and above. So no additional installation is required.)
- Requires SQL Dynamic Ports opened in Windows Firewall on all Front End servers.
Lync 2013 SEFAUtil Prerequisite
Under the hood, the Call Pickup Manager on Lync 2013 will use the SEFAUtil for adding and removing users from groups. This was a deliberate choice, as I wanted the tool to be supportable by Microsoft (ie. by avoiding any direct database editing, or hacking of things), and you don’t have to fear any unnecessary database corruption from using the tool.
Resource Kit Download
Download and install a copy of the Lync 2013 ResKit from here:
Make sure you have the ResKit installed on the Front End server you are running the Call Pickup Manger Tool on. I have written prerequisite checks into the tool, so you will get an error in the console window if it's missing.
SEFAUtil Configuration
Once the resource kit has been installed you need to configure Lync so it will trust the SEFAUtil tool. This allows the SEFAUtil to make UCMA calls to the Lync system.
Adding SEFAUtil as a trusted application:
Create a variable containing the site you will be configure SEFAUtil for:
$Site = Get-CsSite –Identity Melbourne
Configure the Trusted Application Pool:
New-CsTrustedApplicationPool –id pool.domain.com–Registrar pool.domain.com-site $Site.SiteId
Configure the Trusted Application:
New-CsTrustedApplication –ApplicationId sefautil–TrustedApplicationPoolFqdn pool.domain.com–Port 7489
Enable the Topology for the pool to start using the Trusted Application:
Enable-CsTopology
Here's the Technet explanation if you need it: http://technet.microsoft.com/en-us/library/jj945659.aspx
In order for the Call Pickup Manager to quickly download call pickup settings from your deployment, it needs access to your RTCLOCAL databases for each Front End pool. If you only have one Standard Edition server, then you can run the tool directly on this server and it will be able to access the RTCLOCAL database directly (note: this is also the case for an enterprise edition pool, but you need to run the tool on the first server in the Get-CsPool -> Computers property array, because this will be the database the tool tries to connect to). If you have multiple pools, the Call Pickup Manager will try and connect to each pool to download all the call pickup data for each pool (Branch SBA's also count as a separate pool).
SQL Firewall Settings - Required for Lync 2013 and Skype for Business
In order for the Call Pickup Manager to quickly download call pickup settings from your deployment, it needs access to your RTCLOCAL databases for each Front End pool. If you only have one Standard Edition server, then you can run the tool directly on this server and it will be able to access the RTCLOCAL database directly (note: this is also the case for an enterprise edition pool, but you need to run the tool on the first server in the Get-CsPool -> Computers property array, because this will be the database the tool tries to connect to). If you have multiple pools, the Call Pickup Manager will try and connect to each pool to download all the call pickup data for each pool (Branch SBA's also count as a separate pool).
In order for the SQL connection to be made (as shown in the diagram above), inbound connections to the SQL Browser Service and RTCLOCAL database will need to be allowed through the Windows firewall. These rules are not created automatically during Lync Server 2013 and Skype for Business Setup like most of the other rules are. So you will need to do this manually, by following the process below:
The Manual Method for Opening Firewall
You can add Firewall rules either through the Windows Firewall settings in Control Panel, or by the command line. In this example I will show you how to add the ports using the command line.
Step 1: Add the SQL Named Instance Browser with the following command:
netsh advfirewall firewall add rule name="Lync 2013 Call Pickup Manager - SQL Browser (UDP 1434)" dir=in action=allow protocol=UDP localport=1434 profile=domain
Step 2: Find the Dynamic TCP port used by the Named Instance (RTCLOCAL). Firstly, open the SQL Server Configuration Manager (On a Standard Edition server, this is installed when the local databases are deployed).
- Open SQL Server Configuration Manager
- (Select) Protocols for RTCLOCAL
- (Right Click) TCP/IP -> Select Properties
- (Select) IP Address Tab -> IPAll -> TCP Dynamic Ports
As you can see in the example below, for IPAll the TCP Dynamic Port is 49264. This is the Dynamic Port for this Named Instance that needs to be opened in the firewall.
Step 3: Add the Named Instances Dynamic Port via the following command (Substitute the Dynamic Port for your deployment in the highlighted area below):
netsh advfirewall firewall add rule name="Lync 2013 Call Pickup Manager - SQL RTCLOCAL Dynamic Port (TCP-in)" dir=in action=allow protocol=TCP localport=<Insertporthere>profile=domain
The Automated Method for Opening Firewall
If you are not fond of doing manual processes, you could just use the script below for opening the ports automatically on your remote Front End servers:Download Open SQL Ports For Call Pickup Manager 1.00 Script here (also supplied in the tool zip):
Run this script on the server you want to open the SQL Browser and RTCLOCAL Dynamic TCP SQL ports on.
The Wrap Up
Once again, we’ve come to the end of another show. I hope you like my new tool and it makes your life a little easier. If you find any bugs or have any issues with it, please report them back to me so I can update the tool. Until next time, remember to answer your phone, and if you don’t, at least remember to get someone else to dial #110 to answer it for you. See ya next time!
James,
ReplyDeleteThis is fantastic stuff. I hope you don't mind but I wrote an article on call pick-up as a how to and added references to this page.
No worries Randy, glad you like the tool and felt it worthy to write about.
DeleteHey James,
ReplyDeleteVery useful tool. I used to use a script earlier, but to get the output on users and their group nos, it was taking 2 - 4 seconds per row. Saved a lot of time for me..
Just Awesome. Thank you very much!
ReplyDelete