public bool Originate(string CallSid) { Request CallReq; bool ret = false; string outbound_str = string.Empty; DialString gw = new DialString(null, null, null, null, null, null); try { CallReq = CallRequest[CallSid]; } catch (Exception ex) { return(false); } try { gw = CallReq.gateways.Dequeue(); } catch (Exception ex) { CallRequest.Remove(CallSid); return(false); } StringBuilder _options = new StringBuilder(); //Set agbara app flag _options.Append("agbara_app=true,"); if (!string.IsNullOrEmpty(gw.timeout)) { _options.Append(string.Format("originate_timeout={0},", gw.timeout)); } _options.Append("ignore_early_media=true,"); if (!string.IsNullOrEmpty(gw.codecs)) { _options.Append(string.Format("absolute_codec_string={0}", gw.codecs)); } if (!string.IsNullOrEmpty(FSOutboundAddress)) { outbound_str = string.Format("'socket:{0} async full' inline", FSOutboundAddress); } else { outbound_str = "&park()"; } string dial_str = string.Format("originate {0}{1},{2}{3}{4}/{5} {6}", "{", gw.extra_dial_string, _options, "}", gw.gw, gw.to, outbound_str); BgApiResponse ApiResponse = (BgApiResponse)Task <Event> .Factory.StartNew(() => BgAPICommand(dial_str)).Result; if (ApiResponse.IsSuccess()) { string job_uuid = ApiResponse.GetJobUUID(); if (!string.IsNullOrEmpty(job_uuid)) { BackgroundJobs[job_uuid] = CallSid; ret = true; } else { ret = false; } } return(ret); }
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); }
/// <summary> /// Send Keypad Digit to component - Will Send DTMF if call active /// </summary> /// <param name="data">Keypad press to send</param> public void SendKeypad(eKeypadKeys data) { if (!OffHookStatus) { switch (data) { case eKeypadKeys.Num0: DialString = DialString + "0"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num1: DialString = DialString + "1"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num2: DialString = DialString + "2"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num3: DialString = DialString + "3"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num4: DialString = DialString + "4"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num5: DialString = DialString + "5"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num6: DialString = DialString + "6"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num7: DialString = DialString + "7"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num8: DialString = DialString + "8"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Num9: DialString = DialString + "9"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Star: DialString = DialString + "*"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Pound: DialString = DialString + "#"; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Clear: DialString = String.Empty; DialStringFeedback.FireUpdate(); break; case eKeypadKeys.Backspace: DialString = DialString.Remove(DialString.Length - 1, 1); DialStringFeedback.FireUpdate(); break; } } if (!OffHookStatus) { return; } switch (data) { case eKeypadKeys.Num0: SendFullCommand(null, "dtmf", "0", 1); if (AppendDtmf) { DialString = DialString + "0"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num1: SendFullCommand(null, "dtmf", "1", 1); if (AppendDtmf) { DialString = DialString + "1"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num2: SendFullCommand(null, "dtmf", "2", 1); if (AppendDtmf) { DialString = DialString + "2"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num3: SendFullCommand(null, "dtmf", "3", 1); if (AppendDtmf) { DialString = DialString + "3"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num4: SendFullCommand(null, "dtmf", "4", 1); if (AppendDtmf) { DialString = DialString + "4"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num5: SendFullCommand(null, "dtmf", "5", 1); if (AppendDtmf) { DialString = DialString + "5"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num6: SendFullCommand(null, "dtmf", "6", 1); if (AppendDtmf) { DialString = DialString + "6"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num7: SendFullCommand(null, "dtmf", "7", 1); if (AppendDtmf) { DialString = DialString + "7"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num8: SendFullCommand(null, "dtmf", "8", 1); if (AppendDtmf) { DialString = DialString + "8"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Num9: SendFullCommand(null, "dtmf", "9", 1); if (AppendDtmf) { DialString = DialString + "9"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Star: SendFullCommand(null, "dtmf", "*", 1); if (AppendDtmf) { DialString = DialString + "*"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Pound: SendFullCommand(null, "dtmf", "#", 1); if (AppendDtmf) { DialString = DialString + "#"; DialStringFeedback.FireUpdate(); } break; case eKeypadKeys.Clear: break; case eKeypadKeys.Backspace: break; } }