Category Archives: 15334

Inbox Rules Do Not Work on Unity Connections 8.5.1 Messages

I ran into this with a customer recently and wanted to document what I found.  The customer is using Cisco Unity Connections 9.1 for voicemail with Single Inbox and Exchange 2010 SP3.

Cisco’s Single Inbox provides a UM experience similar to Exchange Unified Messaging, where voicemails are delivered to the user’s Inbox as emails with attached WAV files.  The voicemail messages are linked by Unity Connections so that if a user deletes a voicemail in Unity, the email message is also deleted.  Likewise, if the user deletes the voicemail email message in Exchange the voicemail is deleted in Unity.

Unity Connections 8.5.x and later uses Exchange Web Services (EWS) for connectivity to Exchange 2007 and Exchange 2010 mailboxes using a service account.  How Unity programmatically does this is a mystery since it is not documented anywhere in Cisco’s documentation.

The issue here is that the way Unity Connections Single Inbox creates the message in the recipient’s mailbox bypasses the rules table associated with the mailbox.  The result is that rules don’t fire for these messages.  For example, it’s common for users to create an Inbox rule that moves messages from Unity Connections to a custom folder like “Voicemails”.  If you manually run the rule it works as expected.

This issue is documented somewhat in the Cisco Community Forums here:  A comment in this forum post implies this is an Exchange bug, but I’ve confirmed that Inbox rules fire correctly when messages are sent via EWS in a normal manner.  Fellow Exchange MCM, Mike Pfeiffer, has a great post on Sending Email with PowerShell and the EWS Managed API.  I used this PowerShell function to send emails using EWS and test Inbox rules, which worked perfectly.

I’ve tried every creative trick I know to work around this issue, to no avail.  In the end, there’s really nothing that can be done to fix this until Cisco changes to the way it sends Single Inbox messages using EWS.

How to Configure a Disaster Information Message in Exchange 2010 UM

Exchange 2010 Unified Messaging can be used to create a disaster information message for employees.  Typically you will have a dedicated phone number for this purpose and will advertise this number to employees on a regular basis.  When a disaster occurs a DR coordinator calls into Exchange UM and records a message for employees, giving them information and instructions.  You may want to visit Talking About Disaster for information and ideas about what to include in your disaster information message.

This article explains how to create an auto attendant for this purpose and how to configure Exchange to allow greetings to be recorded using the telephone user interface (TUI).  I assume that you already are using Exchange Unified Messaging and that it’s configured properly. 

Let’s get started.

  • Create a new enabled* Auto Attendant called “Disaster Announcement” with a Pilot Identifier for the disaster information extension.

  • Open the properties of the new auto attendant.  On the General tab, disable speech-enabled and directory enabled. 
  • Set the Business Hours Greeting and Business Hours Main Menu Prompt to use the C:\Program Files\Microsoft\Exchange Server\V14\UnifiedMessaging\prompts\en\Silence-250ms.wav file. This will set the prompts to silence.   Alternatively, you may want to use a WAV file saying, “There are no disasters right now. Call back later” for the Main Menu prompt. 
  • Set the Times tab to Always Run
  • Clear all the options in the Features tab. 
  • Configure a new Key Mapping called “Announcement” that runs the “Disaster Announcement” auto attendant (itself) when the user presses no key (time-out). This will cause the auto attendant to loop.  Alternatively, you can configure it to play the Silence-250ms.wav file, which will loop indefinitely until the caller gets bored of hearing nothing and hangs up. 

  • Clear all the options on the Dialing Restrictions tab and click OK to save the changes.

Then use the TUI to configure the auto attendant greeting when a disaster occurs.   Read Enable Custom Prompt Recording Using the Telephone User Interface for instructions on how to do this.

* If you create the auto attendant as disabled you will run into an interesting problem where you cannot save the AA configuration changes because the AA references a disabled AA (itself).

Introducing LyncAddContacts!

The Office Communications Server 2007 Resource Kit Tools featured a nifty tool called LCSAddContacts.  This WSF script allows you to add contacts to LCS or OCS (but not Lync Server) using WMI.  I was hoping to see a version of this tool for Lync Server, but no such luck — So I wrote one myself.

