【问题标题】:c# Terminate a transfer in UCMA 5c# 在 UCMA 5 中终止传输
【发布时间】:2017-07-20 19:00:21
【问题描述】:

如何在几秒钟后结束正在运行的呼叫转移? 在文档中,最短呼叫转移持续时间为一分钟 (CallTransferOptions.MaximumTransferTime)。 在我的应用程序中,有一个用户列表,传入呼叫按列出的顺序转移。但是等一分钟太久了。 我的代码示例:

for (int i = 0; i < _targetsUri.Length; i++)
{
    try
    {
        _transferType.MaximumTransferTime = new TimeSpan(0, 0, 1, 0, 0);                   
        var handler = _audioVideoCall.BeginTransfer(_targetsUri[i], _transferType, null, _audioVideoCall);                    
        EndTransferCall(handler);                    
        _waitForTransferComplete.WaitOne();
    }
    catch (Exception ex)
    {
       ///
    }
} 

我想在 20 秒后结束对当前用户的呼叫转移,并在下一个迭代周期开始转移到另一个用户。现在电话在一分钟内被转移。

【问题讨论】:

  • 我尝试在新线程中启动呼叫转移,并在 20 秒后使用秒表中止线程,但没有任何反应

标签: c# ucma


【解决方案1】:

要执行您想做的事情,您需要了解在有人值守的盲转接中,在有人值守的盲转接过程中会同时进行两个呼叫。您与对方之间的原始通话以及对方与新目的地之间的新通话。

除了 MaximumTransferTime 选项的限制之外,“终止”新的转接呼叫的唯一方法是:

  1. 从对方端(即挂断电话)
  2. 从新的目的地端(即拒绝呼叫)

这不能在您的 UCMA 应用程序中完成。因此,您将不得不忍受 MaximumTransferTime 选项的限制,否则解决方案会变得更加复杂。

如果您真的想这样做,您需要编写一个Lync Server application(基本上是一个 SIP 代理插件)。在 Lync Server 应用程序中,我将确定这是其中一个转移呼叫并将其分叉到您的 UCMA 应用程序,该应用程序使振铃阶段超时并以某种特殊方式终止分叉。然后,Lync Server 应用程序可以“检测”特殊故障(或与此相关的任何故障),然后将呼叫重定向到“下一个”目标,直到它超出目标为止。

执行此操作需要大量代码,但如果需要,也可以完成。我帮助做了类似的事情,所以我知道上述解决方案可以工作。

【讨论】:

  • 您好,感谢您的回复!我找到了解决方法。 A 呼叫 B,B 接听此呼叫并保持。 B 开始对 C 的新呼叫。如果 C 在 n 秒内没有响应,B 终止此呼叫并开始对 D 的新呼叫。如果 D 回复,B 用初始呼叫替换呼叫。这在 Professional Unified Communications, M. Greenlee 一书中有所描述
  • 监督转移
  • 使用监督转接的问题是 C 看到呼叫来自 B 而不是 A。如果您不介意,那么您就可以开始了。您可以弄乱 SIP 标头,使其看起来像 ACD 呼叫类型以显示有关 A 的信息。
  • 感谢您的评论!你是对的,D 看到调用来自 B,而不是来自 A。你知道那篇描述 sip headers 操作的文章吗?
  • 查看我对这个问题的回答:stackoverflow.com/questions/34039320/…
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 2014-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多