Lync 2013 - 使用来自分叉请求的 180 个响铃响应
Posted
技术标签:
【中文标题】Lync 2013 - 使用来自分叉请求的 180 个响铃响应【英文标题】:Lync 2013 - consuming 180 ringing responses from a forked request 【发布时间】:2014-11-25 12:33:41 【问题描述】:是否可以将 Lync 2013 配置为在对 Lync 的 INVITE 触发多个对 Lync 订阅者端点的 INVITE(每个最终生成 180/183 消息)后仅向上游发送一个 180/183 振铃。
在同时响铃的情况下,我希望 Lync 使用所有这 180 秒以避免不必要的消息返回给 SBC 后面的发起方 INVITE'ing Lync。
它似乎是作为一个分叉代理而不是 b2bua。
【问题讨论】:
【参考方案1】:说 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响应。
请注意,我没有对此进行测试,这只是我将如何尝试处理这种情况的基本概述。
【讨论】:
【参考方案2】:在 Lync 中没有办法防止这种情况发生;但是,通常也会部署一个包含处理这种情况的选项的奥科 SBC。
多个 18 倍: 设备支持多种18x响应(包括180 Ringing、181 Call is Forwarded、182 Call Queued、183 Session Progress)的互通,支持转发给主叫。 UA 可以配置为仅支持接收第一个 18x 响应(即设备仅将此响应转发给呼叫者),或接收多个 18x 响应(默认)。这由 IP 配置文件参数“SBC Remote Multiple 18x Support”配置
【讨论】:
以上是关于Lync 2013 - 使用来自分叉请求的 180 个响铃响应的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Lync 2013 中接受音频呼叫时出现 System.UnauthorizedAccessException
在 MSPL 应用程序中添加 SIP 标头在 Lync 2013 中丢失/被删除