2014-11-25 5 views
1

Возможно ли настроить Lync 2013 только на отправку одного 180/183 звонка назад по течению после того, как INVITE для Lync запускает несколько INVITE для конечных точек абонента Lync, каждый из которых генерирует 180/183.Lync 2013 - потребляющий 180 звонких ответов от раздвоенного запроса

В случае одновременного звонка, я хочу, чтобы Lync потреблял все эти 180 секунд, чтобы избежать ненужного обмена сообщениями с отправителем INVITE'ing Lync, который находится за SBC.

Кажется, что он действует как прокси-сервер forking, а не b2bua.

ответ

0

Вы правы, говоря, что звонки Lync forks. Если у пользователя несколько конечных точек, Lync разветвит вызов на каждую конечную точку и в свою очередь, каждая конечная точка вернет ответ.

Вы можете создать скрипт MSPL, чтобы уловить 180 ответов. Поскольку MSPL не имеет статуса, для него потребуется приложение поддержки (a ServerApplication), которое проверяет, отправлен ли ответ 180 на текущий вызов и блокирует последующие ответы о звонках. Исходя из предположения, что для всех запросов заголовок CallID будет идентичным, вы можете затем решить, какие ответы отправить, а какие нет.

Простой MSPL будет что-то вроде:

<lc:applicationManifest 
lc:appUri="http://www.contoso.com/DefaultRoutingScript" 
xmlns:lc="http://schemas.microsoft.com/lcs/2006/05"> 
<lc:responseFilter reasonCodes="1XX" /> 
<lc:proxyByDefault action="true" /> 
<lc:splScript><![CDATA[ 
    if (sipResponse && sipResponse.StatusCode == 180) 
    { 
     Dispatch("OnResponse"); 
    } 
]]></lc:splScript> 
</lc:applicationManifest> 

Затем в серверном приложении вы справляетесь OnResponse событие, я думаю, что-то вроде этого:

public void OnResponse(object sender, ResponseReceivedEventArgs e) 
{ 
    if (e.Response.StatusCode == 180) 
    { 
     var callIdHeader = e.Response.AllHeaders.FindFirst(Header.StandardHeaderType.CallID); 
     if (callIdHeader != null) 
     { 
      var callId = callIdHeader.Value; 
      if (ShouldSendRingingResponse(callId)) 
      { 
       e.ClientTransaction.ServerTransaction.SendResponse(e.Response); 
      } 
     } 
    } 
} 

public bool ShouldSendRingingResponse(string callId) { .... } 

Затем вы можете создать некоторую логику функцию ShouldSendRingingResponse, чтобы увидеть, отправлять ли ответ 180 или нет.

Обратите внимание, что я не тестировал это, это всего лишь базовый план того, как я попытаюсь справиться с ситуацией.

0

В Lync нет возможности предотвратить это; однако, как правило, также будет развертываться AudioCodes SBC, который содержит опцию для обработки этого сценария.

Несколько 18x: Устройство поддерживает взаимодействие различных поддерживающих функций с несколькими ответами18x (включая 180 звонков, 181 переадресация вызова, 182 очереди вызовов и 183 сеанса), которые перенаправляются вызывающему абоненту. UA может быть сконфигурирован как поддерживающий только получение первого ответа 18x (т. Е. Устройство передает только этот ответ вызывающему абоненту) или получение нескольких ответов 18x (по умолчанию). Это настраивается параметром профиля IP, «SBC Remote Multiple 18x Support