1

是否可以将 Lync 2013 配置为仅在对 Lync 的 INVITE 触发对 Lync 订阅者端点的多个 INVITE 后仅向上游发送一个 180/183 振铃,每个最终生成 180/183 消息。

在同时响铃的情况下,我希望 Lync 使用所有这些 180 秒以避免不必要的消息返回给 SBC 后面的发起者 INVITE'ing Lync。

它似乎充当分叉代理而不是 b2bua。

4

2 回答 2

0

说 Lync 分叉呼叫是对的。如果用户有多个终结点,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 响应。

请注意,我没有对此进行测试,这只是我尝试处理这种情况的基本概述。

于 2014-12-02T14:32:17.653 回答
0

在 Lync 中没有办法防止这种情况发生。但是,通常也会部署一个包含处理这种情况的选项的奥科 SBC。

多路18x:设备支持多种18x响应(包括180 Ringing、181 Call is Forwarded、182 Call Queued、183 Session Progress)互通,支持转发给主叫。UA 可以配置为仅支持接收第一个 18x 响应(即设备仅将此响应转发给呼叫者),或接收多个 18x 响应(默认)。这由 IP 配置文件参数“SBC Remote Multiple 18x Support”配置

于 2015-01-25T23:00:50.437 回答