MWI_Exchange2010An exciting feature of Exchange 2010 is its support for message waiting indicators (MWI).  While this doesn’t seem like that big of a deal, one of the biggest complaints about Exchange 2007 was its lack of MWI support.  Even though Exchange Unified Messaging is able to send voicemails to an email address, most users are accustomed to the phone notifying them when they have new voicemail.

Even more exciting were the reports that MWI with Exchange 2010 and Cisco CallManager 7 just worked out of the box without extra configuration. Many articles I read spoke of the ease of configuration at getting this feature enabled. This, however, was not the case in our lab.  As it turns out, some of the default settings for SIP trunks in CCM 7 will cause problems with MWI.

I began troubleshooting by using Microsoft Network Monitor 3.0 to track SIP traffic across the trunk.  I found that the Exchange server was sending a SIP Notify message to my softphone by way of CallManager but CallManager was returning a reply of SIP/2.0 403 Forbidden.  There were also corresponding errors in the Exchange Application Log with Event IDs of 1342 and 1344.  The error with Event ID 1342 read

An error occurred while sending MWI notification ‘0/2 (unread/read)’ for mailbox ” associated with UM extension ”. The target selected was ‘CCM’. A different target will be attempted. Additional information: Microsoft.Exchange.UM.UMCommon.MwiTargetException: An error occurred while attempting to deliver an MWI message using target CCM. —> Microsoft.SpeechServer.SipPeerException: A SIP NOTIFY message has failed. —> ResponseCode=403 ResponseText=Forbidden
Microsoft.Rtc.Signaling.FailureResponseException: The requested operation failed.
at Microsoft.Rtc.Signaling.SipAsyncResult.ThrowIfFailed()
at Microsoft.Rtc.Signaling.Helper.EndAsyncOperation[T](Object owner, IAsyncResult asyncResult)
at Microsoft.Rtc.Signaling.RealTimeEndpoint.EndSendMessage(IAsyncResult asyncResult)
at Microsoft.SpeechServer.Core.TelephonyManager.SendNotifyMessageCallback(IAsyncResult result)

— End of inner exception stack trace —
— End of inner exception stack trace —

I traced the problem down to settings within the SIP Profile and SIP Security Profile applied to the SIP trunk.  We were using the default settings for both of these profiles and this ended up being the issue.  There were two sections to fix.

  • Within the security profile the check boxes for “Accept Out-of-Dialog REFER” and “Accept Unsolicited Notification” had to be checked.  (The sip security profile page is located under System>Security Profiles>SIP Security Profile in Call manager)
  • Under the SIP profile the “Stutter Message Waiting” had to be selected. (The SIP profile pages is reached by going to Device>Device Settings>SIP Profiles.  Note that you can’t change the default profile, just make a copy and make any changes necessary)

Once I made these changes to the profiles and made sure that the newly created SIP profile was applied to the trunk I rechecked the packets with Netmon.  The CallManager was no longer rejecting the SIP Notify and there were no errors in Exchange.  After resetting MWI on my softphone with the MWI off and on DNs, message waiting was working normally!