Skype для бизнеса, исходящий звонок и воспроизведение аудио файла

Цель состоит в том, чтобы разработать интерфейс решения для мониторинга системы с модулем, который вызывает дежурного по вызову и воспроизводит речевой / аудиофайл из файловой системы.

У меня есть пользователь Skype для бизнеса 2015 (Fomerly Lync) с включенными параметрами телефона. Я также могу позвонить по номеру телефона. но тогда возникает вопрос, как ждать, пока набранный абонент не примет телефонный звонок и не воспроизведет аудиофайл (или лучше вариант System.Speech вместо воспроизведения аудиофайла), и после этого человек должен подтвердить, что он / она получил звонок.

что у меня сейчас есть:

public void SendLyncCall(string numberToCall, string textToSpeech)
{
  var targetContactUris = new List<string> {numberToCall}; //"tel:+4900000000" }; //removed here

  _automation.BeginStartConversation(AutomationModalities.Audio, targetContactUris, null, StartConversationCallback, null);

    while (this.globalConv == null)
    {
      Thread.Sleep(1);
    }
  if (globalConv != null)
  {
    LyncClient client = LyncClient.GetClient();

    client.DeviceManager.EndPlayAudioFile(
      client.DeviceManager.BeginPlayAudioFile(@"d:\tmp\test1.wav",
        AudioPlayBackModes.Communication,
        false,
        null,
        null));
  }
}

private void StartConversationCallback(IAsyncResult asyncop)
{
 // this is called once the dialing completes..
if (asyncop.IsCompleted == true)
{

    ConversationWindow newConversationWindow = _automation.EndStartConversation(asyncop);
  globalConv = newConversationWindow;
    AVModality avModality = globalConv.Conversation.Modalities[ModalityTypes.AudioVideo] as AVModality;


    foreach (char c in "SOS")
    {
      avModality.AudioChannel.BeginSendDtmf(c.ToString(), null, null);
      System.Threading.Thread.Sleep(300);
    }

  }
}

и другой вопрос, возможно ли изменить весь модуль, чтобы он был зарегистрированной конечной точкой, чтобы он мог работать как служба Windows? В настоящее время мой sfb должен быть открыт и авторизован..

1 ответ

Решение

Обратите внимание, что это НЕ код UCMA, который вы разместили, а код Lync Client SDK.

Я предполагаю, что вы хотите знать, как делать то, что вы просите, с помощью Lync Client SDK.

Вам нужно перехватить событие AVModality.ModalityStateChanged, чтобы узнать, когда оно меняется на AVModality.State и на Connected.

Находясь в подключенном состоянии, вы можете делать то, что хотите.

Корректируя ваш код, я придумал:

private void StartConversationCallback(IAsyncResult asyncop)
{
    // this is called once the dialing completes..
    if (asyncop.IsCompleted == true)
    {
        ConversationWindow newConversationWindow = _automation.EndStartConversation(asyncop);
        AVModality avModality = newConversationWindow.Conversation.Modalities[ModalityTypes.AudioVideo] as AVModality;
        avModality.ModalityStateChanged += ConversationModalityStateChangedCallback;
    }
}

private void ConversationModalityStateChangedCallback(object sender, ModalityStateChangedEventArgs e)
{
    AVModality avModality = sender as AVModality;
    if (avModality != null)
    {
        switch (e.NewState)
        {
            case ModalityState.Disconnected:
                avModality.ModalityStateChanged -= ConversationModalityStateChangedCallback;
                break;

            case ModalityState.Connected:
                avModality.ModalityStateChanged -= ConversationModalityStateChangedCallback;
                foreach (char c in "SOS")
                {
                    avModality.AudioChannel.BeginSendDtmf(c.ToString(), null, null);
                    System.Threading.Thread.Sleep(300);
                }
                break;
        }
    }
}
Другие вопросы по тегам