私が構築した 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();
}
}