我需要在Skype上为商业服务器2015开发一个应用程序,该应用程序允许呼叫转移但不允许即时消息转移。我设法通过在每个前端上运行的托管MSPL服务来做到这一点。这是一段代码:
public void OnRequest(object sender, RequestReceivedEventArgs e)
{
if (e.Request.StandardMethod == Request.StandardMethodType.Invite)
{
// Enable simple proxy mode and disable forking.
e.Request.SimpleProxy = true;
e.ServerTransaction.EnableForking = false;
if (e.Request.AllHeaders.FindFirst(Header.StandardHeaderType.MsImFormat) == null) // do not manage IM message
{
if (e.Request.Content != null && e.Request.Content.Contains("m=audio")) //This is an audio call
{
string destination = ComputeDestinationFromHeader(e); //some business code here
e.Request.Retarget(destination);
}
}
}
e.ServerTransaction.CreateBranch().SendRequest(e.Request);
}
与用户服务相比,MSPL脚本的工作优先级较低。在客户端混合IM和音频时会出现问题。 这是两个有问题的方案:
场景1
问题
爱丽丝无法再呼叫鲍勃,这会导致在聊天窗口中出现“呼叫未完成或已结束”的Skype错误。
这是一个客户端问题,因为根据snooper,没有向Bob发出SIP邀请。
鲍勃一向艾丽斯发送IM消息,它便解决了该问题。或者,如果Alice或Bob关闭了聊天窗口。
场景2
问题
在爱丽丝方面,聊天窗口不再发送给Bob,而是发送给Cecile。实际上,如果Alice在此聊天窗口中发送了一条新的IM消息,则该消息将发送到Cecile。
我已经尝试过SIP响应302(暂时移动): https://docs.microsoft.com/en-us/lync/server-sdk/how-to-forward-im-invite-to-a-different-target 但是,Skype for Business客户端似乎不理解响应代码,仅发送ACK响应而不启动新的邀请请求。
有人知道我想念什么吗?任何帮助将不胜感激!