📄 a2billingi.php
字号:
$A2B->agiconfig['use_dnid']=0; }//END FOR }else{ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[AUTHENTICATION FAILED (cia_res:".$cia_res.")]"); } /**************** SAY GOODBYE ***************/ if ($A2B->agiconfig['say_goodbye']==1) $agi-> stream_file('prepaid-final', '#'); }elseif($mode == 'standard'){ if ($A2B->agiconfig['answer_call']==1){ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[ANSWER CALL]'); $agi->answer(); $status_channel=6; }else{ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[NO ANSWER CALL]'); $status_channel=4; } $A2B -> play_menulanguage ($agi); if (strlen($A2B->dnid) <= 4 && is_numeric($A2B->dnid)){// $agi-> verbose("test to short"); $agi-> answer(); $A2B->call_did_to_ivr($agi, $RateEngine, $A2B, '', '', '' ,$A2B->dnid);/* $QUERY ="SELECT cc_card.id, ivr_exten_destination, ivr_pstn_voip_sounds FROM cc_card, cc_custom_ivr WHERE cc_card_id = cc_card.id and cc_card.username ='$A2B->accountcode' and ivr_exten_key = '$A2B->dnid'"; $result = $A2B -> instance_table -> SQLExec ($A2B->DBHandle, $QUERY); if (is_array($result)) { //$agi->verbose($result); $agi->verbose("Short extensions is ! : $A2B->dnid "); $agi->verbose("Found a Short extensions for this Caller ! : $A2B->accountcode "); $exten_type = $result[0][2]; switch ($exten_type){ case SIP: $agi->verbose("Destatinos is SIP: ".$result[0][1]); $sort_dial_dst_sip = $result[0][1]; continue; case IAX: $agi->verbose("Destatinos is IAX2: ".$result[0][1]); $sort_dial_dst_iax = $result[0][1]; continue; case PSTN: $agi->verbose("Destatinos is PSTN: ".$result[0][1]); $sort_dial_dst_pstn = $result[0][1]; continue; default: break; } $dialparams = $A2B->agiconfig['dialcommand_param_sipiax_friend']; if ($sort_dial_dst_sip) { $agi->answer(); $agi->stream_file("prepaid-short-intro"); $dialstr = "SIP/".$sort_dial_dst_sip."|20|".$dialparams; $myres = $agi->exec("DIAL $dialstr"); $agi->hangup(); exit(); }elseif ($sort_dial_dst_iax){ $agi->answer(); $agi->stream_file("prepaid-short-intro"); $dialstr = "IAX2/".$sort_dial_dst_iax."|20|".$dialparams; $myres = $agi->exec("DIAL $dialstr"); $agi->hangup(); exit(); } $agi->answer(); $agi->stream_file("prepaid-short-intro"); }else { $agi->verbose("Not found Short extensions for this Caller, Hangup Now!"); $agi->answer(); sleep(2); $agi->stream_file("prepaid-short-dest-unreachable"); $agi->hangup(); exit(); } */} /************************* PLAY INTRO MESSAGE ************************/ if (strlen($A2B->agiconfig['intro_prompt'])>0){ $agi-> stream_file($A2B->agiconfig['intro_prompt'], '#'); } /* WE START ;) */ $cia_res = $A2B -> callingcard_ivr_authenticate($agi); $A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[TRY : callingcard_ivr_authenticate]"); // GOOD AUTHENTICATION AND WE HAVE CREDIT TO GO AHEAD if ($cia_res==0){ // RE-SET THE CALLERID $A2B->callingcard_auto_setcallerid($agi); //$A2B->callingcard_acct_start_inuse($agi,1); for ($i=0;$i< $A2B->agiconfig['number_try'] ;$i++){ $RateEngine->Reinit(); $A2B-> Reinit(); // RETRIEVE THE CHANNEL STATUS AND LOG : STATUS - CREIT - MIN_CREDIT_2CALL $stat_channel = $agi->channel_status($A2B-> channel); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[CHANNEL STATUS : '.$stat_channel["result"].' = '.$stat_channel["data"].']'); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[CREDIT : ".$A2B-> credit."][CREDIT MIN_CREDIT_2CALL : ".$A2B->agiconfig['min_credit_2call']."]"); // CHECK IF THE CHANNEL IS UP //if ($stat_channel["status"]!= "6" && $stat_channel["status"]!= "1"){ if (($A2B->agiconfig['answer_call']==1) && ($stat_channel["result"]!=$status_channel) && ($A2B -> CC_TESTING!=1)){ if ($A2B->set_inuse==1) $A2B->callingcard_acct_start_inuse($agi,0); $A2B -> write_log("[STOP - EXIT]", 0); exit(); } // CREATE A DIFFERENT UNIQUEID FOR EACH TRY if ($i>0){ $A2B-> uniqueid=$A2B-> uniqueid+ 1000000000 ; } if( $A2B->credit < $A2B->agiconfig['min_credit_2call'] && $A2B -> typepaid==0 && $A2B->agiconfig['jump_voucher_if_min_credit']==1) { $A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT - Refill with vouchert]"); $vou_res = $A2B -> refill_card_with_voucher($agi,2); if ($vou_res==1){ $A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[ADDED CREDIT - refill_card_withvoucher Success] "); } else { $A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT - refill_card_withvoucher fail] "); } } if( $A2B->credit < $A2B->agiconfig['min_credit_2call'] && $A2B -> typepaid==0) { // SAY TO THE CALLER THAT IT DEOSNT HAVE ENOUGH CREDIT TO MAKE A CALL $prompt = "prepaid-no-enough-credit-stop"; $agi-> stream_file($prompt, '#'); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[STOP STREAM FILE $prompt]"); if (($A2B->agiconfig['notenoughcredit_cardnumber']==1) && (($i+1)< $A2B->agiconfig['number_try'])){ if ($A2B->set_inuse==1) $A2B->callingcard_acct_start_inuse($agi,0); $A2B->agiconfig['cid_enable']=0; $A2B->agiconfig['use_dnid']=0;// $A2B->agiconfig['say_balance_after_auth']=0; $A2B->agiconfig['cid_auto_assign_card_to_cid']=0; $A2B->accountcode=''; $A2B->username=''; $A2B-> ask_other_cardnumber = 1; $cia_res = $A2B -> callingcard_ivr_authenticate($agi); $A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT_CARDNUMBER - TRY : callingcard_ivr_authenticate]"); if ($cia_res!=0) break; $A2B -> debug( WRITELOG, $agi, __FILE__, __LINE__, "[NOTENOUGHCREDIT_CARDNUMBER - callingcard_acct_start_inuse]"); $A2B->callingcard_acct_start_inuse($agi,1); continue; }else{ $send_reminder = 1; $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[SET MAIL REMINDER - NOT ENOUGH CREDIT]"); break; } } if ($agi->request['agi_extension']=='s'){ $A2B->dnid = $agi->request['agi_dnid']; }else{ $A2B->dnid = $agi->request['agi_extension']; } if ($A2B->agiconfig['ivr_voucher']==1){ $res_dtmf = $agi->get_data('prepaid-refill_card_with_voucher', 5000, 1); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "RES REFILL CARD VOUCHER DTMF : ".$res_dtmf ["result"]); $A2B-> ivr_voucher = $res_dtmf ["result"]; if ((isset($A2B-> ivr_voucher)) && ($A2B-> ivr_voucher == $A2B->agiconfig['ivr_voucher_prefixe'])) { $vou_res = $A2B->refill_card_with_voucher($agi, $i); // if ($vou_res==1)$A2B->fct_say_balance ($agi, $A2B->add_credit, 1); } } if ($A2B->agiconfig['sip_iax_friends']==1){ if ($A2B->agiconfig['sip_iax_pstn_direct_call']==1){ if ($A2B->agiconfig['use_dnid']==1 && !in_array ($A2B->dnid, $A2B->agiconfig['no_auth_dnid']) && strlen($A2B->dnid)>2 && $i==0 ){ $A2B -> destination = $A2B->dnid; }else{ $prompt_enter_dest = $A2B->agiconfig['file_conf_enter_destination']; $res_dtmf = $agi->get_data($prompt_enter_dest, 4000, 20); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "RES sip_iax_pstndirect_call DTMF : ".$res_dtmf ["result"]); $A2B-> destination = $res_dtmf ["result"]; } if ( (strlen($A2B-> destination)>0) && (strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix'])>0) && (strncmp($A2B->agiconfig['sip_iax_pstn_direct_call_prefix'], $A2B-> destination,strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix']))==0) ){ $A2B-> dnid = $A2B-> destination; $A2B-> sip_iax_buddy = $A2B->agiconfig['sip_iax_pstn_direct_call_prefix']; $A2B-> agiconfig['use_dnid'] = 1; $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "SIP 1. IAX - dnid : ".$A2B->dnid." - ".strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix'])); $A2B->dnid = substr($A2B->dnid,strlen($A2B->agiconfig['sip_iax_pstn_direct_call_prefix'])); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "SIP 2. IAX - dnid : ".$A2B->dnid); }elseif (strlen($A2B->destination)>0){ $A2B->dnid = $A2B->destination; $A2B->agiconfig['use_dnid'] = 1; $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "TRUNK - dnid : ".$A2B->dnid." (".$A2B->agiconfig['use_dnid'].")"); } }else{ //$res_dtmf = $agi->agi_exec("GET DATA prepaid-sipiax-press9 2000 1"); $res_dtmf = $agi->get_data('prepaid-sipiax-press9', 2000, 1); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "RES SIP_IAX_FRIEND DTMF : ".$res_dtmf ["result"]); $A2B-> sip_iax_buddy = $res_dtmf ["result"]; } } if ( isset($A2B-> sip_iax_buddy) && ($A2B-> sip_iax_buddy == $A2B->agiconfig['sip_iax_pstn_direct_call_prefix'])) { $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, 'CALL SIP_IAX_BUDDY'); $cia_res = $A2B-> call_sip_iax_buddy($agi, $RateEngine,$i); }else{ if ($A2B-> callingcard_ivr_authorize($agi, $RateEngine, $i,$sort_dial_dst_pstn)==1){ // PERFORM THE CALL if ($sort_dial_dst_pstn) { $A2B -> destination = $sort_dial_dst_pstn; }else{ $A2B -> destination = $A2B->dnid; } $result_callperf = $RateEngine->rate_engine_performcall ($agi, $A2B-> destination, $A2B); if (!$result_callperf) { $prompt="prepaid-dest-unreachable"; //$agi->agi_exec("STREAM FILE $prompt #"); $agi-> stream_file($prompt, '#'); } // INSERT CDR & UPDATE SYSTEM $RateEngine->rate_engine_updatesystem($A2B, $agi, $A2B-> destination); if ($A2B->agiconfig['say_balance_after_call']==1){ $A2B-> fct_say_balance ($agi, $A2B-> credit); } $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[a2billing account stop]'); } } $A2B->agiconfig['use_dnid']=0; }//END FOR }else{ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[AUTHENTICATION FAILED (cia_res:".$cia_res.")]"); } /**************** SAY GOODBYE ***************/ if ($A2B->agiconfig['say_goodbye']==1) $agi-> stream_file('prepaid-final', '#');// MODE DID}elseif ($mode == 'did'){ $A2B->agiconfig['debug']=0; if ($A2B->agiconfig['answer_call']==1){ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[ANSWER CALL]'); $agi->answer(); }else{ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[NO ANSWER CALL]'); } // TODO // CRONT TO CHARGE MONTLY $RateEngine -> Reinit(); $A2B -> Reinit(); $mydnid = $agi->request['agi_extension']; if ($A2B -> CC_TESTING) $mydnid = '11111111'; if (strlen($mydnid) > 0){ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, "[DID CALL - [CallerID=".$A2B->CallerID."]:[DID=".$mydnid."]"); $QUERY = "SELECT cc_did.id, cc_did_destination.id, billingtype, tariff, destination, voip_call, username,cc_card.id". " FROM cc_did, cc_did_destination, cc_card ". " WHERE id_cc_did=cc_did.id and cc_card.id=id_cc_card and cc_did_destination.activated=1 and cc_did.activated=1 and did='$mydnid' ". " AND cc_did.startingdate<= CURRENT_TIMESTAMP AND (cc_did.expirationdate > CURRENT_TIMESTAMP OR cc_did.expirationdate IS NULL OR ". " cc_did.expirationdate = '0000-00-00 00:00:00') ORDER BY priority ASC"; $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $QUERY); $result = $A2B -> instance_table -> SQLExec ($A2B->DBHandle, $QUERY); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $result); if (is_array($result)){ foreach ($result as $result_list){ $user_id = $result_list[7]; break; } $QUERY = "SELECT welcome, ad, ad1 FROM cc_custom_sounds WHERE cc_card_id='$user_id'"; $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $QUERY); $ivr_result = $A2B -> instance_table -> SQLExec ($A2B->DBHandle, $QUERY); $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, $ivr_result); //$agi-> verbose($result); //$agi-> verbose($ivr_result); if ($ivr_result){ $agi->answer(); $A2B ->call_did_to_ivr($agi, $RateEngine, $A2B, $result, $ivr_result, $user_id); if ($A2B->set_inuse==1) $A2B -> callingcard_acct_start_inuse($agi,0); }else{ $A2B -> call_did($agi, $RateEngine, $result); if ($A2B->set_inuse==1) $A2B -> callingcard_acct_start_inuse($agi,0); } } } // MOVE VOUCHER TO LET CUSTOMER ONLY REFILL}elseif ($mode == 'voucher'){ $A2B->agiconfig['say_balance_after_auth']=1; if ($A2B->agiconfig['answer_call']==1){ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[ANSWER CALL]'); $agi->answer(); $status_channel=6; }else{ $A2B -> debug( VERBOSE | WRITELOG, $agi, __FILE__, __LINE__, '[NO ANSWER CALL]'); $status_channel=4; } $A2B -> play_menulanguage ($agi); /************************* PLAY INTRO MESSAGE ************************/ if (strlen($A2B->agiconfig['intro_prompt'])>0) $agi-> stream_file($A2B->agiconfig['intro_prompt'], '#'); $cia_res = $A2B -> callingcard_ivr_authenticate($agi);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -