Calls Not Completing for user with “Non-Western European” characters

•2015/05/21 • Leave a Comment

This topic has already been covered in Spanish here  and in German hier.

I am just adding an English language version because I recently ran into the same issue and there is no blog in English about it.

If I ever wondered why we buy support from gateway vendors, this issue validated it for me.

We were bringing up a new location with a PRI. Through testing, I was able to make outbound calls but the people in the actual location were unable to complete the calls. This didn’t make sense. How can I make a successful call, sitting thousands of (pick one: miles/kilometers) away, and the people in the actual office could not?

In this case, our gateway was an AudioCodes Mediant 1000 and we were working with an AudioCodes engineer on the implementation. The AudioCodes engineer had given us numerous things to try to no avail. Finally he had us e-mail him some WireShark logs so he could spend more time on the issue.

A day later, he recommended that we set this value in our ini file:

ISO8859CharacterSet = 0

After making this change, the users in the location were suddenly able to make calls.

The issue is that the users in that location all use the following character in their display name as part of the spelling of their office location:


So what does this ISO8859CharacterSet value actually mean? For one, it’s not documented anywhere. I followed up with AudioCodes and they sent me the following documentation.



Basically, this value expands the default character set that AudioCodes uses to parse SIP traffic. Why isn’t it set to zero by default? Who knows. I asked that question to the AudioCodes engineer and he had no answer. I asked if maybe there was a performance impact to this value. He replied that there isn’t one that he knew of. I asked a second AudioCodes engineer and he confirmed that he had never heard of an issue by setting this to 0.

It’s surprising to us that we hadn’t run into this issue before but then our standards are to use the generic ASCII character set in all display names, usernames, etc.

How do you know you might have this issue? I don’t have the AudioCodes syslog files anymore so I swiped the below from the German blog mentioned above.


<132>[S=831454] Error Indication: Last Command (Primitive) was not performed due to cause 100  [Trunk:0 Bchannel:1 ConnID:2] [Code:0x23127]
<133>[S=831455] (   lgr_psbrdex)(833974    )   recv <– UnHandled event:EV_ISDN_ERROR_INDICATION (317)
<133>[S=831456] [SID:766997237] (   lgr_psbrdex)(833975    )   pstn recv <– CALL_RELEASED Trunk:0 Conn:2 RetCause:73 NetCause:255
<132>[S=831457] REPORT_TYPE_ERROR_IN: ErrorCauseString = Incorrect parameter type, DiagnosticString= Condition unknown, ErrorCause = d, Diagnostic =  [Trunk:0 Bchannel:-1 ConnID:-1] [Code:0x23127]
<133>[S=831458] [SID:766997237] (   lgr_psbrdif)(833976    )   pstn send –> PlaceCall: Trunk:0 BChannel:1 ConnID:2 SrcPN=xxx SrcSN= DstPN=151xxxxxxxx DstSN= SrcNT=4 SrcNP=1 SrcPres=0 SrcScrn=0 DstNT=2 DstNP=1 ServiceCap=M RdrctNum= RdNT=0 RdNP=0 RdPres=0 RdScrn=0 RdRsn=-1 Excl=1 Display=Müller, Max IE= UUIE=0, RawData:0 CLIRReason:-1 OrigPN= OLI=-1 OffhookInd=0
<133>[S=831462] [SID:766997237] (   lgr_psbrdif)(833980    )   Abnormal Disconnect cause:255#?reason(255)? Trunk:0 Conn:2


If you see the above that’s a clue. In this case, it was the u-umlaut (ü) in “Müller, Max” causing the issue.

Quick RegEx Trick

•2015/05/14 • Leave a Comment

AnientRegExI thought I blogged this but I guess I didn’t. So I am posting this mostly to save myself time finding this the next time I look for it.

I had a regular expression that returned 2 variables. Here is what I wanted:


However Lync interprets “$1555″ as a variable instead of what I want which is just $1 as the variable. So how do I tell regular expression that it should stop at the first 1 and not continue until the next delimiter ($2)?


Use curly braces

Re-writing it in this format got me the desired result:


The fourth paragraph on this website is what got me the answer –

Script: Query Front Ends for Specific Event Log ID’s

•2015/05/11 • 1 Comment

I was troubleshooting today with my main Lync man “JP” (who chooses to remain anonymous). Part of our troubleshooting was checking against 6 (and sometimes 12) front ends to see if a specific Event ID appeared in Event Viewer. This was tedious, going to each server and then a lot of them getting no results.

JP said “there should be a script to do this for us”.

