Esempio n. 1
0
$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)
Esempio n. 2
0
//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);