Exemplo n.º 1
0
        private Request PrepareCallRequest(CallRequest request, out Call call)
        {
            call = new Call()
            {
                AccountSid = request.AccountSid, CallTo = request.To, AnswerUrl = request.AnswerUrl, Direction = "outbound-api", CallerId = request.From, Timeout = request.TimeLimit
            };
            Queue <DialString> dialStrings = new Queue <DialString>();

            System.Text.StringBuilder args_list = new System.Text.StringBuilder();
            string sched_hangup_id = string.Empty;

            // don't allow "|" and "," in 'to' (destination) to avoid call injection
            request.To = request.To.Split(',', '|')[0];
            //set hangup_on_ring
            int hangup = 0;

            if (!int.TryParse(request.HangupOnRing, out hangup))
            {
                hangup = -1;
            }
            if (hangup == 0)
            {
                args_list.Append("execute_on_ring='hangup ORIGINATOR_CANCEL',");
            }
            else if (hangup > 0)
            {
                args_list.Append(string.Format("execute_on_ring='sched_hangup +{0} ORIGINATOR_CANCEL',", hangup));
            }
            // set send_digits
            if (!string.IsNullOrEmpty(request.SendDigits))
            {
                args_list.Append(string.Format("execute_on_answer='send_dtmf {0}',", request.SendDigits));
            }
            //set time_limit
            int time = 0;

            if (!int.TryParse(request.TimeLimit, out time))
            {
                time = -1;
            }
            if (time > 0)
            {
                //create sched_hangup_id
                sched_hangup_id = System.Guid.NewGuid().ToString();
                args_list.Append(string.Format("api_on_answer='sched_api {0} +{1} hupall ALLOTTED_TIMEOUT agbara_callSid {2}',", sched_hangup_id, request.TimeLimit, call.Sid));
                args_list.Append(string.Format("agbara_sched_hangup_id={0}", sched_hangup_id));
            }

            if (!string.IsNullOrEmpty(request.StatusCallbackUrl))
            {
                args_list.Append(string.Format("agbara_statuscallback_url={0},", request.StatusCallbackUrl));
                args_list.Append(string.Format("agbara_statuscallbackmethod={0},", request.StatusCallbackMethod));
            }

            if (!string.IsNullOrEmpty(request.FallbackUrl))
            {
                args_list.Append(string.Format("agbara_fallbackrul={0},", request.FallbackUrl));
                args_list.Append(string.Format("agbara_fallbackmethod={0},", request.FallbackMethod));
            }

            if (!string.IsNullOrEmpty(request.ApplicationSid))
            {
                args_list.Append(string.Format("agbara_applicationsid={0},", request.ApplicationSid));
            }

            args_list.Append(string.Format("agbara_callsid={0},", call.Sid));
            args_list.Append(string.Format("agbara_accountsid={0},", call.AccountSid));
            args_list.Append(string.Format("agbara_answer_url={0},", request.AnswerUrl));

            args_list.Append(string.Format("origination_caller_id_number={0},", request.From));

            //session_heartbeat
            args_list.Append(string.Format("enable_heartbeat_events={0},", 60));
            //Set Direction
            args_list.Append(string.Format("agbara_call_direction={0}", CallDirection.outboundapi));


            foreach (Gateway gate in _fsService.GetGatewaysForNumber(call.CallTo, FS.Sid))
            {
                for (int i = 1; i < int.Parse(gate.GatewayRetry); i++)
                {
                    DialString dialString = new DialString(call.Sid, request.To, gate.GatewayString, gate.GatewayCodec, gate.GatewayTimeout.ToString(), args_list.ToString());
                    dialStrings.Enqueue(dialString);
                }
            }
            Request call_req = new Request(call.Sid, dialStrings, request.AnswerUrl, request.StatusCallbackUrl, request.StatusCallbackMethod);

            return(call_req);
        }
Exemplo n.º 2
0
        private string PrepareNumber(Number Num, FSOutbound outboundClient)
        {
            List <string> num_gw             = new List <string>();
            string        option_send_digits = string.Empty;

            if (string.IsNullOrEmpty(Num.number))
            {
                return("");
            }

            if (!string.IsNullOrEmpty(Num.SendDigit))
            {
                option_send_digits = string.Format("api_on_answer='uuid_recv_dtmf ${uuid} {0}'", Num.SendDigit);
            }
            else
            {
                option_send_digits = "";
            }
            foreach (Gateway gw in fs.GetGatewaysForNumber(Num.number, ""))
            {
                List <string> num_options = new List <string>();

                if (!string.IsNullOrEmpty(option_send_digits))
                {
                    num_options.Add(option_send_digits);
                }

                num_options.Add(string.Format("absolute_codec_string={0}", gw.GatewayCodec));
                num_options.Add(string.Format("leg_timeout={0}", gw.GatewayTimeout));
                int gw_retries = 1;
                try
                {
                    gw_retries = int.Parse(gw.GatewayRetry);
                    if (gw_retries <= 0)
                    {
                        gw_retries = 1;
                    }
                }
                catch (Exception e)
                {
                    gw_retries = 1;
                }
                string options = "";
                if (!string.IsNullOrEmpty(num_options.ToString()))
                {
                    options = string.Format("[{0}]", string.Join(",", num_options));
                }
                else
                {
                    options = "";
                }
                string num_str  = string.Format("{0}{1}/{2}", options, gw.GatewayString, Num.number);
                string dial_num = "";
                for (int i = 1; i <= gw_retries; i++)
                {
                    dial_num = string.Join("|", num_str);
                }
                num_gw.Add(dial_num);
            }
            string result = string.Join("|", num_gw);

            return(result);
        }