【发布时间】:2017-09-08 09:37:46
【问题描述】:
我正在使用以下 MSPL 脚本将音频呼叫定向到 UCMA 应用程序。
<?xml version="1.0" encoding="utf-8"?>
<r:applicationManifest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" r:appUri="http://www.example.com/recording" xmlns:r="http://schemas.microsoft.com/lcs/2006/05">
<r:requestFilter methodNames="ALL" strictRoute="true" registrarGenerated="true" domainSupported="true" />
<r:allowRegistrationBeforeUserServices action="true" />
<r:responseFilter reasonCodes="NONE" />
<r:proxyByDefault action="true" />
<r:scriptOnly />
<r:splScript><![CDATA[
/*
This script has been generated by SimpleRoute. Changes to this file may cause unexpected behavior.
-
-
-
All audio calls from any origin
are redirected to 'recording@example.com'!
*/
function InviteHasBody()
{
foreach(header in GetHeaderValues(StandardHeader.ContentType))
{
/* Found a content-type header, so we know it has a body. */
return true;
}
return false;
}
function IsAudioCall()
{
if((sipRequest.Method == "INVITE") && (!InviteHasBody() || ContainsString(sipRequest.Content,"\nm=audio ", false) || ContainsString(sipRequest.Content,"\rm=audio ", false)))
{
return true;
}
return false;
}
function IgnoreCall()
{
foreach(header in GetHeaderValues("IgnoreCall"))
{
/* Found ignore call. */
return true;
}
return false;
}
if (sipRequest)
{
if(IsAudioCall())
{
if (!IgnoreCall())
{
targetUser = "sip:recording@example.com";
userAtHost = GetUserAtHost(targetUser);
targetRequestUri = "";
foreach(dbEndpoint in QueryEndpoints(userAtHost, true))
{
targetEpid = dbEndpoint.EPID;
targetRequestUri = dbEndpoint.ContactInfo;
if(targetRequestUri != "" && targetRequestUri != null)
break;
}
if(targetRequestUri == "")
{
RetargetRequest("sip:recording@example.com");
return;
}
ProxyRequest(targetRequestUri);
}
}
}
]]></r:splScript>
</r:applicationManifest>
问题是 UCMA 应用收到来电,与受信任的参与者创建会议(因此可以记录),然后呼叫第二站并将呼叫加入会议。问题部分是调用第二条腿,因为它被 MSPL 脚本拾取,并且呼叫被定向到 UCMA 应用程序。这会导致错误提示
对于带有路由标头的请求,分叉无效
当进行 2 条腿调用时,我使用下面的代码添加了一个名为 IgnoreCall 的自定义标题。
McuDialOutOptions mcuDialOutOptions = new McuDialOutOptions();
mcuDialOutOptions.ParticipantUri = destinationUri;
mcuDialOutOptions.Headers.Add(new SignalingHeader("IgnoreCall", "true"));
_incomingAudioVideoCall.Conversation.ConferenceSession.AudioVideoMcuSession.DialOutAsync(destinationUri, mcuDialOutOptions);
这样 MSPL 脚本可以检查调用是否应定向到 UCMA 应用程序。但 MSPL 脚本未检测到消息/调用具有 IgnoreCall 标头。
谁能告诉我检查消息/呼叫是否包含名为 IgnoreCall 的标头以便我知道何时不将消息/呼叫定向到 UCMA 应用程序的最佳方法是什么?
【问题讨论】:
标签: lync skype-for-business ucma