我正在努力在我构建的 UMCA IVR 应用程序中进行呼叫转移。这不使用 Lync。
本质上,我有一个来自外部用户的既定电话,作为 IVR 应用程序的一部分,他们选择了一个要转移的选项。此转移是到配置的外部号码(即:我们的现场接线员)。我要做的是将原始呼叫者转移到外线号码,如果建立有效转移,我想终止原始呼叫。如果未建立传输,我想将控制权发送回 IVR 应用程序以优雅地处理此问题。
我的问题是建立传输时我的 EndTransferCall 没有受到打击。我原以为它会命中,设置我的 AutoResetEvent 并返回 True,然后在我的应用程序中我可以断开原始呼叫。有人可以告诉我我在这里缺少什么吗?
_call 是一个已建立的 AudioVideoCall。我的应用程序调用 Transfer 方法
private AutoResetEvent _waitForTransferComplete = new AutoResetEvent(false);
public override bool Transfer(string number, int retries = 3)
{
var success = false;
var attempt = 0;
CallTransferOptions transferOptions = new CallTransferOptions(CallTransferType.Attended);
while ((attempt < retries) && (success == false))
{
try
{
attempt++;
_call.BeginTransfer(number, transferOptions, EndTransferCall, null);
// Wait for the transfer to complete
_waitForTransferComplete.WaitOne();
success = true;
}
catch (Exception)
{
//TODO: Log that the transfer failed
//TODO: Find out what exceptions get thrown and catch the specific ones
}
}
return success;
}
private void EndTransferCall(IAsyncResult ar)
{
try
{
_call.EndTransfer(ar);
}
catch (OperationFailureException opFailEx)
{
Console.WriteLine(opFailEx.ToString());
}
catch (RealTimeException realTimeEx)
{
Console.WriteLine(realTimeEx.ToString());
}
finally
{
_waitForTransferComplete.Set();
}
}