I was actually quite impressed when I managed to get my sample IP650 working. Consultative transfer on a handset under Lync has to date been the exclusive domain of the Tanjay/CX700, and now I see it’s natively across the entire SoundPoint family as well. Nice job!
Other selling points for me include:
- Electronic Hookswitch (EHS) support so headset users can answer and end calls remotely
- Polycom’s legendary full-duplex handsfree
- Up to 3 x 14-button key expansion modules to give lots of fixed ‘speed-dial’ buttons
I thought I’d take Jeff’s posts a little further and see what else I could find or do with these guys… So, AU$110 later and overnight eBay sent me a 321 to play with.
Here’s a quick walk-through of what I had to do to get it working in my Lab.
First off, you’re going to need an FTP server to serve the necessary files to the phones. I went with Filezilla Server. I have an “Apps server” that my Lync utils live on, so it made sense that this was where I’d put Filezilla and the Polycom firmware and config.
If you haven’t yet, source the bootrom and firmware from here, copy them to the Firmware folder and explode.
Polycom UC Software 4.0.2 B [Combined] = SoundPoint_IP_BootROM_4_4_0B_Upgrader_release_sig.zip
BootROM 4.4.0B Upgrader Utility = UC_Software_4_0_2B_release_sig_combined.zip
While you’re downloading, grab XML Notepad 2007 and install it. That will come in handy shortly.
And if you’ve not been converted to the cause yet, please also download Notepad++. Notepad.EXE won’t correctly display the log files the phones write.
Lync Extension Dialling
You’re going to want to short-dial to extensions from the phone (i mean, it’s a phone!) so we’ll need to tell the phone to use an appropriate Dial Plan (nee Location Profile) because it’s not quite clever enough (yet) to determine what the logged-in user’s is. Pick an appropriate Lync Dial Plan and note its “Simple Name”.
PS C:\Users\> Get-CsDialPlan Identity : Global SimpleName : DefaultProfile
My Global is useless, and the one I normally use has punctuation in it, which is NOT permissible, so if you’re similarly afflicted, go ahead and change its SimpleName now. (You don’t need to raise a change request for this, trust me). Note the name for later.
Because Lync is all SSL-secured, we need to copy the Front-End’s root cert to the config file that the phone will suck. Jeff’s covered it off nicely here, so I’ll skim a little.
Because my Lync deployment is all anchored to my Lab’s root cert, I just exported the root cert from my server. Open an MMC. File / add/remove Snapin… / Certificates / Add / Computer Account / Next / Finish / OK. Navigate to the Console Root / Certificates (Local Computer) / Trusted Root Certification Authorities / Certificates and click to select your root cert. Right-click / All Tasks / Export / Next / Base-64 encoded / Next / <give it a filename> / Next / Finish / OK & close the MMC.
I assume you set Filezilla to run automatically, so run up the “Filezilla Server Interface” and connect to the local server (if prompted). If you chose the conservative option during the install, you’ll find it set to Manual in services.msc, so start it now please.
Click Edit / Users and create yourself a new user (I called mine Polycom), add a password, and give it permission to your Firmware folder like the below. In this environment the phones need to download (firmware – naturally) but also write back their config and log files, which we’re going to neatly tuck into sub-directories, hence the check against “+ Subdirs” below.
Under my Firmware folder I also created 2 sub-folders for the phones to put their logs and backups:
Customising the Configuration Files
I wanted my deployment to follow a more centrally managed model with the username pushed to the phone, so I went with the configs offered in the monstrous 64M “UC_Software_Admin_Guide_v4_0_1.pdf”, but using Jeff’s tips.
We’re going to create 2 new config files, and edit the pre-existing Master config file.
Here’s the content of the “LyncSharedExample” file, with a couple of elements I’ve added:
<?xml version="1.0" encoding="utf-8"?> <lyncShared> <TLS sec.TLS.customCaCert.1="" sec.TLS.profileSelection.SIP="ApplicationProfile1" /> <features feature.presence.enabled="1" feature.messaging.enabled="1" /> <SRTP sec.srtp.require="1" sec.srtp.key.lifetime="2^31" sec.srtp.mki.enabled="1" sec.srtp.mki.length="1" sec.srtp.holdWithNewKey="0" sec.srtp.resumeWithNewKey="0" /> <signalling voIpProt.SIP.mtls.enable="0" voIpProt.server.1.specialInterop="lync2010" voIpProt.server.1.address="eepool.example.com" voIpProt.server.1.transport="TLS" tcpIpApp.keepalive.tcp.sip.tls.enable="1" voIpProt.SIP.IM.autoAnswerDelay="40" voIpProt.SIP.allowTransferOnProceeding="0" dialplan.1.digitmap="x.TRR;phone-context=simplenameR" /> <voice.codecPref voice.codecPref.G7221.24kbps="5" voice.codecPref.G7221.32kbps="0" voice.codecPref.G711_A="7" voice.codecPref.G711_Mu="6" voice.codecPref.G722="4" voice.codecPref.G729_AB="8" /> <voice.audioProfile voice.audioProfile.G7221.24kbps.payloadType="112" /> <video.iFrame video.iFrame.delay="2" /> </lyncShared>
Save this to a file called “LyncSharedExample.cfg” in the Firmware directory. Now open it in XML Notepad and we’ll add some necessary customisation:
- Open the certificate we exported above with Notepad (it’s only a text file) and copy the contents to the clipboard. Now switch back to XML Notepad and expand the tree until you reach Lync / Registration / sec.TLS.customCaCert.1. Paste the entire contents of the clipboard (including the “-BEGIN-” and “-END-” lines) into the value for this attribute
- For “voIpProt.server.1.address”, replace the value “eepool.example.com” with the FQDN of your Front-End (or the pool name if yours is an Enterprise Edition deployment)
- Now we need to add the Lync Dial Plan. Jeff blogged this in detail, and I’ve taken the liberty of adding it for you. Find “dialplan.1.digitmap” and revise the entry, replacing “simplename” with the SimpleName of your dial plan, as ascertained above. Note that you need to key this as all lower-case, regardless of what’s in Lync. And the capital “R” on the end remains – that’s NOT a typo!
- This is optional (but I recommend it): Under signalling, change the value for “voIpProt.SIP.allowTransferOnProceeding” from a 0 to a 1. This will let you complete an unanswered transfer. (When you’re transferring a call, a “transfer” soft-key won’t otherwise appear until the destination party answers if it’s set to 0)
This is what a transfer looks like as a 0, prior to the called party answering: This is what a transfer looks like as a 1, prior to the called party answering:
- Out of the box, the SoundPoints prioritise G.711 u-Law over A-Law, but here in Oz we want to reverse this. It’s easily done. Simply transpose the 6 and 7 against the values for “voice.codecPref.G711_A” and “voice.codecPref.G711_Mu”. (Skip this step if in your market you want u-Law to come first. Here in Oz we excise u-Law where-ever we encounter it, as it can cause transcoding issues with gateways, or prevent Media Bypass, forcing calls to route through Mediation)
Here’s the finished product:
This file effectively becomes the template your Lync phones will use to find the certificate and the Lync Front-End.
Now we need to create another, and this file will be copied for every SIP phone in the deployment. I’ve used the provided “LyncPerPhoneExample.cfg” (again with a tiny addition of my own), but we’re not going to call it that.
<?xml version="1.0" encoding="utf-8"?> <lyncPerPhoneLC reg.1.address="email@example.com" reg.1.auth.userId="user1" reg.1.auth.password="" reg.1.auth.domain="example.com" reg.1.auth.useLoginCredentials="1" msg.mwi.1.callBackMode="contact" msg.mwi.1.callBack="sip:firstname.lastname@example.org;opaque=app:voicemail"> <roaming_buddies roaming_buddies.reg="1" /> </lyncPerPhoneLC>
Save the file in the same Firmware directory as above, as “phone-<the MAC address of the phone>.cfg”. Here that’s “phone-0004f22c0f27.cfg”. Now open it in XML Notepad.
- Under lyncPerPhoneLC / reg.1.address replace “email@example.com” with your user’s SIP address
- Under reg.1.auth.userId replace “user1” with the user’s SAM account name from AD
- Under reg.1.auth.password – leave it blank! Hard-coding the user’s network password here would be madness!
- Under reg.1.auth.domain replace “example.com” with your NetBIOS short name
- Under msgwi.1.callback, replace “firstname.lastname@example.org” with your user’s SIP address
This is what the file should look like now:
If you type ^N at this point you’ll be prompted to save the file, and it closes it (opening a new blank document).
When a phone contacts the FTP server, it’s going to first look for a unique config file (<MacAddress>.cfg), and failing that it’s going to look for the Master config file: 000000000000.cfg – so now we need to edit this guy!
- Under APPLICATION / CONFIG_FILES, add an entry called “LyncSharedExample.cfg,phone-[PHONE_MAC_ADDRESS].cfg”
- Under APPLICATION / LOG_FILE_DIRECTORY, add an entry pointing to the log folder
- Repeat the above step for the rest of the overrides, call lists and contacts. (I dumped all mine in a folder called “backups”)
Step 1 is the sneaky one. Here we’re ensuring the phone first accesses the Master config file and NOT the default one customised for the phone. So when it fails to find <MacAddress>.cfg, it pulls <00etc>.cfg, and is then pointed to SharedExample where it picks up the Lync settings, and finally to the custom cfg file for each phone (“phone-<mac>.cfg”) that provides the domain and the user’s login name.
Save and exit XML Editor.
OK, now it’s time to test your work.
Plug the phone in and wait for it to boot. You might want to make a coffee as this will take a while if it’s new to the Lync firmware.
On my 321 I needed to take the following route to get to the config menu to tell it where to find the FTP server:
Menu / 3Settings / 2Advanced / 456Enter / 1AdminSettings / 1NetworkConfiguration then Down 3 times to reach the Server Menu, and follow your nose from here to select Server Type=FTP & give it an address. If you end up with letters or * when you press *, hit “#” until the top of the screen says “IP”.
Keep going here to add the username and password you earlier set in FileZilla. “OK” when you’ve done, then back-arrow until you’re prompted to save config:
If the phone doesn’t automatically reboot at this point, back-arrow or press Menu to get out, then select Menu, 3Status, 1Basic, 4Restart Phone and Yes. (Other models have Restart on 6 or 8).
At this point, the screen on the phone cycled through a range of messages:
- Restarting Phone
- Bootrom has changed. Error 0x0
- Polycom Splash Screen
- Welcome (and a reboot count-down timer)
- Waiting for network to initialize
- downloading new bootROM
- saving new bootROM
- bootROM updated rebooting
- Flashing – do not …
- Bootblock flashed
- Formatting file system – please wait
- Polycom Splash Screen
- Welcome (and a reboot count-down timer)
- Waiting for network to initialize
- Updating initial configuration
- Updating sip.ld. Please wait
- Downloading new application
- Saving new application
- Checking application
- Loading application
- Running “sip.ld”
- Network is down
- (I saw it upload a boot.log to Filezilla at this point)
- Restarting phone
- Network is down
- We’re up – kinda!
Once you make it through all of the above, you have a phone ready to talk to Lync, but it’s not yet authenticated.
From the phone, select Menu / 3Settings / 1Basic / 4LoginCredentials. Press down/down/tick to move past the domain and username to get to the password field. Now’s about the time you curse if you’ve used some fancy characters in your password, because try as you might you won’t find them in the phone. (Press # to cycle between the keyboard entry modes). Anyways, after you’ve changed your password to something not-quite-so-complex and entered them into the phone, press the back-arrow. At “Confirmation – Login Credentials” select Yes and then back-arrow to the start. You might need *1* more reboot.
That’s it! Congratulations!
Is SoundPoint an Aries (CX500, CX600) killer?
The obvious question arises: if the SoundPoint range includes full-duplex handsfree (as against the CX500’s 1-way “on-hook dialling”) from the outset, and it’s now integrated to Lync, why would you bother with the 500, or possibly even the 600?
The answer isn’t as simple. Each has its strengths. The 500 is visually consistent with the 600, and the tight admin and firmware integration both enjoy with Lync can’t be matched. In the Aries’ favour is the PIN-based login, and the fact that it doesn’t require any Lync licence to use it (if configured as a common area phone).
There are a few other strikes against the SoundPoints to take into consideration:
- It needs to be used with a full Lync account – up to and including the Plus CAL, which makes it a pretty damned expensive ‘common area phone’ if you’re not covered by an EA and you have to pay for each licence used
- If you force regular password updates to domain users, they’ll need to separately update their phones each time they change their network password
- The phones don’t support a comprehensive range of special characters, which will then force the users back to less complex passwords and reduce their overall network security
- No “Better Together” mode, so you can’t click-to-call from an adjoining PC
- The button layout (for the extra line keys on the phone, as well as the key expansion modules) and the functioning of the status LEDs is currently fixed. In Jeff’s initial post on the phones he’s added the comment “In the next update a [sic] these [issues] are being addressed to provide for more customization choices”. So hopefully this point will become moot
- You can’t “dial by name”: spelling a name into the phone’s keyboard
- They also lack the comprehensive integration with Exchange (although I have a customer to whom that’s a benefit)
The To-Do List
There are a few things still on the to-do list, and I’ll try to get to them soon:
- Pull the FTP server from DHCP for a zero-touch deployment at the handset
- Adding the settings for daylight saving time
- Customising the phone’s tones for Oz
The SoundPoint range is a broad family of SIP handsets that you can now re-birth for Lync. If you have stacks of them (say you’re migrating to Lync from a SIP Centrex service) then you stand to save a fortune by not having to replace them. If you’re very price-sensitive and buying new devices, the savings made here (compared to the ‘official’ Aries devices) will potentially justify the additional administration costs.
This is the first firmware release for the SoundPoint for Lync, and their appeal can only improve when Polycom knocks some of the rough edges off the user interface. I look forward to the next update. For the time being though, my IP321 is in the “keeper” category.
HERE’s my 23rd September 2012 update, with daylight saving time settings, Hotline (aka PLAR) and how to customise the tones for Australia.
… and HERE you can download the October 2012 firmware update to 4.0.3F.