Lync 2013 — получение 180 звонков на разветвленный запрос

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

В случае одновременного звонка я хочу, чтобы Lync израсходовал все эти 180, чтобы избежать ненужного обмена сообщениями с инициатором, который ПРИГЛАШАЕТ Lync, который находится за SBC.

Похоже, он действует как прокси-форк, а не как b2bua.


person Luke B    schedule 25.11.2014    source источник


Ответы (2)


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

Вы можете создать скрипт MSPL для получения 180 ответов. Поскольку MSPL не имеет состояния, для него потребуется вспомогательное приложение (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 или нет.

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

person Willem    schedule 02.12.2014

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

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

person Luke B    schedule 25.01.2015