UCMA5 c # Retreive не получает вызов из ожидания - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть приложение типа IVR, и перед тем, как сделать b2b-вызов, я делаю selftranfer с входящим вызовом, который переводится в режим удержания с moh при поиске исходящего этапа для агента.Я подписываюсь на удаленное присутствие и пересылаю вызов зеленому (бесплатному) агенту, но если агент не отвечает или занят, я пытаюсь получить вызов, чтобы продолжить поиск.Проблема заключается в том, что поиск вызова не выводит вызов из режима ожидания.Если в качестве клиента я возобновляю свой звонок с помощью кнопки возобновления в клиенте S4B, все работает хорошо, и поиск звонков переходит к агенту net free, в противном случае звонок останется без изменений.Почему поиск звонков не работает в соответствии с документацией.Вот моя процедура извлечения кода>

 private void RetrieveCallAfterTransferFailure()
        {
            // Take the call off of hold after a transfer fails.
            LogHelper.Log(LogTarget.FileEvent, "IVR Trying to retrive from Self transfer ...", 2);

            try
            {
                _flow.BeginRetrieve(retrieveResult =>
                {
                    try
                    {
                        LogHelper.Log(LogTarget.FileEvent, "IVR  Trying to retrive from Self transfer ...", 2);
                        Thread.Sleep(1000);

                        _flow.EndRetrieve(retrieveResult);

                        LogHelper.Log(LogTarget.FileEvent, "IVR  Successfully retrieved call. Waiting a bit");
                        LogHelper.Log(LogTarget.FileEvent, "IVR Call is retreived time passed...", 1);
                        //_flow.EndHold(retrieveResult);
                        Thread.Sleep(2000);
                         // _flow.EndRetrieve(retrieveResult);

           //         
           //         _speechSynthesizer.Speak("A green agent is busy. Please retry your option!");  //TEXT TO SPEEECH!
           //       SpeakMenuOptions();
           //    toneController.ToneReceived += toneController_ToneReceived;


                    }
                    catch (RealTimeException rtex)
                    {
                        LogHelper.Log(LogTarget.FileEvent, "IVR  Failed retrieving call." + rtex);
                    }
                },
                null);
            }
            catch (InvalidOperationException ioex)
            {
                LogHelper.Log(LogTarget.FileEvent, "IVR Failed retrieving call."+ ioex);
            }
        }

Это вызывается из обработчика приема при endtransfer>> 1004 *

        private void SelfTransferCompleted(IAsyncResult asyncResult)
        {
            Exception exceptionCaught = null;
           // bool exceptionEncountered = true;
            try
            {
                _flow.Call.EndTransfer(asyncResult);
                //Self Transfer has completed. successfully.
                exceptionEncountered = false;
                LogHelper.Log(LogTarget.FileEvent, "IVR Menu Ended self tranfer for call>" +_flow.Call.CallId);
                // cleaning up atten
                string sqlstring = "update astsxqueue set uniqueid ='" + _server.b2bCallDelId + "' where uniqueid='" + _flow.Call.CallId + "';";
                LogHelper.Log(LogTarget.FileEvent, sqlstring);
                _server.mconnector.Mysqlqueryruner(sqlstring);

            }
            catch (OperationTimeoutException orte)
            {
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted Operation Timeout Exception: " + orte.ToString(), 2);
                exceptionCaught = orte;
                exceptionEncountered = true;
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Trying to transfer to other agent...", 2);
                RetrieveCallAfterTransferFailure();

                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Waiting for transfer to complete...");
                _server._waitForTransferComplete.WaitOne();
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Transfer completed.");

            }


            catch (FailureResponseException frte)
            {
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Failure Exception = {0}" + frte.ToString(), 2);
                exceptionCaught = frte;
                exceptionEncountered = true;
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Trying to transfer to other agent...", 2);

                RetrieveCallAfterTransferFailure();
                LogHelper.Log(LogTarget.FileEvent, "Waiting for transfer to complete...");
                _server._waitForTransferComplete.WaitOne();
                LogHelper.Log(LogTarget.FileEvent, "Transfer completed.");

            }

            catch (RealTimeException rte)
            {
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Realtime Exception = {0}" + rte.ToString(),2);
                exceptionCaught = rte;
                exceptionEncountered = true;
                LogHelper.Log(LogTarget.FileEvent, "IVR SelfTransferCompleted  Trying to transfer to other agent...", 2);
                RetrieveCallAfterTransferFailure();
                LogHelper.Log(LogTarget.FileEvent, "IVR Call is retreived waiting a bit...", 2);
                Thread.Sleep(2000);
                LogHelper.Log(LogTarget.FileEvent, "Self Transfer Call flow hold status is :>" + _flow.HoldStatus);

                LogHelper.Log(LogTarget.FileEvent, "IVR Call is retreived time passed...", 2);
                RetrieveCallAfterTransferFailure();
                LogHelper.Log(LogTarget.FileEvent, "Self Transfer Call flow hold status is :>" + _flow.HoldStatus);
                CallAgain();
                // _flow.EndHold(null);

                //   _speechSynthesizer.Speak("We did not get to a green agent. Please retry your option!");  //TEXT TO SPEEECH!
                // SpeakMenuOptions();
                // toneController.ToneReceived += toneController_ToneReceived;
                // Wait for the call to complete the transfer.
                LogHelper.Log(LogTarget.FileEvent, "Waiting for transfer to complete...");
                //_server._waitForTransferComplete.Set();
                LogHelper.Log(LogTarget.FileEvent, "Transfer completed.");

            }

        }

Любое предложение приветствуется.Странно то, что он отлично работает, когда я отлаживаю код в VS2017, но не при нормальном запуске приложения.

Спасибо.

...