And from that comment this script was born. It’s possible someone has already written this script. We didn’t bother looking since it is a fairly simple script. If someone has written this, then let me know and I will give you credit.

The script – Get-CsEventID – is pretty simple. There are 2 mandatory parameters:

-Pool is the name of your Lync pool which is then sent to Get-CsSite to get the names of each of the servers in your pool

-EventID is the Event ID for which you are looking.

The two optional parameters are:

-LogName By default the script searches in the “Lync Server” log but setting this will let you search against other logs like Application or System

-StartTime If you want to limit your search to the past few hours or days, then set StartTime to the number of hours you want to go back. By default, this is set to 72, so it will search back for the past 3 days.

Here are 2 examples:

.\Get-CsEventID -Pool -EventID 12288

This will search for Event ID 12288 across the pool. It will search for the past 72 hours for this entry.

.\Get-CsEventID -Pool -EventID 6005 -LogName "System" -StartTime 4

This will search the same pool, but now for EventId 6005 in the System log. It will search back the past 4 hours.

Note that Windows Firewall will need to permit access to remote event logs. You can run the following on a Windows 2012 or later server to enable this.

Get-NetFirewallRule | where DisplayName -like  '* Event Log*' | Enable-NetFirewallRule

Grab the script here.


Skype for Business Notes

•2015/05/04 • 2 Comments

I’ll be tracking my notes with installing and working with Skype for Business.

1. I did an in-place upgrade of my existing Lync 20reset-cspoolr13 pool and everything started up and appeared to be working fine. The upgraded pool is named “” which is a bad name for a pool that actually contains Skype4B servers. So I decided to reduce that pool from 3 front ends to 1 which will give me enough space on my VM hosts to build some new, native Skype4B servers. So I removed 2 of the 3 front ends via Topology Builder. Now my pool won’t start. I get the following error when try to do a full reset of the pool:


Fabric version is unknown. No it’s not. It’s what came on the install image! It’s version 3.

Good ol’ Windows Fabric strikes again. I’ve tried rebooting and forcing the reset a few times. Finally I uninstalled Windows Fabric and installed it again from the Skyp4B .iso. Same problem. So this pool is hosed and since this is a lab I don’t want to spend any more time figuring this out.

Update: As I removed roles from Topology for this pool, like conferencing and enterprise voice, I tried to start the service again. It finally started. It is possible that re-running the deployment wizard straightened a few things out. I’m wondering if running Enable-CsComputer separately would have fixed it too.

My takeaway: Don’t do in-place upgrades of production machines. Now this error may not be related to the in-place upgrade process. However, doing a fresh install assures that you can test the pool before moving users. It also gives you the chance to do things like installing the latest OS, building it on newer hardware, installing the latest Windows patches if you’ve fallen behind, etc.

2. Control Panel still can’t sort. This is about unacceptable. Seriously Microsoft? You can get media to traverse NAT’s, firewalls, edge servers, etc but you can’t sort a list? You’d think by the 3rd release of the Lync line of software that they could get some intern to show them what he learned in his first programming class ever: How to sort a list. At work we have admins scattered all over the place, a few dozens pools, and more supported SIP domains than I want to count.. Trying to find the right entry in some of our lists is very difficult and frankly a waste of my time.

Sorting is hard

Sorting is hard. It’s like math but hardererer.

3. When adding your Skype4B server to Topology, be sure to put them in the Skype for Business folder. I know, this should be obvious but I guess habit got the better of me. I added my Skype4B Enterprise settings into the Lync 2013 foled in Topology. To no surprise, I got the following errors in the install logs:

Wrong-folderSo if you get this error, remove the Skype servers you put into the Lync 2013 folder and add them again to the Skype for Business folder. Removing them from Topology might give you an error that a conference directory already exists on the pool you are trying to delete. Delete that by running the Remove-CsConferenceDirectory  with the -force switch and then try the Topology removal again.

4. Not everything is a straight port from Lync 2013 with the “Skype Look”. The certificate wizard was actually simplified and I like it better.


They also updated the “Start Services” text to explain that you really shouldn’t start the services until your pool is ready. It’s a minor fix but I bet it will reduce some of their support calls.


What they should also add in there is when running Start-CsPool that it must be done form a shell opened to “Run as Administrator”

5. There is no way to in-place upgrade an SBS/SBA. While this would have been *really* useful and possibly the only use of in-place upgrades I would have used in production, Microsoft doesn’t support this. My guess is that this is because Microsoft foolishly still makes the SBA vendors provide custom (and wholly redundant) “Install code” which could fail to function in an upgrade scenario. This is yet another reason why the SBA/SBS model is excellent on the drawing board but is full of issues and miss-steps in production.

