Beispiel #1
0
        public string GetXml(HttpContext context, string connectionString)
        {
            string  callBackUrl           = System.Web.Configuration.WebConfigurationManager.AppSettings["CallBackUrl"].ToString();
            string  answerUrl             = System.Web.Configuration.WebConfigurationManager.AppSettings["AnswerUrl"].ToString();
            string  hangupUrl             = System.Web.Configuration.WebConfigurationManager.AppSettings["HangupUrl"].ToString();
            string  conferenceCallBackUrl = System.Web.Configuration.WebConfigurationManager.AppSettings["ConferenceCallBackURL"].ToString();
            Int32   accountId             = 0;
            string  responseXml           = "";
            JObject responseData          = new JObject();
            Helper  helper = new Press3.BusinessRulesLayer.Helper();

            UDC.ReadRestParameters restParameters = new UDC.ReadRestParameters(context);
            try
            {
                Logger.Info("Event:" + restParameters.CallEvent);
                if (restParameters.CallEvent.Equals("getkeys"))
                {
                    DAL.DirectDialExtension dialExtObj = new DAL.DirectDialExtension(connectionString);
                    DataSet ds = new DataSet();
                    if (!string.IsNullOrEmpty(restParameters.Digits))
                    {
                        ds = dialExtObj.DialExtension(restParameters);
                        //if (ds != null)
                        //{
                        //    helper.ParseDataSet(ds);
                        //    responseData = helper.GetResponse();
                        //    responseXml = responseData.SelectToken("ResponseXML").ToString();
                        //    //Make Call to Agent with AnswerXml <Conference>{cutomer_call_request_uuid}</Conference>
                        //    //From,To,AnswerUrl,HangupUrl,AnswerXml
                        //    //AnswerUrl={domain}/DirectDial.ashx HangupUrlSame
                        //    //
                        //    //if (ds.Tables.Count > 1)
                        //    //{
                        //    //    JArray gatewayDetailsObj = (responseData.SelectToken("GatewayDetails") as JArray) as JArray;
                        //    //}
                        //}
                        //else
                        //{
                        //    responseXml = "<Response><Hangup data='No data return from database'/></Response>";
                        //}
                        if (ds != null)
                        {
                            helper.ParseDataSet(ds);
                            responseData = helper.GetResponse();
                            responseXml  = responseData.SelectToken("ResponseXML").ToString();
                            Press3.DataAccessLayer.Conference conferenceObj = new Press3.DataAccessLayer.Conference(connectionString);
                            if (!string.IsNullOrEmpty(Convert.ToString(responseData.SelectToken("AccountId"))))
                            {
                                accountId = Convert.ToInt32(responseData.SelectToken("AccountId").ToString());
                            }
                            //if (accountId > 0)
                            //{
                            //    ManagerDashBoardCounts(connectionString, accountId);
                            //}
                            if (ds.Tables.Count > 1)
                            {
                                JArray   gatewayDetailsObj = (responseData.SelectToken("GatewayDetails") as JArray) as JArray;
                                Gateways gatewaysObj       = new Gateways();
                                string   postingData       = "";
                                JObject  restApiResponse   = new JObject();
                                string   answerXml         = "";
                                foreach (JObject j in gatewayDetailsObj)
                                {
                                    Logger.Info("GatewayDetails loop in direct dial Extension:" + j.ToString());
                                    restApiResponse = new JObject();
                                    string ringUrl     = callBackUrl + "?ChannelName=Agent_" + (j.SelectToken("AgentId")) + "&IsVertoPhone=" + (j.SelectToken("OriginationUrl").ToString().Contains("verto.rtc") ? "true" : "false") + "&IsAgent=true&isTransferToAgent=false&IsRingUrl=true";
                                    string digitsMatch = "digitsMatch='" + j.SelectToken("ConferenceDigits") + "'";

                                    //answerXml = "<Response><Conference stayAlone='true' callbackMethod='GET' callbackUrl='" + callBackUrl + "?ChannelName=Agent_" + (j.SelectToken("AgentId")) + "&#38;IsVertoPhone=" + (j.SelectToken("OriginationUrl").ToString().Contains("verto.rtc") ? "true" : "false") + "&#38;IsAgent=true&#38;isTransferToAgent=false";
                                    answerXml = "<Response><Conference " + digitsMatch + " stayAlone='true' callbackMethod='GET' callbackUrl='" + callBackUrl + "?ChannelName=Agent_" + (j.SelectToken("AgentId")) + "&#38;IsVertoPhone=" + (j.SelectToken("OriginationUrl").ToString().Contains("verto.rtc") ? "true" : "false") + "&#38;IsAgent=true&#38;isTransferToAgent=false";

                                    answerXml += "&#38;GatewayURL=" + j.SelectToken("HttpUrl").ToString() + "' >" + j.SelectToken("Room") + "</Conference></Response>";

                                    //  postingData = "RingUrl=" + HttpUtility.UrlEncode(ringUrl) + "&AnswerXml=" + System.Web.HttpUtility.UrlEncode(answerXml) + "&Priority=H&SequenceNumber=" + j.SelectToken("SequenceNumber") + "&From=";
                                    postingData  = "AnswerXml=" + System.Web.HttpUtility.UrlEncode(answerXml) + "&Priority=H&SequenceNumber=" + j.SelectToken("SequenceNumber") + "&From=";
                                    postingData += j.SelectToken("Source") + "&To=" + j.SelectToken("Number") + "&OriginateSleep=1&AnswerUrl=" + conferenceCallBackUrl + "&Gateways=";
                                    postingData += j.SelectToken("OriginationUrl") + "&HangupUrl=" + hangupUrl + "&ExtraDialString=" + System.Web.HttpUtility.UrlEncode(j.SelectToken("ExtraDialString").ToString());
                                    Logger.Info("call Request Executing to The server in dial extension : " + j.SelectToken("HttpUrl").ToString() + "posting data " + postingData.ToString());
                                    // Logger.Info("httpurl " + j.SelectToken("HttpUrl").ToString());


                                    restApiResponse = gatewaysObj.RestApiRequest(postingData, j.SelectToken("HttpUrl").ToString() + "Call/", "POST");
                                    if (Convert.ToBoolean(restApiResponse.SelectToken("Success").ToString()))
                                    {
                                        Logger.Debug("Call Initiated Response in dial Extension:" + restApiResponse);
                                        var uuid      = restApiResponse.SelectToken("RequestUUID").ToString();
                                        var seqNumber = Convert.ToInt32(j.SelectToken("SequenceNumber").ToString());
                                        conferenceObj.UpdateConferenceRequestUUID(uuid, seqNumber);
                                    }
                                    else
                                    {
                                        Logger.Info("Call Request not Success in dial extension please check Ycom Rest logs for more info payload:" + postingData);
                                        responseXml = "<Response><Hangup data='Issue in connect agent in dial extension'/></Response>";
                                    }
                                }
                            }
                            responseXml = "<Response>" + responseXml + "</Response>";
                        }
                        else
                        {
                            responseXml = "<Response><Hangup data='No data return from database'/></Response>";
                        }
                    }
                }
            }catch (Exception ex) {
                Logger.Error(ex.ToString());
            }
            return(responseXml);
        }
        public string GetStudioXml(HttpContext context, string connectionString, bool isQueuedCall = false, bool IsCbrCall = false)
        {
            string  responseXml  = "";
            Int32   accountId    = 0;
            DataSet ds           = new DataSet();
            JObject responseData = new JObject();

            helper = new Press3.BusinessRulesLayer.Helper();


            //    Logger.Info("Connect to Queue GetStudioXml Started is QueuedCall:"+isQueuedCall+",IsCbrCall:"+IsCbrCall);
            try
            {
                Press3.DataAccessLayer.Conference     conferenceObj = new Press3.DataAccessLayer.Conference(connectionString);
                Press3.DataAccessLayer.GetStudioXmlV1 getStudioXml  = new DataAccessLayer.GetStudioXmlV1(connectionString);
                httpParameters.ParseParameters(context);

                Logger.Info("Incoming call received from:" + httpParameters.FromNumber + ",ToNumber:" + httpParameters.ToNumber + ",Queued Call:" + isQueuedCall + ",Is callBackRequest call:" + IsCbrCall);

                if (string.IsNullOrEmpty(httpParameters.CallStatus) || string.IsNullOrEmpty(httpParameters.ToNumber) || string.IsNullOrEmpty(httpParameters.FromNumber) || string.IsNullOrEmpty(httpParameters.Event))
                {
                    Logger.Debug("Mandatory Parameters are Missing from Connecting to Queue Agent:Callstatus:" + httpParameters.CallStatus + ",Tonumber:" + httpParameters.ToNumber + ",FromNumber:" + httpParameters.FromNumber + ",Event:" + httpParameters.Event);
                    responseXml = "<Response><Hangup data='Mandatory Parameter Missing from connect to agent'/></Response>";
                }
                else
                {
                    if (isQueuedCall)
                    {
                        Logger.Info("It is in Queued Call for fetching agent from connect to agent CallUuid:" + httpParameters.CallUUid + ",SequenceNUmber:" + httpParameters.SequenceNumber);
                        ds = getStudioXml.GetAgentQueueXml(httpParameters);
                    }
                    else if (IsCbrCall)
                    {
                        Logger.Info("It is in  callback request Call  processing cbr Queue CallUuid:" + httpParameters.CallUUid + ",SequenceNUmber:" + httpParameters.SequenceNumber);
                        ds = getStudioXml.GetCbrQueueXml(httpParameters);
                    }

                    else
                    {
                        ds = getStudioXml.StudioXml(httpParameters);
                    }

                    if (ds != null)
                    {
                        helper.ParseDataSet(ds);
                        responseData = helper.GetResponse();
                        responseXml  = responseData.SelectToken("ResponseXML").ToString();
                        if (!string.IsNullOrEmpty(Convert.ToString(responseData.SelectToken("AccountId"))))
                        {
                            accountId = Convert.ToInt32(responseData.SelectToken("AccountId").ToString());
                        }
                        Logger.Info("Studio controller: response data before dialing to agent:" + responseData.ToString());
                        if (accountId > 0)
                        {
                            ManagerDashBoardCounts(connectionString, accountId);
                        }
                        if (ds.Tables.Count > 1)
                        {
                            JArray   gatewayDetailsObj = (responseData.SelectToken("GatewayDetails") as JArray) as JArray;
                            Gateways gatewaysObj       = new Gateways();
                            string   postingData       = "";
                            JObject  restApiResponse   = new JObject();
                            string   answerXml         = "";
                            foreach (JObject j in gatewayDetailsObj)
                            {
                                Logger.Info("GatewayDetails loop in Studio Controller:" + j.ToString());
                                restApiResponse = new JObject();
                                string ringUrl     = callBackUrl + "?ChannelName=Agent_" + (j.SelectToken("AgentId")) + "&IsVertoPhone=" + (j.SelectToken("OriginationUrl").ToString().Contains("verto.rtc") ? "true" : "false") + "&IsAgent=true&isTransferToAgent=false&IsRingUrl=true";
                                string digitsMatch = "digitsMatch='" + j.SelectToken("ConferenceDigits") + "'";
                                //Logger.Info("Conference Digits:"+digitsMatch);
                                answerXml  = "<Response><Conference " + digitsMatch + " stayAlone='true' callbackMethod='GET' callbackUrl='" + callBackUrl + "?ChannelName=Agent_" + (j.SelectToken("AgentId")) + "&#38;IsVertoPhone=" + (j.SelectToken("OriginationUrl").ToString().Contains("verto.rtc") ? "true" : "false") + "&#38;IsAgent=true&#38;isTransferToAgent=false";
                                answerXml += "&#38;GatewayURL=" + j.SelectToken("HttpUrl").ToString() + "' >" + j.SelectToken("Room") + "</Conference></Response>";

                                //postingData = "RingUrl=" + HttpUtility.UrlEncode(ringUrl) +
                                postingData = "AnswerXml=" + System.Web.HttpUtility.UrlEncode(answerXml) + "&Source=Agent&Priority=H&SequenceNumber=" + j.SelectToken("SequenceNumber") + "&From=";
                                // postingData = "AnswerXml=" + System.Web.HttpUtility.UrlEncode(answerXml) + "&Priority=H&SequenceNumber=" + j.SelectToken("SequenceNumber") + "&From=";
                                postingData += j.SelectToken("Source") + "&To=" + j.SelectToken("Number") + "&OriginateSleep=1&AnswerUrl=" + conferenceCallBackUrl + "&Gateways=";
                                postingData += j.SelectToken("OriginationUrl") + "&HangupUrl=" + hangupUrl + "&ExtraDialString=" + System.Web.HttpUtility.UrlEncode(j.SelectToken("ExtraDialString").ToString());
                                Logger.Info("call Request Executing to The server : " + j.SelectToken("HttpUrl").ToString() + "posting data " + postingData.ToString());
                                // Logger.Info("httpurl " + j.SelectToken("HttpUrl").ToString());
                                restApiResponse = gatewaysObj.RestApiRequest(postingData, j.SelectToken("HttpUrl").ToString() + "Call/", "POST");
                                if (Convert.ToBoolean(restApiResponse.SelectToken("Success").ToString()))
                                {
                                    Logger.Debug("Studio call process Call Initiated Response:" + restApiResponse);
                                    var uuid      = restApiResponse.SelectToken("RequestUUID").ToString();
                                    var seqNumber = Convert.ToInt32(j.SelectToken("SequenceNumber").ToString());
                                    conferenceObj.UpdateConferenceRequestUUID(uuid, seqNumber);
                                }
                                else
                                {
                                    Logger.Info("Call Request not Success please check Ycom Rest logs for more info payload:" + postingData);
                                    responseXml = "<Response><Hangup data='Issue in connect agent'/></Response>";
                                }
                            }
                        }
                        responseXml = "<Response>" + responseXml + "</Response>";
                    }
                    else
                    {
                        responseXml = "<Response><Speak>No agent available call is getting hangup</Speak><Hangup data='No data return from database'/></Response>";
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Info("Exception in GetStudio Xml: " + ex.ToString());
                responseXml = string.Format("<Response><Hangup data='server error -->{0} '/></Response>", ex.ToString());
            }
            return(responseXml);
        }