MSPL呼叫重定向和IM窗口

时间:2018-12-06 10:23:02

标签: c# skype-for-business skypedeveloper

我需要在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

  1. 爱丽丝向鲍勃发送消息
  2. 鲍勃打开Skype聊天窗口
  3. 爱丽丝打电话给鲍勃
  4. MSPL将目标重定向到Cecile
  5. 塞西尔接听电话
  6. 爱丽丝或塞西尔挂断了电话

问题

爱丽丝无法再呼叫鲍勃,这会导致在聊天窗口中出现“呼叫未完成或已结束”的Skype错误。
这是一个客户端问题,因为根据snooper,没有向Bob发出SIP邀请。

鲍勃一向艾丽斯发送IM消息,它便解决了该问题。或者,如果Alice或Bob关闭了聊天窗口。

场景2

  1. 爱丽丝向鲍勃发送消息
  2. Bob打开Skype聊天窗口
  3. Bob关闭聊天窗口
  4. 爱丽丝打电话给鲍勃
  5. MSPL将目标重定向到Cecile
  6. 塞西尔接听电话
  7. 爱丽丝或塞西尔挂断了电话

问题

在爱丽丝方面,聊天窗口不再发送给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响应而不启动新的邀请请求。

有人知道我想念什么吗?任何帮助将不胜感激!

0 个答案:

没有答案