I’m surprised to find that there is no PowerShell cmdlet that allows you to add contact groups or contacts, and since there are no WMI classes for Lync Server anymore, I needed a way to do this — so I wrote a tool myself.  I leverage the DBIMPEXP utility from the Lync Server DVD to import and export contacts. 

The purpose of LyncAddContacts is to add the same contact groups and contacts to multiple users programatically.  For example, you may want to import a contact group called “Company Contacts”  that contains contacts for everyone in the company.  Here’s how it works:

  1. Create a template (source) user in Lync with the contact groups and contacts that you want to export.
  2. Run the LyncAddContacts tool to export the source user’s contacts
  3. Run the LyncAddContacts tool again in import mode and target the user or OU that you want to import the contacts to.


  • The tool must be run on the Lync server from which you will export/import the data.
  • You must be a member of the CSAdministrator security group to run this tool.  This group has rights to export and import contact groups and contacts to all users.
  • You must copy the DBIMPEXP.EXE tool from the \Support folder on the Lync Server 2010 installation media to the same folder where the LyncAddContacts tool will be run.
  • You must have read, write and execute rights to the folder where the LyncAddContacts tool will be run.

Note: This tool must be run under the CScript host due to the amount of output generated.  You will see a syntax pop-up window if the tool runs under WScript.


First, you must export the source user’s contact groups and contacts.  The following example exports this information from a user named “Source” on a Lync Standard Edition server:
where is the SIP address of the user you want to export.

CScript LyncAddContacts.vbs

The following example performs the same export on a Lync Enterprise Edition server:

CScript LyncAddContacts.vbs

where is the SIP address of the user you want to export and is the SQL server used by the front-end pool.

Second, you import the contact groups and contacts to either a single target user or a target Organizational Unit in your domain.  The following example imports the data to a user named “Target” on a Lync Standard Edition server:

CScript LyncAddContacts.vbs /import

where is the SIP address of the user you want to import the contact info to.  For Lync Server Enterprise Edition you must add the SQL server used by the front-end pool, as shown above.

The following example imports the same contact groups and contacts to all the SIP enabled users in the Users container in Active Directory:

CScript LyncAddContacts.vbs /import CN=Users,DN=domain,DN=com

Again, for Lync Server Enterprise Edition you must add the SQL server used by the front-end pool, as in this example:

CScript LyncAddContacts.vbs /import OU=Lync Users,DN=domain,DN=com”

A nice benefit of this tool is that contacts will not get a notification that so-and-so has added them to their contact list.  This is really useful in preventing unnecessary pop-ups from the Lync client.

Download LyncAddContacts.  View the source code here.

Disclaimer: I hope that the information in this blog is valuable to you. Your use of the information contained in these pages, however, is at your sole risk. All information on these pages is provided “as -is”, without any warranty, whether express or implied, of its accuracy, completeness, fitness for a particular purpose, title or non-infringement, and none of the third-party products or information mentioned in the work are authored, recommended, supported or guaranteed by The EXPTA {blog}. Further, EXPTA shall not be liable for any damages you may sustain by using this information, whether direct, indirect, special, incidental or consequential, even if it has been advised of the possibility of such damages.

Testing Speech Grammars

In an earlier post I wrote about speech grammars in Lync Server and Exchange Unified Messaging.

Here’s a simple VBScript that uses the method to hear how speech-enabled programs pronounce words.  This is useful to determine how these programs will pronounce proper names.

sText = InputBox(“Enter the text you want the computer to say.”, “Text to Speech”)
sText = Trim(sText)

If sText <> “” Then
     set sapi = CreateObject(“sapi.spvoice”)
     sapi.Speak sText
End If

For example, if you enter my name as it’s spelled in the input box (Jeff Guillet) you will hear how speech enabled applications pronounce my name.  In the case of Exchange UM directory lookups, this is also how Exchange expects callers to pronounce my name to find a match.

If you enter the phonetic spelling of my name (Jeff GheeA) you will hear it pronounced correctly.