Как отобразить окно беседы Lync в состоянии «ожидание»?

#c# #lync

#c# #lync

Вопрос:

Это кажется довольно простым, но я не смог найти в Интернете, как это сделать.

У меня есть следующий код:

 public static void StartChatWithUser(Microsoft.Lync.Model.Contact imContact, string title = null)
{
    try
    {
        var lyncClient = Microsoft.Lync.Model.LyncClient.GetClient();

        var conversation = lyncClient.ConversationManager.AddConversation();
        conversation.AddParticipant(imContact);
        if (!string.IsNullOrEmpty(title))
        {
            conversation.Properties[Microsoft.Lync.Model.Conversation.ConversationProperty.Subject] = title;
        }
        var im = conversation.Modalities[Microsoft.Lync.Model.Conversation.ModalityTypes.InstantMessage];
        if (im.CanInvoke(Microsoft.Lync.Model.Conversation.ModalityAction.Connect))
        {
            im.BeginConnect((ar) => { if (ar.IsCompleted) { ((Microsoft.Lync.Model.Conversation.InstantMessageModality)ar.AsyncState).EndConnect(ar); } }, im);
        }
    }
    catch( Exception x )
    {
        //Handle exception
    }
}
  

Этот «вид» работает, поскольку он открывает окно контакта и запускает чат, то есть другую сторону просят присоединиться к чату.

Есть ли способ открыть окно беседы, не инициируя чат с другим пользователем (я хочу, чтобы это было так же, как при двойном щелчке пользователя в списке контактов Lync).

опубликовал тот же вопрос у разработчика клиента Lync. Форум TechNet: http://lksz.me/s8Yn8a .

Заранее спасибо.


Мой конечный результат

Благодаря ответу, предоставленному МОХАМЕДОМ А. САКАР и скеллер, я исправил свой код, и вот мой новый метод. Спасибо, ребята

Требуется следующее предложение using:

 using Microsoft.Lync.Model.Extensibility;
  

И вот новый код:

 public static void StartChatWithUser(Microsoft.Lync.Model.Contact imContact, string title = null)
{
    try
    {
        var lyncAutomation = Microsoft.Lync.Model.LyncClient.GetAutomation();

        var inviteeList = new string[] { imContact.Uri };
        var modalitySettings = new Dictionary<AutomationModalitySettings, object>();
        modalitySettings.Add(AutomationModalitySettings.SendFirstInstantMessageImmediately, false);
        if (string.IsNullOrEmpty(title))
        {
            modalitySettings.Add(AutomationModalitySettings.Subject, title);
        }

        lyncAutomation.BeginStartConversation(
            AutomationModalities.InstantMessage,
            inviteeList,
            modalitySettings,
            (ar) => { if (ar.IsCompleted) { ((Automation)ar.AsyncState).EndStartConversation(ar); }},
            lyncAutomation);
    }
    catch( Exception x )
    {
        //Handle exception
    }
}
  

Комментарии:

1. Вероятно, вам лучше спросить об этом на форуме Lync, поскольку аудитория Lync здесь довольно ограничена. Вот ссылка: social.technet.microsoft.com/Forums/en-US/ocsclients/threads

2. спасибо, я попробую, если получу ответ, я опубликую его здесь

3. @Polynomy : похоже, stackoverflow был подходящим местом для публикации вопроса, в конце концов, форум разработчиков Lync по-прежнему молчит по этому вопросу. Хотя теперь я тоже опубликую информацию там.

Ответ №1:

сначала вы должны создать словарь настроек AutomationModalitySettings и их значений:

 private Dictionary<AutomationModalitySettings, object> _modalitySettings;
  

После этого вы должны инициировать эти процедуры:

 _modalitySettings = new Dictionary<AutomationModalitySettings, object>();
_modalitySettings.Add(AutomationModalitySettings.SendFirstInstantMessageImmediately, false);
  

после этого вы можете инициировать вызов

 _asyncResult = _automation.BeginStartConversation(
             _chosenMode,
             _inviteeList,
             _modalitySettings,
             null,
             null);
  

Надеюсь, это поможет вам

Комментарии:

1. Спасибо, ребята, это идеально, я добавляю еще один ответ с моим полным фиксированным кодом «для процветания», но ваш ответ попал в цель идеально.