【问题标题】:How to make an Attended call transfer with UCMA如何使用 UCMA 进行有人值守呼叫转移
【发布时间】:2013-04-10 20:50:24
【问题描述】:

我正在努力在我构建的 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();
            }
        }

【问题讨论】:

    标签: ucma


    【解决方案1】:

    如果不使用 _waitForTransferComplete 对象,行为是否相同?你不应该需要它——方法结束应该没问题,事件仍然会被引发。如果您强制同步行为以适应应用程序的其余部分,请尝试如下:

    _call.EndTransfer(
      _call.BeginTransfer (number,transferOptions,null,null)
       );
    

    我只是想知道如果在单个线程上运行或其他东西,这样的等待是否会导致问题......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多