So much like the upgrades from 2010 to 2013, you have to do full re-installs to get to up to Skype4B. The SBA code hasn’t been released yet because of the reliance on 3rd party vendors to provide their no-value-add install wizards. An SBS does not rely on this pointless vendor integration so you can upgrade those on your own – full uninstall of Lync followed by the Skype4B install off the .iso.

6. That annoying 29820006 patch. You can’t install it. Oh you keep trying. Then you realize it’s the x86 patch. So you download the x64 patch and it still won’t install. So I’m not sure exactly what the magic is, just make sure everything in Windows Update that is mandatory or recommended is installed. I think there is an update to Windows Update that has to be installed before you can install this patch.


Announcing the UC Now apps!

•2015/03/24 • Leave a Comment

A few years ago I created a Lync “aggregator” which scours 120+ blogs and other related sites for Lync articles and posts what it finds to various places. You can see the output in Twitter, Twitter again, Bitly, Facebook, Google+,  Tumblr, and in various apps I’ve put out over the years. I’ve also added a less-complete aggregator for Exchange which you can see on Twitter.

I’ve unpublished all my previous Windows Phone apps and now have a universal app called UC Now that is the same app on Windows 8.1 and Windows Phone 8.1. Here is the link to the Windows store and here is the link to the Windows Phone store.

For those on Android devices, you can download the Lync News 2013 app which will get you by until I can get that updated to add the Exchange feeds and a bit more in-line (at least content-wise) with the Windows apps.

If you are using an iPhone then you are hosed. But you probably already new that.

Below are some quick screen shots from the Windows 8.1 app.

Main page

Main launch page

Exchange news feed

Exchange news feed

Skype for Business (Lync) news Feed

Skype for Business (Lync) news Feed

Resource links

Resource links

The Windows apps were done using Microsoft App Studio. The Android app was done using AppYet.

If you have any of the older Windows apps installed, please uninstall them as they will never get updated.

Auto Answer on Polycom VVX phones

•2015/02/20 • Leave a Comment

An admin at one of the sites I help support asked me the other day if there is a way to have a Polycom handset automatically answer a call. I was initially confused as to what he meant. I thought maybe he meant forwarding the call to an AutoAttendant or another extension. (There is a language barrier here too so something may have gotten lost in translation.)

Because seriously: What is the point to have a handset auto answer a call? The person calling the phone will just talk to no one?

Well that is exactly the point. Essentially, this is a “budget” paging function which is what the admin at the remote site wanted to know.

I did some digging and the Polycom VVX phones support this feature natively. I won’t go into the details on how to set this up as you can read this document for the full details. (Skip to page 21)

I have successfully tested this on the VVX 310 and the VVX 500. You call the number assigned to the handset, the phone answers, and any rubbish you say comes out of the speaker on the phone.

If you are interested in a proper paging solution with groups and fancy features using the VVX phones, then check out this article on Anthony Caragol’s Lync/Skype Blog

Deep Dive into the Set-CsPinSendCAWelcomeMail Cmdlet

•2015/02/18 • 3 Comments

mr-mrs-atm-pinWe are rolling out a big dial-in conferencing project. As a good percentage of our users are not yet enabled for Enterprise Voice we are doing a lot of discussing and testing about how to get those users their PIN numbers.

Without a LineURI defined, setting a PIN can be a challenge. Check these articles for more detail: LyncBuilder or ExpertsExchange We have 2 options that we can think of:

1.) We could rip their defined phone number out of AD and assign that as their LineURI. Then they can go to the dialin page and set their own PIN. The problem here is that there is no guarantee that the number in AD is accurate, valid, and/or properly formatted. Even with EV disabled on an account, as soon as you set LineURI you can right click on a non-EV user and a pop out becomes available to call their work number. This should work fine but again, who knows if AD is accurate, has a valid number defined, and has that number in e.164 format.  Plus this could add some confusion when we do get around to EV enabling the user. Since they already have a lineURI, do we overwrite it? Probably, but….confusion.

2. Assign a random PIN to those users and e-mail it to them. Fortunately, there is a poorly documented Lync PowerShell command that actually does this: Set-CsPinSendCAWelcomeMail. This cmdlet is so neglected it doesn’t even get a proper Technet page like every other cmdlet does. Fortunately, it’s a fairly self explanatory cmdlet. In it’s shortest form, you can generate a random PIN for a user and then send them an e-mail with that PIN using the following syntax:

Set-CsPinSendCAWelcomeMail -UserURI -from -smtpserver

