0

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

1 に答える 1