$cdr = new AGI_CDR($agi); // CDR: Set call type $cdr->set_type('IN'); // CDR: Set caller name and number $cid = $agi->parse_callerid(); $agi->verbose($cid); $caller_ext = $cid['username']; $caller_name = $agi->request['agi_calleridname']; $cdr->set_caller('', '', $caller_name, $caller_ext); if ($agi->request['agi_type'] == 'SIP') { preg_match('/^sip_provider_(\\d+)/', $agi->request['agi_context'], $matches); $PK_SipProvider = $matches[1]; $query = "SELECT Name FROM SipProviders WHERE PK_SipProvider={$PK_SipProvider} LIMIT 1"; $result = $mysqli->query($query) or $agi->verbose($mysqli->error . $query); $prov = $result->fetch_assoc(); $cdr->push_event("INPROVIDER", "SIP,{$prov['Name']}"); } elseif ($agi->request['agi_type'] == 'IAX2') { preg_match('/^iax_provider_(\\d+)/', $agi->request['agi_context'], $matches); $PK_IaxProvider = $matches[1]; $query = "SELECT Name FROM IaxProviders WHERE PK_IaxProvider={$PK_IaxProvider} LIMIT 1"; $result = $mysqli->query($query) or $agi->verbose($mysqli->error . $query); $prov = $result->fetch_assoc(); $cdr->push_event("INPROVIDER", "IAX,{$prov['Name']}"); } /* Try to match a Incoming Call Rule */ run_incoming_call_rules($agi); /* Try to call the Callback Extension of the Provider */ run_callback_extension($agi); /* Call the Operator */ $agi->exec_goto('internal', '301', 1); function run_incoming_call_rules($agi)
//CDR : Flush existing entry if both called and caller are known if ($cdr->caller_known() && $cdr->called_known()) { $cdr->flush_cdr(); } // Get Called Extension informations $called_ext = $agi->request['agi_extension']; // Get Caller Extension infomation $cid = $agi->parse_callerid(); $caller_ext = $cid['username']; $Extension_S = DB_Extension($caller_ext); //CDR: Set caller information $cdr->set_caller($Extension_S['PK_Extension'], $Extension_S['Type'], DB_Extension_Name($caller_ext), $caller_ext); //CDR: Set called information $cdr->set_called(0, '', '', $called_ext); // CDR: Push dial event $cdr->push_event("DIAL", $called_ext); // See if we can match any outgoing rule $query = "SELECT * FROM OutgoingRules ORDER BY RuleOrder"; $result = $mysqli->query($query) or $agi->verbose($mysqli->error . $query); while ($rule = $result->fetch_assoc()) { // Check if rule matches $regex = "/^{$rule['BeginWith']}[0-9]{{$rule['RestBetweenLow']},{$rule['RestBetweenHigh']}}\$/"; if (!preg_match($regex, $called_ext)) { continue; } // Create new_number $new_number = substr($called_ext, $rule['TrimFront']); $new_number = $new_number . $rule['PrependDigits']; break; } // Exit if no rule was matched
require dirname(__FILE__) . '/../include/db_utils.inc.php'; require dirname(__FILE__) . '/common/AGI_Logger.class.php'; require dirname(__FILE__) . '/common/AGI_CDR.class.php'; require dirname(__FILE__) . '/common/AGI_Utils.php'; $agi = new AGI(); $logger = new AGI_Logger($agi); $cdr = new AGI_CDR($agi); // Get Called Extension informations $called_ext = $agi->request['agi_extension']; $Extension_D = DB_Extension($called_ext); // Get Called SipPhone information $SipPhone = Database_Entry('Ext_SipPhones', $Extension_D['PK_Extension']); //CDR: Set called info $cdr->set_called("{$SipPhone['PK_Extension']}", "SipPhone", "{$SipPhone['FirstName']} {$SipPhone['LastName']}", "{$Extension_D['Extension']}"); //CDR: Push RING event $cdr->push_event('RING', "{$SipPhone['FirstName']} {$SipPhone['LastName']},{$Extension_D['Extension']}"); // Perform the Dial $agi->exec('Dial', array("SIP/{$Extension_D['Extension']}", 10, 'tT')); //CDR: Push DIALSTATUS $resp = $agi->get_variable('DIALSTATUS'); $DIALSTATUS = $resp['data']; $resp = $agi->get_variable('HANGUPCAUSE'); $HANGUPCAUSE = $resp['data']; if ($DIALSTATUS != "") { $cdr->push_event('DIALSTATUS', "{$DIALSTATUS},{$HANGUPCAUSE}"); } if ($DIALSTATUS != 'ANSWER') { // Exit if voicemail is not defined for this extension $query = "SELECT * FROM Ext_SipPhones_Features WHERE FK_Extension = {$SipPhone['PK_Extension']} AND FK_Feature=1 LIMIT 1"; $agi->verbose($query); $result = $mysqli->query($query) or $agi->verbose($mysqli->error);