The UserURI is the user’s sip address without the “sip:” part. The Set-CsPinSendCAWelcomeMail does a few lookups to find a Lync user that matches this address. Note that if you just use the SamAccountName (cdiaz) or provide a SIP address ( that the cmdlet will be unable to send the e-mail. (I learned this the hard way!). I haven’t tested to see what happens if the e-mail address does not match the users SIP address but I bet the -UserEmailAddress parameter comes in handy in this case.

The -from field is the usual from field used in e-mail. Set this to an administrative account so when people receive the e-mail it will look “official” instead of coming from some doofus like me. Finally you provide the name of the mail server through which to send the e-mail with the -smtpserver parameter. So far so simple. And I bet you can figure out most of the other parameters pretty easily.

The one that took me some time to figure out is the “-TemplatePath” parameter. What this parameter does is let you pick an alternate e-mail message template than the default one that ships with Lync.

Oh, there is a default one?

This is what the default e-mail looks like. I don’t particularly like the verbiage on the first line because I think it’s wrong. Just because you have a PIN doesn’t mean you can suddenly join conferences. You can join conferences without a PIN.   PIN Default welcome Check out this folder on your Lync server: C:\Program Files\Common Files\Microsoft Lync Server 2013\Modules\Lync

Inside there is a file called “CAWelcomeEmailTemplate.html”. Open it in Notepad or some other text/HTML editor and take a look. It’s all just basic HTML but I do want to point out that there are 2 variables in this file. If you want to create your own custom templates, you might need to use these:

%URL% – This is the URL to your dial in Simple URL

%PIN% – This is the PIN that was set by the cmdlet

If you only want to make a minor change, feel free to back up the original CAWelcomeEmailTemplate and then edit that one directly. Note that this directory has the annoying security set on it so you need to open your editor as Administrator in order to save back your changes. Also keep in mind that if you have multiple front ends, you’ll have to copy this edited default file to each one of your servers. And then don’t forget to do it when bringing up a new Front End in the future.

After editing the file, I ran Set-CsPinSendCAWelcomeMail again and this is the new message: PIN Edited default welcomeNow if you want to have a separate template, or want to leave the default template alone, you need to use the -TemplatePath parameter. You can’t just copy your changed template into the C:\Program Files\Common Files\Microsoft Lync Server 2013\Modules\Lync directory and just provide the name of your new template. That would be easy. No, you have to provide a full path  (or have the file sitting in your local home folder (i.e. %userprofilee% directory)). I suppose there is an advantage to this. Instead of having to copy a file to every front end, you only need to keep it in one location. Anyway, here is the command from above but this tme run with the -TemplatePath parameter:

Set-CsPinSendCAWelcomeMail -UserURI -from -smtpserver &quot;c:\temp\MyWelcomeTemplate.html&quot;

When running it, you get something like the following: PIN Edited default welcome PathI hope you read that whole e-mail. Paritally because any reference to The Hitchhikers Guide to the Galaxy ought to be read, but mostly for the last few words: “Your PIN has not been changed”. If a user already has a PIN, then this command will not change it. How to tell if a user already has a PIN? Run Get-CsClientPinInfo -identity <user>. 

So what can you do if you want to use this command but also want to change the PIN no matter what? You can append the -force switch to the command. So running this bad boy produces the output below:

Set-CsPinSendCAWelcomeMail -UserURI -from -smtpserver &quot;c:\temp\MyWelcomeTemplate.html&quot; -force

PIN Edited default welcome Path force Check out the very bottom and you can see that a random PIN was generated.

If you run this cmdlet, doesn’t it seem more like a script than just a cmdlet? That’s because it is a script. If you look in the C:\Program Files\Common Files\Microsoft Lync Server 2013\Modules\Lync directory, there is a file called SetCsPinSendCAWelcomeMail.ps1. This is the script that actually does all the magic. It’s a really straightforward script. I’m not sure what you might want to edit in it except perhaps defining your own variables like %PIN% and %URL% that you want to add yourself.

There may be one reason that you actually do want to edit this script and that is because the verbose mode is “broken”. Lync MVP Pat Richard even opened an IdeaScale entry for this “feature”. Hacking this file will provide a workaround until Microsoft decides to update this file.

Open the file and remove every occurrence of “-Verbose:$Verbose”.  According to TechNet, -verbose “displays any verbose messages, regardless of the value of the $VerbosePreference variable.” And by default, $VerbosePreference is set to “SilentlyContinue” which means “don’t show verbose messages”.

So Microsoft – I provided the fix. Can you implement it please?

%d bloggers like this: