是否可以将 Lync 2013 配置为仅在对 Lync 的 INVITE 触发对 Lync 订阅者端点的多个 INVITE 后仅向上游发送一个 180/183 振铃,每个最终生成 180/183 消息。
在同时响铃的情况下,我希望 Lync 使用所有这些 180 秒以避免不必要的消息返回给 SBC 后面的发起者 INVITE'ing Lync。
它似乎充当分叉代理而不是 b2bua。
说 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 响应。
请注意,我没有对此进行测试,这只是我尝试处理这种情况的基本概述。
在 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”配置