Polycom SoundPoint IP phones for Lync

 

Jeff Schertz is a brilliant resource. Yes, I’m a fan. His recent post on getting the SoundPoint phones working under Lync was invaluable – and the extension dialling one even better!

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.

Prep

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.

Root Certificate

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.

Filezilla!

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.

image

Under my Firmware folder I also created 2 sub-folders for the phones to put their logs and backups:

image

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:

  1. 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
  2. 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)
  3. 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!
  4. 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: IMG_0568
    This is what a transfer looks like as a 1, prior to the called party answering: IMG_0565
  5. 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:

image

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="user1@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:user1@example.com;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.

  1. Under lyncPerPhoneLC / reg.1.address replace “user1@example.com” with your user’s SIP address
  2. Under reg.1.auth.userId replace “user1” with the user’s SAM account name from AD
  3. Under reg.1.auth.password – leave it blank! Hard-coding the user’s network password here would be madness!
  4. Under reg.1.auth.domain replace “example.com” with your NetBIOS short name
  5. Under msgwi.1.callback, replace “user1@example.com” with your user’s SIP address

This is what the file should look like now:

image

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!

  1. Under APPLICATION / CONFIG_FILES, add an entry called “LyncSharedExample.cfg,phone-[PHONE_MAC_ADDRESS].cfg”
  2. Under APPLICATION / LOG_FILE_DIRECTORY, add an entry pointing to the log folder
  3. Repeat the above step for the rest of the overrides, call lists and contacts. (I dumped all mine in a folder called “backups”)

Capture000000000000.cfg

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.

Showtime!

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”.

IMG_0582-highlight

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:

IMG_0577

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
    IMG_0527
  • 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
  • Rebooting
  • Polycom Splash Screen
  • Welcome (and a reboot count-down timer)
  • Waiting for network to initialize
  • Updating initial configuration
    IMG_0553
  • Updating sip.ld. Please wait
  • Downloading new application
  • Saving new application
  • Checking application
  • Loading application
    IMG_0531
  • Running “sip.ld”
    IMG_0532
  • Network is down
  • (I saw it upload a boot.log to Filezilla at this point)
  • Restarting phone
    IMG_0540
  • 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.

IMG_0586-highlight

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.

IMG_0526

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

Summary

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.


– G.

11 Comments

    • Don’t think so M: nothing I’ve seen in the doco’s mentions dual registration, and I’ve not seen anywhere to plug in a second set of credentials. I’ll keep an eye out though. That would certainly be another + in their favour! (And it’s still v1 of the Lync firmware too!)

  1. Thanks for pointing me to this config, I had given up connecting my Soundpoint 650 phone to my test Lync, and all I had to do was use the right certificate to get it to work :-)

    /Michael

    • It’s ALWAYS certificates! No matter what the issue – it’ll be the certificate! (AAAARGH!)

      Stay tuned – I have another post on the SoundPoints coming up in the next week or two, and I’m told there’s a firmware update due for them by the end of Aug…

  2. great artical. thanks for sharing.

    Can you pleae explan “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”

    Coz i have a setup with soundpoint 332 where internal calls (phone to phone and phone to lync) works but PSTN media does not connect.
    the gateway’s has a deferent set of IP’s where it not routerble to IP phone side. Is the default behaver of Soundpoint to do media bypass, if so how to force Soundpoint to use mediation server for media.

    Thank You

    • Media Bypass is a Lync feature, not specifically something to do with the SoundPoints – but yes, in this case it sounds like you’ll need to turn it OFF so as to ensure all media flow routes via the Mediation server. Check Get-CsTrunkConfiguration & Get-CsNetworkConfiguration.

  3. Thanks for the update.

    After doing some testing. i discovered that the Soundpoint phone is ttying to send media to a the gateway (SIP Trunk side) side IP on the mediation server, As in my setup up I am useing a dedicated mediation server with 2 NIC, and in the Invite/SDP the Gateway side ip is shown as a candidate. The Soundpoint 332 trying to send media to it and fails coz there is no routing.

    I belive this is coz STUN/TURN not supported with with the current soundpoint software version.

    betes me why the Lync server sends the PSTN side IP from the medation server in the SDP when it is setup as PSTN only..!

    Alos is there way a in sounpoint where we can specify the media IP’s?

    Thank you

  4. When using the phone-[macaddress].cfg feature does this mean you have to create a phone-mac.cfg for every phone? I seem to get an error about a mission configuration file if I don’t create one for each phone.

    • Hi Jacob.

      Absolutely, in this config model you need a config file per phone to provide the pre-canned username to each one.

      If you’re building for Lync and using the latest firmware though you should be able to use PIN-based logins instead. They added support for that in 4.1.1 mid-last year. Have a read of some of my more recent posts on the VVX instead. Look at the “Base Profile” settings in the customisations.cfg file and drop “phone-[PHONE_MAC_ADDRESS].cfg” altogether.

      It’s worth pointing out at the moment though that only up to 4.1.0 is officially supported under Lync, not 4.1.1 (https://technet.microsoft.com/en-us/office/dn788944) and that PIN-based logins in 4.1.1 is only supported by Polycom for the IP450 and up. No harm trying though, huh?

      – Greig.

  5. Hi Greig

    In an frantic search of how to configure a SoundPoint IP 650 to register more than one Lync line at a time, i stumbled upon your blog.

    As far as my searches has taken me, i think i must realize defeat in doing so with this device.

    Background:
    I am trying to use our Lync on premise installation as a phone system for voice trading.
    Our voice traders would like the ability to have 6+ calls going on at the same time, where the counterparts cannot hear eachother (no confrencing!) but all “output” to the same speaker.
    The trader will have the microphone muted to all ongoing calls, and only unmute 1 call at a time to yell prices/orders at them, before muting the microphone again.

    My question is: Do you know of any devices that can register more than one lync line at once? – prefrebly 6 lines.

    Any and all help is very apprechiated!
    (sorry for bad spelling, english is not my native language:))

Leave a Reply

Your email address will not be published.

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.