I’m in Redmond next week for the MVP Summit

I’ll be in Bellevue and Redomd next week for the Microsoft 20111 MVP Summit along with my fellow MVPs.

This will be the 5th Summit and I’m looking forward to a great time visiting with my fellow MVPs and the Lync Product Group. My past Summits have always been both informative and fun and I expect this one to be no different. The only bad thing is things run all day and into the night and I’ll be in a timezone I’m not adjusted too. But I guess I’ll have it easier than the guys and gals coming form Europe,and the Orient.

I’ll be Tweeting my experiences but don’t expect any juicy tidbits as most things and all the content will be under NDA.

I am also speaking in late March at the Orlando .NET User Group Code Camp and I’ll blog about that soon.

Impesonating a user in a UCMA call

Recently I was working on an application endpoint that records a Lync audio call. I got that working fine but when a Lync user called another user and the call then got redirected to my application the name in the Communicator window would change to the name that my app was registered as. Not a good thing as I wanted my callers to think they were leaving a voice mail for the user.

This is a common thing to do in a Back to Back call scenario where you impersonate a different user for the second leg (which you originate in your app). But my call was actually terminating with my app so there was no second leg that I was connecting to. I wasn’t sure if this was possible so I went digging around in the debugger and IntelliSense (both are my best friends). This is what I came up with and it works great..


        private static void AudioVideoCallReceived(object sender, CallReceivedEventArgs<AudioVideoCall> e)


            Trace.WriteLineIf(tracer.TraceVerbose, “AudioVideoCallReceived”);

            Debug.Assert(e != null, “e != null”);

            Debug.Assert(e.RequestData != null, “e.RequestData != null”);


            if (e.RequestData != null)


                e.Call.Conversation.Impersonate(e.TransferredBy, e.Call.Conversation.LocalParticipant.PhoneUri, e.Call.Conversation.LocalParticipant.DisplayName);




            StartWorkflow(e.Call, e.RequestData, e.TransferredBy.ToString(), e.RemoteParticipant.ToString());



Now the caller only sees the original caller’s name and status when talking to my application. Note that the values don’t have to resolve to real addresses but they do need to be properly formatted.