我正在努力在我建立的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();
}
}
答案 0 :(得分:0)
如果不使用_waitForTransferComplete对象,行为是否相同?你不应该需要它 - 方法结束应该没问题,事件仍然会被提出。如果您为了适应应用程序的其余部分而强制执行同步行为,请尝试这样:
_call.EndTransfer(
_call.BeginTransfer (number,transferOptions,null,null)
);
我只是想知道如果在单个线程或其他东西上运行,那么等待是否会导致问题......