globais = $globais; $this->injection = $injection; } public function agiRunCmd($command) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog($command); $return = ''; if ($this->globais['isXampp']) { $return = '200 result=1 (isXampp)'; } else { $return = $this->injection['agiRunCmd']($command); } $this->agiLog($return); return $return; } public function agiLog($texto) { return $this->injection['agiLog']($texto); } // -------------------------------------------------------------------------------------------------------------------------------- public function logStart() { if ($this->globais['logEnabled']) { $texto = date("Y-m-d H:i:s") . "
"; $target = $this->globais['appdir'] . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'log.html'; $fp = fopen($target, 'w'); fwrite($fp, $texto); fclose($fp); } } public function logAdd($texto) { if ($this->globais['logEnabled']) { $target = $this->globais['appdir'] . DIRECTORY_SEPARATOR . 'log' . DIRECTORY_SEPARATOR . 'log.html'; $fp = fopen($target, 'a'); fwrite($fp, $texto); fclose($fp); } } // -------------------------------------------------------------------------------------------------------------------------------- public function fgGet() { $this->globais['fgItens'] = array(); $this->globais['fgItemStart'] = array(); if (!is_null($this->globais['fgId'])) { if ($this->globais['isXampp']) { $target = $this->globais['appdir'] . DIRECTORY_SEPARATOR . 'dial' . DIRECTORY_SEPARATOR . $this->globais['fgId'] . '.json'; } else if (!is_null($this->globais['hostip'])) { // http://177.107.205.248/fluxograma/data-json/8999.json $target = 'http://' . $this->globais['hostip'] . '/fluxograma/data-json/' . $this->globais['fgId'] . '.json'; } else if (file_exists('/etc/asterisk')) { $target = '/var/www/html/fluxograma/data-json/' . $this->globais['fgId'] . '.json'; } $itens = file_get_contents($target); if ($itens !== false) { $itens = json_decode($itens, true); foreach ($itens as $item) { $this->globais['fgItens'][$item['id']] = $item; if ($item['cmd'] == 'start') { $this->globais['fgItemStart'] = $item; } } unset($itens); } } } // -------------------------------------------------------------------------------------------------------------------------------- public function agiAddCallback($args = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($args, true)); // https://www.voip-info.org/asterisk-auto-dial-out/ $args['ramal'] = isset($args['ramal']) ? $args['ramal'] : ''; $args['numero'] = isset($args['numero']) ? $args['numero'] : ''; //$calldata = "Channel: PJSIP/" . $args['ramal'] . "\n"; //$calldata.= "Context: padrao\n"; //$calldata.= "Extension: " . $args['numero'] . "\n"; $calldata = "Channel: Local/" . $args['ramal'] . "@padrao" . "\n"; $calldata .= "Context: padrao\n"; $calldata .= "Extension: 0" . $args['numero'] . "\n"; // MaxRetries // RetryTime // WaitTime $filename = time() . '-' . rand(100, 999) . '.call'; /* if (file_exists('/var/www/html/hitmanager/dial/')) { $target = '/var/www/html/hitmanager/dial/' . $filename; file_put_contents($target, $calldata); $time = time() + 30; touch($target, $time); } if (file_exists('/var/spool/asterisk/outgoing/')) { $target2 = '/var/spool/asterisk/outgoing/' . $filename; rename($target, $target2); } */ /* $target = $this->globais['appdir'] . DIRECTORY_SEPARATOR . 'outgoing' . DIRECTORY_SEPARATOR . $filename; file_put_contents($target, $calldata); $time = time() + 30; touch($target, $time); */ $argssend = array(); // $argssend['filedir'] = '/var/spool/asterisk/outgoing'; $argssend['filedir'] = '/var/www/html/apagar'; $argssend['filename'] = $filename; $argssend['filebase64'] = base64_encode($calldata); $arquivoremoto = new ArquivoRemoto(); $arquivoremoto->ip = $this->globais['hostip']; $this->agiLog(print_r($arquivoremoto, true)); $response = $arquivoremoto->salvar($argssend); $this->agiLog(print_r($response, true)); } public function agiRecordFilaIfAuditoria($args = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($args, true)); $return = ''; $args['idqueue'] = isset($args['idqueue']) ? $args['idqueue'] : ''; $gravar = $this->hitpbxCheckAuditoria(array('idqueue' => $args['idqueue'])); if ($gravar) { $response = $this->agiRunRecord(array('tipo' => 'auditoria_fila', 'idqueue' => $args['idqueue'])); } return $return; } public function agiRecordRamaisIfAuditoria($args = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($args, true)); $return = ''; $args['ramal'] = isset($args['ramal']) ? $args['ramal'] : ''; $args['ramais'] = isset($args['ramais']) ? $args['ramais'] : array(); if ($args['ramal'] != '') { $args['ramais'][] = $args['ramal']; } foreach ($args['ramais'] as $ramal) { $gravar = $this->hitpbxCheckAuditoria(array('ramal' => $ramal)); if ($gravar) { //$response = agiRunCmd('EXEC NOOP SIM'.$ramal); $response = $this->agiRunRecord(array('tipo' => 'auditoria_ramal', 'ramal' => $ramal)); } else { //$response = agiRunCmd('EXEC NOOP NAO'.$ramal); } } return $return; } public function agiRunDialNumeroExterno($numero = '') { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog($numero); $return = ''; //$cmd = 'EXEC Dial SIP/SER2105/'.$numero.',30,Tt ""'; $cmd = 'EXEC Dial Local/' . $numero . '@checksaida,30,Tt ""'; $response = $this->agiRunCmd($cmd); $cmd = 'GET VARIABLE DIALSTATUS'; $response = $this->agiRunCmd($cmd); $explodido = explode("(", $response); if (count($explodido) > 1) { $return = substr($explodido[1], 0, -1); if ($return != 'ANSWER') { $cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""'; $response = $this->agiRunCmd($cmd); } } return $return; } public function agiRunDialRamal($ramal = '') { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog($ramal); $return = ''; $runNext = true; $desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'ramal', 'value' => $ramal)); if (count($desvio)) { $runNext = false; if ($desvio['shortname'] == 'numeroexterno') { $return = $this->agiRunDialNumeroExterno($desvio['numero']); } if ($desvio['shortname'] == 'queue') { $queuestatus = $this->agiRunQueue(array('id' => $desvio['queue'])); if ($queuestatus == '') { $return = 'ANSWER'; } } if ($desvio['shortname'] == 'ramal') { $return = $this->agiRunDialRamal($desvio['ramal']); } if ($desvio['shortname'] == 'voicemail') { $this->agiRunVoicemail($desvio['ramal']); $return = 'ANSWER'; } if ($desvio['shortname'] == 'numeroexterno') { $this->agiRunDialNumeroExterno($desvio['numero']); } } if ($runNext) { $ramais_vai_tocar = array(); $cmd = 'EXEC Dial '; $ramais_secretaria = $this->hitpbxGetRamaisSecretariaFromRamal($ramal); if (count($ramais_secretaria)) { foreach ($ramais_secretaria as $ramal) { $response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(' . $ramal . ')}'); $contacts = str_replace('200 result=1 (', '', $response); $contacts = substr($contacts, 0, -1); $ramais_vai_tocar[] = $ramal; if ($cmd != 'EXEC Dial ') { $cmd .= '&'; } //$cmd.= 'PJSIP/'.$ramal; //$cmd.= '${PJSIP_DIAL_CONTACTS('.$ramal.')}'; $cmd .= $contacts; $response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(SIP' . $ramal . ')}'); $contacts2 = str_replace('200 result=1 (', '', $response); $contacts2 = substr($contacts2, 0, -1); $cmd .= '&' . $contacts2; } $cmd .= ',30,Tt ""'; } else { $response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(' . $ramal . ')}'); $contacts = str_replace('200 result=1 (', '', $response); $contacts = substr($contacts, 0, -1); $ramais_vai_tocar[] = $ramal; //$cmd.= 'PJSIP/' . $ramal; //$cmd.= '${PJSIP_DIAL_CONTACTS('.$ramal.')}'; $cmd .= $contacts; $response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(SIP' . $ramal . ')}'); $contacts2 = str_replace('200 result=1 (', '', $response); $contacts2 = substr($contacts2, 0, -1); $cmd .= '&' . $contacts2; $ring_timeout = $this->hitpbxGetRingTimeoutFromRamal($ramal); if (empty($ring_timeout)) { $cmd .= ',30,Tt ""'; } else { $cmd .= ',' . $ring_timeout . ',Tt ""'; } } /* $uniqueid = agiVarGet('UNIQUEID'); $argssend = array(); $argssend["companyId"] = "1"; $argssend["crmPhone"] = $GLOBALS['callerid']; $argssend["operation"] = "inboundAnsweredCall"; $argssend["crmAgent"] = $ramal; $argssend["srcPhone"] = $GLOBALS['callerid']; $argssend["dstPhone"] = $ramal; $argssend["operationStatus"] = "update-answer"; $argssend["uniqueid"] = $uniqueid; crmSend($argssend); */ // ... $response = $this->agiRecordRamaisIfAuditoria(array('ramais' => $ramais_vai_tocar)); $response = $this->agiRunCmd($cmd); // ... //$argssend["operationStatus"] = "hangup"; //crmSend($argssend); $cmd = 'GET VARIABLE DIALSTATUS'; $response = $this->agiRunCmd($cmd); $explodido = explode("(", $response); if (count($explodido) > 1) { $return = substr($explodido[1], 0, -1); if ($return != 'ANSWER') { $cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""'; $response = $this->agiRunCmd($cmd); $callback = $this->hitpbxGetCallbackFromRamal($ramal); if ($callback == '1') { $callerid = $this->agiVarGet('CALLERID'); $arr = array( 'ramal' => $ramal, 'numero' => $callerid ); $this->agiAddCallback($arr); } } } } return $return; } public function agiRunDialRamalGrupo($callgroup = '') { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog($callgroup); $return = ''; $runNext = true; $desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'ramalgrupo', 'value' => $callgroup)); if (count($desvio)) { $runNext = false; if ($desvio['shortname'] == 'queue') { $queuestatus = $this->agiRunQueue(array('id' => $desvio['queue'])); if ($queuestatus == '') { $return = 'ANSWER'; } } if ($desvio['shortname'] == 'ramal') { $return = $this->agiRunDialRamal($desvio['ramal']); } if ($desvio['shortname'] == 'ramalgrupo') { $return = $this->agiRunDialRamalGrupo($desvio['callgroup']); } if ($desvio['shortname'] == 'voicemail') { $this->agiRunVoicemail($desvio['ramal']); $return = 'ANSWER'; } if ($desvio['shortname'] == 'numeroexterno') { $this->agiRunDialNumeroExterno($desvio['numero']); } } if ($runNext) { $ramais_vai_tocar = array(); $cmd = 'EXEC Dial '; $query = "SELECT ramal FROM tab_ramal WHERE callgroup = '" . mysqli_real_escape_string($this->globais['db'], $callgroup) . "'"; $query_result = mysqli_query($this->globais['db'], $query) or die(mysqli_error($this->globais['db'])); while ($resultLinha = mysqli_fetch_assoc($query_result)) { if ($cmd != 'EXEC Dial ') { $cmd .= '&'; } $cmd .= 'PJSIP/' . $resultLinha['ramal']; $ramais_vai_tocar[] = $resultLinha['ramal']; } $cmd .= ' ""'; $response = $this->agiRecordRamaisIfAuditoria(array('ramais' => $ramais_vai_tocar)); $response = $this->agiRunCmd($cmd); $cmd = 'GET VARIABLE DIALSTATUS'; $response = $this->agiRunCmd($cmd); $explodido = explode("(", $response); if (count($explodido) > 1) { $return = substr($explodido[1], 0, -1); if ($return != 'ANSWER') { $cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""'; $response = $this->agiRunCmd($cmd); } } } return $return; } public function agiRunQueue($args = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($args, true)); $return = ''; $args['id'] = isset($args['id']) ? $args['id'] : ''; $args['timeout'] = isset($args['timeout']) ? $args['timeout'] : ''; $runNext = true; $cmd = 'SET VARIABLE __AGIQUEUEID "Q' . $args['id'] . '"'; $response = $this->agiRunCmd($cmd); $queuenome = $this->hitpbxGetQueuenomeFromId($args['id']); $cmd = 'SET VARIABLE __AGIQUEUENOME "' . $queuenome . '"'; $response = $this->agiRunCmd($cmd); // teste // $cmd = 'GET FULL VARIABLE ${QUEUE_WAITING_COUNT(' . $args['id'] . ')}'; // $cmd = 'GET FULL VARIABLE ${QUEUE_MEMBER(' . $args['id'] . ',ready)}'; // $response = agiRunCmd($cmd); // $cmd = 'SET VARIABLE AGICALLBACKQUEUEID 32'; // $response = agiRunCmd($cmd); // ... // MONITOR_FILENAME=FILA_${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}_${UNIQUEID}_${CALLERID(num)}_${EXTEN} // $cmd = "SET VARIABLE MONITOR_FILENAME FILA_" . date("Y-m-d_H-i-s") . "_" . $GLOBALS['uniqueid'] . "_" . $GLOBALS['callerid'] . "_" . $GLOBALS['fgId']; $cmd = "SET VARIABLE MONITOR_FILENAME QUEUE_" . date("Y-m-d") . "_" . date("H-i-s") . "_" . $this->globais['uniqueid'] . "_" . $this->globais['callerid'] . "_" . $this->globais['fgId']; $response = $this->agiRunCmd($cmd); // $cmd = "SET VARIABLE GLOBAL(AGIRECORDNAME) QUEUE_" . date("Y-m-d") . "_" . date("H-i-s") . "_" . $GLOBALS['uniqueid'] . "_" . $GLOBALS['callerid'] . "_" . $GLOBALS['fgId']; $cmd = "SET VARIABLE __AGIRECORDNAME QUEUE_" . date("Y-m-d") . "_" . date("H-i-s") . "_" . $this->globais['uniqueid'] . "_" . $this->globais['callerid'] . "_" . $this->globais['fgId']; $response = $this->agiRunCmd($cmd); $desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'queue', 'value' => $args['id'])); if ($this->globais['isXampp']) { $rnd = rand(1, 100); if ($rnd >= 80) { $desvio = array(); } else if ($rnd >= 60) { $desvio = array('shortname' => 'queue', 'queue' => '3'); } else if ($rnd >= 40) { $desvio = array('shortname' => 'ramal', 'ramal' => '1001'); } else if ($rnd >= 20) { $desvio = array('shortname' => 'voicemail', 'ramal' => '1001'); } else { $desvio = array('shortname' => 'numeroexterno', 'numero' => '551138118400'); } } if (count($desvio)) { // logAdd("desvio: ".json_encode($desvio)."
"); $runNext = false; if ($desvio['shortname'] == 'queue') { $return = $this->agiRunQueue(array('id' => $desvio['queue'])); } if ($desvio['shortname'] == 'ramal') { $response = $this->agiRunDialRamal($desvio['ramal']); if ($response == 'ANSWER') { $return = ''; } } if ($desvio['shortname'] == 'voicemail') { $this->agiRunVoicemail($desvio['ramal']); $return = ''; } if ($desvio['shortname'] == 'numeroexterno') { $this->agiRunDialNumeroExterno($desvio['numero']); } } if ($runNext) { // $response = agiRunCmd('SET VARIABLE GLOBAL(AGIIVRSTOP) NAO'); $response = $this->agiRunCmd('SET VARIABLE __AGIIVRSTOP NAO'); if (empty($args['timeout'])) { $cmd = 'EXEC Queue Q' . $args['id'] . ',ctT'; } else { $cmd = 'EXEC Queue Q' . $args['id'] . ',ctT,,,' . $args['timeout']; } $response = $this->agiRecordFilaIfAuditoria(array('idqueue' => $args['id'])); $response = $this->agiRunCmd($cmd); $cmd = 'GET VARIABLE QUEUESTATUS'; $response = $this->agiRunCmd($cmd); // $this->logAdd('GET VARIABLE QUEUESTATUS: ' . $response . '
'); if ($this->globais['isXampp']) { $rnd = rand(1, 100); if ($rnd >= 50) { $response = 'TIMEOUT'; } else { $response = ''; } } // logAdd("QUEUESTATUS: ".$response); if (strpos($response, 'TIMEOUT')) { $return = 'timeout'; } // ... // $agiivrstop = agiVarGet("GLOBAL(AGIIVRSTOP)"); $agiivrstop = $this->agiVarGet("AGIIVRSTOP"); $agiivrstop = str_replace('"', '', $agiivrstop); // logAdd('AGIIVRSTOP: '.$agiivrstop.'
'); if ($agiivrstop == 'SIM') { // logAdd('FOI SIM
'); $return = 'stopivr'; } // ... } return $return; } public function agiRunRecord($args = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($args, true)); /* Layout dos arquivos: TIPO_DATA_HORA_UNIQUEID_CALLERID_ORIGEM_DESTINO Exemplo ramal: AUDITORIA-RAMAL_2023-11-29_10-33-55_1701264825.168_2004_2005.wav Exemplo fial de atendimento (o destino é o id da tab_queue) AUDITORIA-QUEUE_2023-11-29_10-54-36_1701266065.175_2004_14.wav */ $return = ''; $args['tipo'] = isset($args['tipo']) ? $args['tipo'] : ''; if ($args['tipo'] == 'auditoria_fila') { $args['idqueue'] = isset($args['idqueue']) ? $args['idqueue'] : ''; if (is_numeric($args['idqueue'])) { $uniqueid = $this->agiVarGet('UNIQUEID'); $callerid = $this->agiVarGet('CALLERID'); //$cmd = 'EXEC MixMonitor AUDITORIA-QUEUE_'.date("Y-m-d").'_'.date("H-i-s").'_'.$uniqueid.'_'.$callerid.'_'.$args['idqueue'].'.wav'; $cmd = 'EXEC MixMonitor AUDITORIA-QUEUE_' . date("Y-m-d") . '_' . date("H-i-s") . '_' . $uniqueid . '_' . $callerid . '_' . $args['idqueue'] . '.ogg'; $response = $this->agiRunCmd($cmd); } } if ($args['tipo'] == 'auditoria_ramal') { $args['ramal'] = isset($args['ramal']) ? $args['ramal'] : ''; if (is_numeric($args['ramal'])) { $uniqueid = $this->agiVarGet('UNIQUEID'); $callerid = $this->agiVarGet('CALLERID'); //$cmd = 'EXEC MixMonitor AUDITORIA-RAMAL_'.date("Y-m-d").'_'.date("H-i-s").'_'.$uniqueid.'_'.$callerid.'_'.$args['ramal'].'.wav'; $cmd = 'EXEC MixMonitor AUDITORIA-RAMAL_' . date("Y-m-d") . '_' . date("H-i-s") . '_' . $uniqueid . '_' . $callerid . '_' . $args['ramal'] . '.ogg'; $response = $this->agiRunCmd($cmd); } } return $return; } public function agiRunVoicemail($ramal = '') { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog($ramal); $return = $this->agiRunCmd('EXEC VOICEMAIL ' . $ramal); return $return; } public function agiVarGet($varName = '') { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog($varName); $return = ''; if ($this->globais['isXampp']) { $return = ''; } else { //$cmd = 'GET VARIABLE UNIQUEID'; // 200 result=1 (1695911399.249) //$cmd = 'GET VARIABLE CALLERID(all)'; // 200 result=1 ("" <2001>) //$cmd = 'GET VARIABLE EXTEN'; // 200 result=1 (2501) $cmd = ''; if ($varName == 'CALLERID') { $cmd = 'GET VARIABLE CALLERID(all)'; } else { $cmd = 'GET VARIABLE ' . $varName; } $response = $this->agiRunCmd($cmd); if ($varName == 'CALLERID') { if (substr($response, 0, 14) == '200 result=1 (') { $explodido = explode('<', $response); // $return = str_replace('>)', '', trim($explodido[1])); $return = substr(trim($explodido[1]), 0, -2); } } else { $explodido = explode("(", $response); if (count($explodido) > 1) { $explodido = explode(")", $explodido[1]); $return = $explodido[0]; } } } return $return; } public function agiVarSet($varName = '', $varValue = '') { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog($varName); // $this->agiLog($varValue); if ($this->globais['isXampp']) { return ''; } else { if ($varName == 'CALLERID') { $varName = 'CALLERID(num)'; } $return = $this->agiRunCmd('SET VARIABLE ' . $varName . ' ' . $varValue); return $return; } } // -------------------------------------------------------------------------------------------------------------------------------- public function fgItemGetChildrenFrom($fgItemFrom = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($fgItemFrom, true)); $return = array(); reset($this->globais['fgItens']); foreach ($this->globais['fgItens'] as $fgItem) { if ($fgItem['cmd'] != 'start') { if ($fgItem['idmaster'] == $fgItemFrom['id']) { $return[$fgItem['id']] = $fgItem; } } } return $return; } public function fgItemGetMasterFrom($fgItemFrom = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($fgItemFrom, true)); $return = array(); if (isset($this->globais['fgItens'][$fgItemFrom['idmaster']])) { $return = $this->globais['fgItens'][$fgItemFrom['idmaster']]; } return $return; } public function fgItemIsDialplanCheckvar($fgItem = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($fgItem, true)); if (isset($fgItem['defaultvalues']['cmd'])) { if ($fgItem['defaultvalues']['cmd'] == 'dialplan.checkvar') { return true; } } if ($fgItem['cmd'] == 'dialplan.checkvar') { return true; } return false; } public function fgItemRun($fgItem = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRun
"); $this->logAdd("
" . print_r($fgItem, true) . "

"); // teste arquivoremoto // $content = file_get_contents('/var/www/html/hitmanager/agi-debug.html'); // $argssend = array(); // $argssend['filedir'] = '/var/www/html/apagar'; // $argssend['filename'] = 'teste.html'; // $argssend['filebase64'] = base64_encode($content); // $arquivo_removo = new ArquivoRemoto(); // $response = $arquivo_removo->salvar($argssend); // ... if (count($fgItem) > 0) { if ($fgItem['cmd'] == 'agi.exec') { $this->fgItemRunAgiExec($fgItem); return; } if ($fgItem['cmd'] == 'blacklist.check') { $this->fgItemRunBlacklistCheck($fgItem); return; } if ($fgItem['cmd'] == 'blacklist.true') { $this->fgItemRunBlacklistTrue($fgItem); return; } if ($fgItem['cmd'] == 'blacklist.false') { $this->fgItemRunBlacklistFalse($fgItem); return; } if ($fgItem['cmd'] == 'callerid.change') { $this->fgItemRunCalleridChange($fgItem); return; } if ($fgItem['cmd'] == 'cnpj.check') { $this->fgItemRunCNPJCheck($fgItem); return; } if ($fgItem['cmd'] == 'cnpj.true') { $this->fgItemRunCNPJCheckTrue($fgItem); return; } if ($fgItem['cmd'] == 'cnpj.false') { $this->fgItemRunCNPJCheckFalse($fgItem); return; } if ($fgItem['cmd'] == 'condtempo.check') { $this->fgItemRunCondTempoCheck($fgItem); return; } if ($fgItem['cmd'] == 'condtempo.true') { $this->fgItemRunCondTempoCheckTrue($fgItem); return; } if ($fgItem['cmd'] == 'condtempo.false') { $this->fgItemRunCondTempoCheckFalse($fgItem); return; } if ($fgItem['cmd'] == 'cpf.check') { $this->fgItemRunCPFCheck($fgItem); return; } if ($fgItem['cmd'] == 'cpf.true') { $this->fgItemRunCPFCheckTrue($fgItem); return; } if ($fgItem['cmd'] == 'cpf.false') { $this->fgItemRunCPFCheckFalse($fgItem); return; } if ($fgItem['cmd'] == 'dialextension') { $this->fgItemRunDialExtension($fgItem); return; } if ($fgItem['cmd'] == 'dialgroupextension') { $this->fgItemRunDialGroupExtension($fgItem); return; } if ($fgItem['cmd'] == 'dialplan.checkvar') { $this->fgItemRunDialplanCheckvar($fgItem); return; } if ($fgItem['cmd'] == 'dialplan.gosub') { $this->fgItemRunDialplanGosub($fgItem); return; } if ($fgItem['cmd'] == 'dialplan.setvar') { $this->fgItemRunDialplanSetvar($fgItem); return; } if ($fgItem['cmd'] == 'dialdigit') { $this->fgItemRunDialdigit($fgItem); return; } if ($fgItem['cmd'] == 'digit') { $this->fgItemRunDigit($fgItem); return; } if ($fgItem['cmd'] == 'digitinvalid') { $this->fgItemRunDigitInvalid($fgItem); return; } if ($fgItem['cmd'] == 'expediente.check') { $this->fgItemRunExpedienteCheck($fgItem); return; } if ($fgItem['cmd'] == 'expediente.false') { $this->fgItemRunExpedienteFalse($fgItem); return; } if ($fgItem['cmd'] == 'expediente.true') { $this->fgItemRunExpedienteTrue($fgItem); return; } if ($fgItem['cmd'] == 'feriado.check') { $this->fgItemRunFeriadoCheck($fgItem); return; } if ($fgItem['cmd'] == 'feriado.false') { $this->fgItemRunFeriadoFalse($fgItem); return; } if ($fgItem['cmd'] == 'feriado.true') { $this->fgItemRunFeriadoTrue($fgItem); return; } if ($fgItem['cmd'] == 'ivr.redirect') { $this->fgItemRunIVRRedirect($fgItem); return; } if ($fgItem['cmd'] == 'nomatch') { $this->fgItemRunNoMatch($fgItem); return; } if ($fgItem['cmd'] == 'pesqsat') { $this->fgItemRunPesqSat($fgItem); return; } if ($fgItem['cmd'] == 'playaudio') { $this->fgItemRunPlayaudio($fgItem); return; } if ($fgItem['cmd'] == 'queue') { $this->fgItemRunQueue($fgItem); return; } if ($fgItem['cmd'] == 'queue.waitingcount') { $this->fgItemRunQueueWaitingCount($fgItem); return; } if ($fgItem['cmd'] == 'queue.waitingcount-greater') { $this->fgItemRunQueueWaitingCountGreater($fgItem); return; } if ($fgItem['cmd'] == 'queue.withcallback') { $this->fgItemRunQueueWithCallback($fgItem); return; } if ($fgItem['cmd'] == 'queue.withcallback-noready') { $this->fgItemRunQueueWithCallbackNoReady($fgItem); return; } if ($fgItem['cmd'] == 'record') { $this->fgItemRunRecord($fgItem); return; } if ($fgItem['cmd'] == 'start') { $this->fgItemRunStart($fgItem); return; } if ($fgItem['cmd'] == 'timeout') { $this->fgItemRunTimeout($fgItem); return; } if ($fgItem['cmd'] == 'timeoutwithlimit') { $this->fgItemRunTimeoutWithLimit($fgItem); return; } if ($fgItem['cmd'] == 'timeoutwithlimit.limit') { $this->fgItemRunTimeoutWithLimitLimit($fgItem); return; } if ($fgItem['cmd'] == 'voicemail') { $this->fgItemRunVoicemail($fgItem); return; } if ($fgItem['cmd'] == 'whitelist.check') { $this->fgItemRunWhitelistCheck($fgItem); return; } if ($fgItem['cmd'] == 'whitelist.false') { $this->fgItemRunWhitelistFalse($fgItem); return; } if ($fgItem['cmd'] == 'whitelist.true') { $this->fgItemRunWhitelistTrue($fgItem); return; } if (isset($fgItem['defaultvalues']['cmd'])) { if ($fgItem['defaultvalues']['cmd'] == 'dialplan.checkvar') { $this->fgItemRunDialplanCheckvar($fgItem); return; } if ($fgItem['defaultvalues']['cmd'] == 'dialplan.gosub') { $this->fgItemRunDialplanGosub($fgItem); return; } if ($fgItem['defaultvalues']['cmd'] == 'dialplan.setvar') { $this->fgItemRunDialplanSetvar($fgItem); return; } } } } public function fgItemRunAgiExec($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunAgiExec

"); $scriptname = isset($fgItem['defaultvalues']['scriptname']) ? $fgItem['defaultvalues']['scriptname'] : ''; $value = isset($fgItem['value']) ? $fgItem['value'] : ''; $value2 = isset($fgItem['value2']) ? $fgItem['value2'] : ''; $value3 = isset($fgItem['value3']) ? $fgItem['value3'] : ''; $defaultvalues_value = isset($fgItem['defaultvalues']['value']) ? $fgItem['defaultvalues']['value'] : ''; $defaultvalues_value2 = isset($fgItem['defaultvalues']['value2']) ? $fgItem['defaultvalues']['value2'] : ''; $defaultvalues_value3 = isset($fgItem['defaultvalues']['value3']) ? $fgItem['defaultvalues']['value3'] : ''; $cmd = 'EXEC AGI ' . $scriptname . ',"' . $value . '","' . $value2 . '","' . $value3 . '","' . $defaultvalues_value . '","' . $defaultvalues_value2 . '","' . $defaultvalues_value3 . '"'; $response = $this->agiRunCmd($cmd); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunBlacklistCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunBlacklistCheck

"); if ($this->globais['isXampp']) { $rnd = rand(1, 100); $esta_na_lista = ($rnd > 50) ? true : false; } else { $esta_na_lista = $this->hitpbxCheckBlacklist($this->globais['callerid']); } $run_next = true; $cmdTarget = $esta_na_lista ? 'blacklist.true' : 'blacklist.false'; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunBlacklistFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunBlacklistFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunBlacklistTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunBlacklistTrue

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCalleridChange($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd('
fgItemRunCalleridChange

'); $varname = 'CALLERID(num)'; if (isset($fgItem['value2'])) { if (trim($fgItem['value2']) != '') { $varname = 'CALLERID(' . $fgItem['value2'] . ')'; } } $varvalue = $fgItem['value']; $cmd = 'SET VARIABLE ' . $varname . ' ' . $varvalue; $response = $this->agiRunCmd($cmd); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCNPJCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd('
fgItemRunCNPJCheck

'); if ($this->globais['isXampp']) { $rnd = rand(1, 100); $validado = ($rnd > 50) ? true : false; } else { $validado = $this->validarCNPJ($this->globais['digitado']); } $run_next = true; $cmdTarget = $validado ? 'cnpj.true' : 'cnpj.false'; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunCNPJCheckFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunCNPJCheckFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCNPJCheckTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunCNPJCheckTrue

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCondTempoCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd('
fgItemRunCondTempoCheck

'); if ($this->globais['isXampp']) { $rnd = rand(1, 100); $periodo_match = ($rnd > 50) ? true : false; } else { $periodo_match = false; $periodo_id = isset($fgItem['value']) ? $fgItem['value'] : ''; $query = "SELECT * FROM tab_periodo "; $query .= "WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $periodo_id) . "' "; $weekday = date('D'); if ($weekday == 'Mon') { $query .= "AND (monday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Tue') { $query .= "AND (tuesday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Wed') { $query .= "AND (wednesday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Thu') { $query .= "AND (thursday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Fri') { $query .= "AND (friday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Sat') { $query .= "AND (saturday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Sun') { $query .= "AND (sunday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } $hhmmss = date("H:i:s"); $query .= "AND ((time_start <= '" . $hhmmss . "' AND time_stop >= '" . $hhmmss . "') OR (time_start = '00:00:00' AND time_stop = '00:00:00')) "; $day = date('d'); $query .= "AND ((day_start <= '" . $day . "' AND day_stop >= '" . $day . "') OR (day_start = '0' AND day_stop = '0')) "; $month = date('m'); $query .= "AND ((month_start <= '" . $month . "' AND month_stop >= '" . $month . "') OR (month_start = '0' AND month_stop = '0')) "; $year = date('Y'); $query .= "AND ((year_start <= '" . $year . "' AND year_stop >= '" . $year . "') OR (year_start = '0' AND year_stop = '0')) "; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $periodo_match = true; } } $run_next = true; $cmdTarget = $periodo_match ? 'condtempo.true' : 'condtempo.false'; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunCondTempoCheckFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunCondTempoCheckFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCondTempoCheckTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunCondTempoCheckTrue

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCPFCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd('
fgItemRunCPFCheck

'); if ($this->globais['isXampp']) { $rnd = rand(1, 100); $validado = ($rnd > 50) ? true : false; } else { $validado = $this->validarCPF($this->globais['digitado']); } $run_next = true; $cmdTarget = $validado ? 'cpf.true' : 'cpf.false'; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunCPFCheckFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunCPFCheckFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunCPFCheckTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunCPFCheckTrue

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunDialdigit($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDialdigit

"); $run_next = true; $tamanho = strlen($this->globais['digitado']); if (($tamanho != 3) && ($tamanho != 4)) { $this->fgItemRunNextFrom($fgItem); $run_next = false; } if ($run_next) { $queue = $this->hitpbxGetQueueFromNumeroExterno(array('numero_externo' => $this->globais['digitado'])); if (count($queue) > 0) { $response = $this->agiRunQueue(array('id' => $queue['id'])); $this->fgItemRunNextFrom($fgItem); $run_next = false; } } if ($run_next) { $dialcontacts = ''; $ramais_secretaria = $this->hitpbxGetRamaisSecretariaFromRamal($this->globais['digitado']); if (count($ramais_secretaria)) { foreach ($ramais_secretaria as $ramal) { $cmd = 'GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(' . $ramal . ')}'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $response = '200 result=1 (' . $ramal . ')'; } $contacts = str_replace('200 result=1 (', '', $response); $contacts = substr($contacts, 0, -1); if ($dialcontacts != '') { $dialcontacts .= '&'; } $dialcontacts .= $contacts; $cmd = 'GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(SIP' . $ramal . ')}'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $response = '200 result=1 (SIP' . $ramal . ')'; } $contacts = str_replace('200 result=1 (', '', $response); $contacts = substr($contacts, 0, -1); if ($dialcontacts != '') { $dialcontacts .= '&'; } $dialcontacts .= $contacts; } } else { $cmd = 'GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(' . $this->globais['digitado'] . ')}'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $response = '200 result=1 (' . $this->globais['digitado'] . ')'; } $contacts = str_replace('200 result=1 (', '', $response); $contacts = substr($contacts, 0, -1); if ($dialcontacts != '') { $dialcontacts .= '&'; } $dialcontacts .= $contacts; $cmd = 'GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(SIP' . $this->globais['digitado'] . ')}'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $response = '200 result=1 (SIP' . $this->globais['digitado'] . ')'; } $contacts = str_replace('200 result=1 (', '', $response); $contacts = substr($contacts, 0, -1); if ($dialcontacts != '') { $dialcontacts .= '&'; } $dialcontacts .= $contacts; } $cmd = 'EXEC Dial ' . $dialcontacts . ',30,TtU(update_call^' . $this->globais['callerid'] . '^' . $this->globais['digitado'] . '^' . $this->globais['uniqueid'] . ') ""'; $response = $this->agiRunCmd($cmd); $this->globais['numerodiscado'] = $dialcontacts; $cmd = 'GET VARIABLE DIALSTATUS'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $rnd = rand(1, 100); if ($rnd >= 50) { $response = '200 result=1 (ANSWER)'; } else { $response = '200 result=1 (NO ANSWER)'; } } $explodido = explode("(", $response); if (count($explodido) > 1) { $dialstatus = substr($explodido[1], 0, -1); } else { $dialstatus = ''; } $this->globais['dialstatus'] = $dialstatus; if ($dialstatus == 'ANSWER') { $this->fgItemRunNextFrom($fgItem); } else { $desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'ramal', 'value' => $this->globais['digitado'])); if (count($desvio)) { $run_next = false; if ($desvio['shortname'] == 'numeroexterno') { $return = $this->agiRunDialNumeroExterno($desvio['numero']); } if ($desvio['shortname'] == 'queue') { $queuestatus = $this->agiRunQueue(array('id' => $desvio['queue'])); if ($queuestatus == '') { $return = 'ANSWER'; } } if ($desvio['shortname'] == 'ramal') { $return = $this->agiRunDialRamal($desvio['ramal']); } if ($desvio['shortname'] == 'voicemail') { $this->agiRunVoicemail($desvio['ramal']); $return = 'ANSWER'; } if ($desvio['shortname'] == 'numeroexterno') { $this->agiRunDialNumeroExterno($desvio['numero']); } } if ($run_next) { $cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""'; $response = $this->agiRunCmd($cmd); $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'voicemail') { $this->fgItemRun($fgItemChild); $run_next = false; } } } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } } } } public function fgItemRunDialplanCheckvar($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDialplanCheckvar

"); $nomatch = true; $run_next = true; $fgItemMaster = $this->fgItemGetMasterFrom($fgItem); $fgItemChildren = $this->fgItemGetChildrenFrom($fgItemMaster); foreach ($fgItemChildren as $fgItemChild) { if (($run_next) && ($this->fgItemIsDialplanCheckvar($fgItemChild))) { $varname = (isset($fgItemChild['defaultvalues']['varname'])) ? $fgItemChild['defaultvalues']['varname'] : ''; $varvalue = (isset($fgItemChild['defaultvalues']['varvalue'])) ? $fgItemChild['defaultvalues']['varvalue'] : ''; if (isset($fgItemChild['value2'])) { if ($fgItemChild['value2'] != '') { $varname = $fgItemChild['value2']; } } if (isset($fgItemChild['value'])) { if ($fgItemChild['value'] != '') { $varvalue = $fgItemChild['value']; } } if (isset($fgItemChild['varname'])) { $varname = $fgItemChild['varname']; } if (isset($fgItemChild['varvalue'])) { $varvalue = $fgItemChild['varvalue']; } $response = $this->agiVarGet(strtoupper($varname)); if ($this->globais['isXampp']) { $rnd = rand(1, 100); if ($rnd >= 50) { $response = 'ABC'; } else { $response = 'XYZ'; } } if ($response == $varvalue) { $this->fgItemRunNextFrom($fgItemChild); $nomatch = false; $run_next = false; } } } if ($nomatch) { $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItemMaster); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'nomatch') { $this->fgItemRun($fgItemChild); $run_next = false; } } } } } public function fgItemRunDialExtension($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDialExtension

"); $dialstatus = $this->agiRunDialRamal($fgItem['value']); if ($this->globais['isXampp']) { $this->globais['numerodiscado'] = $fgItem['value']; $rnd = rand(1, 100); if ($rnd >= 50) { $dialstatus = 'ANSWER'; } else { $dialstatus = 'NO ANSWER'; } } if ($dialstatus != 'ANSWER') { $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'voicemail') { $this->fgItemRun($fgItemChild); $run_next = false; } } } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } else { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunDialGroupExtension($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDialGroupExtension

"); $dialstatus = $this->agiRunDialRamalGrupo($fgItem['value']); if ($this->globais['isXampp']) { $this->globais['numerodiscado'] = '1111'; $rnd = rand(1, 100); if ($rnd >= 50) { $dialstatus = 'ANSWER'; } else { $dialstatus = 'NO ANSWER'; } } if ($dialstatus != 'ANSWER') { $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'voicemail') { $this->fgItemRun($fgItemChild); $run_next = false; } } } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } else { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunDialplanGosub($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDialplanGosub

"); $ctxname = isset($fgItem['defaultvalues']['ctxname']) ? $fgItem['defaultvalues']['ctxname'] : ''; $ctxname = isset($fgItem['ctxname']) ? $fgItem['ctxname'] : $ctxname; $ctxexten = isset($fgItem['defaultvalues']['ctxexten']) ? $fgItem['defaultvalues']['ctxexten'] : '1001'; $ctxexten = isset($fgItem['ctxexten']) ? $fgItem['ctxexten'] : $ctxexten; if (isset($fgItem['value'])) { if ($fgItem['value'] != '') { $ctxexten = $fgItem['value']; } } if (($ctxname != '') && ($ctxexten != '')) { $cmd = 'GOSUB ' . $ctxname . ' ' . $ctxexten . ' 1'; $response = $this->agiRunCmd($cmd); } $this->fgItemRunNextFrom($fgItem); } public function fgItemRunDialplanSetvar($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDialplanSetvar

"); $varnameget = isset($fgItem['defaultvalues']['varnameget']) ? $fgItem['defaultvalues']['varnameget'] : 'AGIDIGITADO'; $varnameget = isset($fgItem['value2']) ? $fgItem['value2'] : $varnameget; $varnameget = isset($fgItem['varnameget']) ? $fgItem['varnameget'] : $varnameget; $varnameset = isset($fgItem['defaultvalues']['varname']) ? $fgItem['defaultvalues']['varname'] : ''; $varnameset = isset($fgItem['defaultvalues']['varnameset']) ? $fgItem['defaultvalues']['varnameset'] : $varnameset; $varnameset = isset($fgItem['value3']) ? $fgItem['value3'] : $varnameset; $varnameset = isset($fgItem['varnameset']) ? $fgItem['varnameset'] : $varnameset; $varvalue = isset($fgItem['value']) ? $fgItem['value'] : ''; if ($varvalue == '') { if ($varnameget != '') { $varvalue = $this->agiVarGet(strtoupper($varnameget)); if ($this->globais['isXampp']) { $varvalue = 'ABC'; } } } if ($varvalue != '') { $response = $this->agiVarSet(strtoupper($varnameset), $varvalue); } else { $cmd = 'SET VARIABLE ' . strtoupper($varnameset) . ' ""'; $response = $this->agiRunCmd($cmd); } $this->fgItemRunNextFrom($fgItem); } public function fgItemRunDigit($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd('
fgItemRunDigit

'); // queue_log // 1353461660|1353461627.33271|NONE|NONE|INFO|IVRAPPEND|1|ivr-2 // QueueLog(queuename,uniqueid,agent,event,[additionalinfo]) // $cmd = 'EXEC QUEUELOG NONE,' . $GLOBALS['uniqueid'] . ',NONE,NONE,INFO|IVRAPPEND|' . $fgItem['value'] . '|' . $GLOBALS['fgId']; // $result[] = $cmd; // $response = agiRunCmd($cmd); // $result[] = $response; /* $cmd = 'EXEC QUEUELOG NONE,' . $GLOBALS['uniqueid'] . ',NONE,NONE,INFO|IVRAPPEND|' . $GLOBALS['digitado']; $result[] = $cmd; $response = agiRunCmd($cmd); $result[] = $response; */ /* $cmd = 'EXEC QUEUELOG NONE,' . $GLOBALS['uniqueid'] . ',NONE,INFO|IVRAPPEND|' . $GLOBALS['digitado']; $result[] = $cmd; $response = agiRunCmd($cmd); $result[] = $response; */ // ... $this->fgItemRunNextFrom($fgItem); } public function fgItemRunDigitInvalid($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunDigitInvalid

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunExpedienteCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunExpedienteCheck

"); $arrDay = array( '0' => array('dom_inicio', 'dom_fim'), '1' => array('seg_inicio', 'seg_fim'), '2' => array('ter_inicio', 'ter_fim'), '3' => array('qua_inicio', 'qua_fim'), '4' => array('qui_inicio', 'qui_fim'), '5' => array('sex_inicio', 'sex_fim'), '6' => array('sab_inicio', 'sab_fim'), ); $w = date("w"); $agora = date("H:i:s"); $query = "SELECT * FROM tab_expediente "; $query .= "WHERE " . $arrDay[$w][0] . " <= '" . $agora . "' AND " . $arrDay[$w][1] . " >= '" . $agora . "' "; if (isset($fgItem['value'])) { if ($fgItem['value'] != '') { $query .= "AND id = '" . mysqli_real_escape_string($this->globais['db'], $fgItem['value']) . "'"; } } $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $isTrue = true; } else { $isTrue = false; } if ($this->globais['isXampp']) { $rnd = rand(1, 100); $isTrue = ($rnd >= 50); } $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); $cmdTarget = $isTrue ? 'expediente.true' : 'expediente.false'; foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunExpedienteFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunExpedienteFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunExpedienteTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunExpedienteTrue

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunFeriadoCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunFeriadoCheck

"); $hojeDia = date("d"); $hojeMes = date("m"); $query = "SELECT * FROM tab_feriado WHERE mes = '" . $hojeMes . "' AND dia = '" . $hojeDia . "'"; $query_result = mysqli_query($this->globais['db'], $query); $isTrue = (mysqli_num_rows($query_result) > 0); if ($this->globais['isXampp']) { $rnd = rand(1, 100); $isTrue = ($rnd >= 50); } $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); $cmdTarget = $isTrue ? 'feriado.true' : 'feriado.false'; foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunFeriadoFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunFeriadoFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunFeriadoTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunFeriadoTrue

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunIVRRedirect($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunIVRRedirect

"); $this->globais['fgId'] = $fgItem['value']; $this->fgGet(); if (count($this->globais['fgItemStart']) > 0) { $this->fgItemRunNextFrom($this->globais['fgItemStart']); } } public function fgItemRunNextFrom($fgItemFrom = array()) { // $this->agiLog("===> " . __FUNCTION__ . " <==="); // $this->agiLog(print_r($fgItemFrom, true)); $cmds_nonext = array(); $cmds_nonext[] = 'blacklist.false'; $cmds_nonext[] = 'blacklist.true'; $cmds_nonext[] = 'cnpf.false'; $cmds_nonext[] = 'cnpf.true'; $cmds_nonext[] = 'condtempo.false'; $cmds_nonext[] = 'condtempo.true'; $cmds_nonext[] = 'cpf.false'; $cmds_nonext[] = 'cpf.true'; $cmds_nonext[] = 'dialdigit'; $cmds_nonext[] = 'digit'; $cmds_nonext[] = 'expediente.false'; $cmds_nonext[] = 'expediente.true'; $cmds_nonext[] = 'feriado.false'; $cmds_nonext[] = 'feriado.true'; $cmds_nonext[] = 'nomatch'; $cmds_nonext[] = 'queue.waitingcount-greater'; $cmds_nonext[] = 'queue.withcallback-noready'; $cmds_nonext[] = 'timeout'; $cmds_nonext[] = 'timeoutwithlimit'; $cmds_nonext[] = 'timeoutwithlimit.limit'; $cmds_nonext[] = 'voicemail'; $cmds_nonext[] = 'whitelist.false'; $cmds_nonext[] = 'whitelist.true'; $run_next = true; if (isset($fgItemFrom['idnext'])) { if (isset($this->globais['fgItens'][$fgItemFrom['idnext']])) { $this->fgItemRun($this->globais['fgItens'][$fgItemFrom['idnext']]); $run_next = false; } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItemFrom); foreach ($fgItemChildren as $fgItemChild) { if (($run_next) && (!in_array($fgItemChild['cmd'], $cmds_nonext))) { $this->fgItemRun($fgItemChild); $run_next = false; } } } public function fgItemRunNoMatch($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunNoMatch

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunPesqSat($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunPesqSat ???

"); $id_pesqsat = is_numeric($fgItem['value']) ? $fgItem['value'] : ''; $audiofile = ''; if ($this->globais['isXampp']) { $audiofile = 'pesquisa'; } else { $query = "INSERT INTO tab_pesqsat_nota SET "; $query .= "id_pesqsat = '" . mysqli_real_escape_string($this->globais['db'], $id_pesqsat) . "', "; $query .= "uniqueid = '" . mysqli_real_escape_string($this->globais['db'], $this->globais['uniqueid']) . "', "; $query .= "nota = '100'"; $query_result = mysqli_query($this->globais['db'], $query); $query = "SELECT audio FROM tab_pesqsat WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $id_pesqsat) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $resultLinha = mysqli_fetch_assoc($query_result); $explodido = explode('.', $resultLinha['audio']); $audiofile = $explodido[0]; } } if ($audiofile != '') { $digito_timeout = '2000'; // milisegundos $digito_qtd = '2'; $this->globais['digitado'] = ''; $cmd = 'SET VARIABLE AGIDIGITADO ""'; $response = $this->agiRunCmd($cmd); $cmd = 'GET DATA /var/lib/asterisk/sounds/cliente/' . $audiofile . ' ' . $digito_timeout . ' ' . $digito_qtd; $response = $this->agiRunCmd($cmd); /* if (strpos($response,'= (timeout)') === false) { $explodido = explode('=',$response); if (isset($explodido[1])) { $GLOBALS['digitado'] = $explodido[1]; } } */ // 200 result= (timeout) // 200 result=4 (timeout) if (strpos($response, '= (timeout)') === false) { if (strpos($response, '(timeout)') !== false) { $response = trim(str_replace('(timeout)', '', $response)); } $explodido = explode('=', $response); $this->globais['digitado'] = $explodido[1]; } $run_next = true; if ($this->globais == '') { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $run_next = false; } if ($run_next) { if (!$this->globais['isXampp']) { $query = "UPDATE tab_pesqsat_nota SET "; $query .= "nota = '" . mysqli_real_escape_string($this->globais['db'], $this->globais['digitado']) . "' "; $query .= "WHERE id_pesqsat = '" . mysqli_real_escape_string($this->globais['db'], $id_pesqsat) . "' "; $query .= "AND uniqueid = '" . mysqli_real_escape_string($this->globais['db'], $this->globais['uniqueid']) . "'"; $query_result = mysqli_query($this->globais['db'], $query); } $this->fgItemRunNextFrom($fgItem); } } else { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunPlayaudio($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->globais['digitado'] = ''; $cmd = 'SET VARIABLE AGIDIGITADO ""'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $rnd = rand(1, 100); if ($rnd >= 60) { $this->globais['digitado'] = rand(0, 9); } else if ($rnd >= 40) { $this->globais['digitado'] = 'A'; } else if ($rnd >= 20) { $this->globais['digitado'] = '1001'; } else { $this->globais['digitado'] = ''; } } else { // Nome do arquivo sem a extensão $explodido = explode('.', $fgItem['value']); $audiofile = $explodido[0]; $digito_timeout = isset($fgItem['value2']) ? trim($fgItem['value2']) : 2; $digito_timeout = !empty($digito_timeout) ? $digito_timeout : 0; $digito_timeout = $digito_timeout * 1000; // segundos para milisegundos $digito_qtd = isset($fgItem['value3']) ? $fgItem['value3'] : 1; $digito_qtd = (!empty($digito_qtd)) ? $digito_qtd : '1'; // $digito_say = isset($fgItem['value4']) ? $fgItem['value4'] : 'false'; $cmd = 'GET DATA /var/lib/asterisk/sounds/cliente/' . $audiofile . ' ' . $digito_timeout . ' ' . $digito_qtd; $response = $this->agiRunCmd($cmd); // 200 result= (timeout) // 200 result=4 (timeout) if (strpos($response, '= (timeout)') === false) { if (strpos($response, '(timeout)') !== false) { $response = trim(str_replace('(timeout)', '', $response)); } $explodido = explode('=', $response); $this->globais['digitado'] = $explodido[1]; } } $run_next = true; if ($this->globais['digitado'] == '') { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } $run_next = false; } else { $cmd = 'SET VARIABLE AGIDIGITADO ' . $this->globais['digitado']; $response = $this->agiRunCmd($cmd); $cmd = 'EXEC QUEUELOG NONE,' . $this->globais['uniqueid'] . ',NONE,INFO|IVRAPPEND|->' . $this->globais['digitado']; $response = $this->agiRunCmd($cmd); } if ($run_next) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'digit') { if ($fgItemChild['value'] == $this->globais['digitado']) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } } if ($run_next) { $tamanho = strlen($this->globais['digitado']); if (($tamanho >= 3) && ($tamanho <= 4)) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'dialdigit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } } } if ($run_next) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'digitinvalid') { $this->fgItemRun($fgItemChild); $run_next = false; } } } } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunQueue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunQueue

"); $timeout = isset($fgItem['value2']) ? $fgItem['value2'] : ''; $timeout = is_numeric($timeout) ? $timeout : ''; /* $id_queue_callback = isset($fgItem['value2']) ? $fgItem['value2'] : ''; $cmd = 'SET VARIABLE DIDCALLBACKQUEUEID ' . $id_queue_callback; $result[] = $cmd; $response = agiRunCmd($cmd); $result[] = $response; */ $run_next = true; // same => n,QueueLog(Q21,${UNIQUEID},NONE,INFO,IVRSTART) // same => n,QueueLog(Q21,${UNIQUEID},NONE,INFO,IVRAPPEND|DDR-FILA-INSUMOS-TUPA) /* $cmd = 'EXEC QUEUELOG Q'.$fgItem['value'].',' . $GLOBALS['uniqueid'] . ',NONE,NONE,INFO|IVRAPPEND|' . $GLOBALS['digitado']; $result[] = $cmd; $response = agiRunCmd($cmd); $result[] = $response; */ /* $cmd = 'EXEC QUEUELOG Q'.$fgItem['value'].',' . $GLOBALS['uniqueid'] . ',NONE,INFO|IVRAPPEND|' . $GLOBALS['digitado']; $result[] = $cmd; $response = agiRunCmd($cmd); $result[] = $response; */ // ... $response = $this->agiRunQueue(array('id' => $fgItem['value'], 'timeout' => $timeout)); if ($response == 'stopivr') { $run_next = false; } if (($run_next) && ($response == 'timeout')) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $run_next = false; } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunQueueWaitingCount($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunQueueWaitingCount

"); $id_queue = is_numeric($fgItem['value']) ? 'Q' . $fgItem['value'] : $fgItem['value']; $cmd = 'GET FULL VARIABLE ${QUEUE_WAITING_COUNT(' . $id_queue . ')}'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $rnd = rand(0, 20); $response = '200 result=1 (' . $rnd . ')'; } $waiting_count = ''; if (substr($response, 0, 14) == '200 result=1 (') { $explodido = explode('(', $response); $waiting_count = substr($explodido[1], 0, -1); } $run_next = true; if ($waiting_count == '') { $run_next = false; } if ($run_next) { $arr = array(); $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($fgItemChild['cmd'] == 'queue.waitingcount-greater') { $arr[$fgItemChild['value']] = $fgItemChild['id']; } } if (count($arr) > 0) { ksort($arr); $fgItemNextId = end($arr); $this->fgItemRun($this->globais['fgItens'][$fgItemNextId]); $run_next = false; } } if ($run_next) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'nomatch') { $this->fgItemRun($fgItemChild); $run_next = false; } } } } } public function fgItemRunQueueWaitingCountGreater($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunQueueWaitingCountGreater

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunQueueWithCallback($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $id_queue_callback = isset($fgItem['value2']) ? $fgItem['value2'] : ''; if ($id_queue_callback == '') { $cmd = 'SET VARIABLE AGICALLBACKQUEUEID ""'; } else { $cmd = 'SET VARIABLE AGICALLBACKQUEUEID ' . $id_queue_callback; } $response = $this->agiRunCmd($cmd); $timeout = isset($fgItem['value3']) ? $fgItem['value3'] : ''; $timeout = is_numeric($timeout) ? $timeout : ''; $run_next = true; $queue_status = ''; $cmd = 'GET FULL VARIABLE ${QUEUE_MEMBER(Q' . $fgItem['value'] . ',ready)}'; $response = $this->agiRunCmd($cmd); if ($this->globais['isXampp']) { $rnd = rand(1, 100); if ($rnd >= 50) { $response = '200 result=1 (0)'; } } if (substr($response, 0, 14) == '200 result=1 (') { $qtd = str_replace('200 result=1 (', '', $response); $qtd = substr($qtd, 0, -1); if ($qtd == '0') { $queue_status = 'full'; } } if ($queue_status == 'full') { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'queue.withcallback-noready') { $this->fgItemRun($fgItemChild); $run_next = false; } } } } if ($run_next) { // logAdd('===> agiRunQueue
'); $queue_status = $this->agiRunQueue(array('id' => $fgItem['value'], 'timeout' => $timeout)); if ($queue_status == 'stopivr') { // logAdd('===> agiRunQueue stopivr
'); $run_next = false; } } if (($run_next) && ($queue_status == 'timeout')) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeout') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $run_next = false; } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunQueueWithCallbackNoReady($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunQueueWithCallbackNoReady

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunRecord($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunRecord

"); $uniqueid = $this->globais['uniqueid']; $callerid = $this->globais['callerid']; $exten = $this->globais['fgId']; //$cmd = 'EXEC MixMonitor IN_'.date("dmY").'_'.date("H-i-s").'_'.$uniqueid.'_'.$callerid.'_'.$exten.'.wav'; //$cmd = 'EXEC MixMonitor IN_2023-10-31_10-05-01_123456.78_2001_2221.wav'; //$cmd = 'EXEC MixMonitor IN_'.date("Y-m-d").'_'.date("H-i-s").'_'.$uniqueid.'_'.$callerid.'_'.$exten.'.wav'; $cmd = 'EXEC MixMonitor IN_' . date("Y-m-d") . '_' . date("H-i-s") . '_' . $uniqueid . '_' . $callerid . '_' . $exten . '.ogg'; $response = $this->agiRunCmd($cmd); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunStart($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); // queue_log // 1353461650|1353461627.33271|NONE|NONE|INFO|IVRSTART|1234|5556777 // QueueLog(queuename,uniqueid,agent,event,[additionalinfo]) // $cmd = 'EXEC QUEUELOG NONE,' . $GLOBALS['uniqueid'] . ',NONE,NONE,INFO|IVRSTART|' . $GLOBALS['callerid'] . '|' . $GLOBALS['fgId']; // ... $this->fgItemRunNextFrom($fgItem); } public function fgItemRunTimeout($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'voicemail') { $this->fgItemRun($fgItemChild); $run_next = false; } } } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunTimeoutWithLimit($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunTimeoutWithLimit

"); $run_next = true; if (!isset($this->globais['fgItemExecutedCount'][$fgItem['id']])) { $this->globais['fgItemExecutedCount'][$fgItem['id']] = 0; } $this->globais['fgItemExecutedCount'][$fgItem['id']]++; if ($this->globais['fgItemExecutedCount'][$fgItem['id']] >= $fgItem['value']) { $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == 'timeoutwithlimit.limit') { $this->fgItemRun($fgItemChild); $run_next = false; } } } $run_next = false; } if ($run_next) { $this->fgItemRunNextFrom($fgItem); } } public function fgItemRunTimeoutWithLimitLimit($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunTimeoutWithLimitLimit

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunVoicemail($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunVoicemail

"); if (isset($this->globais['numerodiscado'])) { if ($this->globais['numerodiscado'] != '') { $cmd = 'EXEC VOICEMAIL ' . $this->globais['numerodiscado']; $response = $this->agiRunCmd($cmd); } } $this->fgItemRunNextFrom($fgItem); } public function fgItemRunWhitelistCheck($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunWhitelistCheck

"); $esta_na_lista = $this->hitpbxCheckWhitelist($GLOBALS['callerid']); if ($this->globais['isXampp']) { $rnd = rand(1, 100); $esta_na_lista = ($rnd >= 50); } $run_next = true; $fgItemChildren = $this->fgItemGetChildrenFrom($fgItem); $cmdTarget = $esta_na_lista ? 'whitelist.true' : 'whitelist.false'; foreach ($fgItemChildren as $fgItemChild) { if ($run_next) { if ($fgItemChild['cmd'] == $cmdTarget) { $this->fgItemRun($fgItemChild); $run_next = false; } } } } public function fgItemRunWhitelistFalse($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunWhitelistFalse

"); $this->fgItemRunNextFrom($fgItem); } public function fgItemRunWhitelistTrue($fgItem = array()) { $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($fgItem, true)); $this->logAdd("
fgItemRunWhitelistTrue

"); $this->fgItemRunNextFrom($fgItem); } // -------------------------------------------------------------------------------------------------------------------------------- public function hitpbxCheckAuditoria($args = array()) { $args['ramal'] = isset($args['ramal']) ? $args['ramal'] : ''; $args['ramais'] = isset($args['ramais']) ? $args['ramais'] : array(); $args['idqueue'] = isset($args['idqueue']) ? $args['idqueue'] : ''; if ($args['ramal'] != '') { $args['ramais'][] = $args['ramal']; } $ramal_ids = array(); foreach ($args['ramais'] as $ramal) { $query = "SELECT id FROM tab_ramal WHERE ramal = '" . mysqli_real_escape_string($this->globais['db'], $ramal) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result)) { $resultLinha = mysqli_fetch_assoc($query_result); $ramal_ids[] = $resultLinha['id']; } } $auditorias = array(); foreach ($ramal_ids as $idramal) { $query = "SELECT * FROM tab_auditoria WHERE gravar = '1' AND id_origem_tab_ramal = '" . mysqli_real_escape_string($this->globais['db'], $idramal) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $auditorias[] = $resultLinha; } } $query = "SELECT * FROM tab_auditoria WHERE gravar = '1' AND id_origem_tab_queue = '" . mysqli_real_escape_string($this->globais['db'], $args['idqueue']) . "' "; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $auditorias[] = $resultLinha; } $periodo_match = false; foreach ($auditorias as $auditoria) { $periodo_match = $this->hitpbxCheckPeriodoMatch(array('id_periodo' => $auditoria['id_tab_condicao_tempo'])); } return $periodo_match; } public function hitpbxCheckBlacklist($callerid = '') { $return = false; //$query = "SELECT id FROM tab_blacklist WHERE telefone = '" . mysqli_real_escape_string($GLOBALS['db'],$callerid) . "'"; $query = "SELECT id FROM tab_blacklist WHERE CAST(REGEXP_REPLACE(telefone, '[^0-9]', '') AS SIGNED) = '" . mysqli_real_escape_string($this->globais['db'], $callerid) . "'"; if (($return != true) && ((strlen($callerid) == 12) || (strlen($callerid) == 13))) { // Exemplos de callerid: 551133224455 ou 5511988887777 $tmp = '(' . substr($callerid, 2, 2) . ')' . substr($callerid, 4); $query = "SELECT id FROM tab_blacklist WHERE telefone = '" . mysqli_real_escape_string($this->globais['db'], $tmp) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } } if (($return != true) && ((strlen($callerid) == 10) || (strlen($callerid) == 11))) { // Exemplos de callerid: 1133224455 ou 11988887777 $tmp = '55(' . substr($callerid, 0, 2) . ')' . substr($callerid, 2); $query = "SELECT id FROM tab_blacklist WHERE telefone = '" . mysqli_real_escape_string($this->globais['db'], $tmp) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } } $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } return $return; } public function hitpbxCheckPeriodoMatch($args = array()) { $return = false; $args['id_periodo'] = isset($args['id_periodo']) ? $args['id_periodo'] : ''; $args['weekday'] = isset($args['weekday']) ? $args['weekday'] : date('D'); $args['hhmmss'] = isset($args['hhmmss']) ? $args['hhmmss'] : date("H:i:s"); $args['day'] = isset($args['day']) ? $args['day'] : date("d"); $args['month'] = isset($args['month']) ? $args['month'] : date("m"); $args['year'] = isset($args['year']) ? $args['year'] : date("Y"); if ($args['id_periodo'] != '') { $query = "SELECT id FROM tab_periodo "; $query .= "WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $args['id_periodo']) . "'"; if ($args['weekday'] == 'Mon') { $query .= "AND (monday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($args['weekday'] == 'Tue') { $query .= "AND (tuesday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($args['weekday'] == 'Wed') { $query .= "AND (wednesday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($args['weekday'] == 'Thu') { $query .= "AND (thursday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($args['weekday'] == 'Fri') { $query .= "AND (friday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($args['weekday'] == 'Sat') { $query .= "AND (saturday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($args['weekday'] == 'Sun') { $query .= "AND (sunday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } $query .= "AND ((time_start <= '" . $args['hhmmss'] . "' AND time_stop >= '" . $args['hhmmss'] . "') OR (time_start = '00:00:00' AND time_stop = '00:00:00')) "; $query .= "AND ((day_start <= '" . $args['day'] . "' AND day_stop >= '" . $args['day'] . "') OR (day_start = '0' AND day_stop = '0')) "; $query .= "AND ((month_start <= '" . $args['month'] . "' AND month_stop >= '" . $args['month'] . "') OR (month_start = '0' AND month_stop = '0')) "; $query .= "AND ((year_start <= '" . $args['year'] . "' AND year_stop >= '" . $args['year'] . "') OR (year_start = '0' AND year_stop = '0')) "; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } } return $return; } public function hitpbxCheckWhitelist($callerid = '') { $return = false; //$query = "SELECT id FROM tab_whitelist WHERE telefone = '" . mysqli_real_escape_string($GLOBALS['db'],$callerid) . "'"; $query = "SELECT id FROM tab_whitelist WHERE CAST(REGEXP_REPLACE(telefone, '[^0-9]', '') AS SIGNED) = '" . mysqli_real_escape_string($this->globais['db'], $callerid) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } if (($return != true) && ((strlen($callerid) == 12) || (strlen($callerid) == 13))) { // Exemplos de callerid: 551133224455 ou 5511988887777 $tmp = '(' . substr($callerid, 2, 2) . ')' . substr($callerid, 4); $query = "SELECT id FROM tab_whitelist WHERE telefone = '" . mysqli_real_escape_string($this->globais['db'], $tmp) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } } if (($return != true) && ((strlen($callerid) == 10) || (strlen($callerid) == 11))) { // Exemplos de callerid: 1133224455 ou 11988887777 $tmp = '55(' . substr($callerid, 0, 2) . ')' . substr($callerid, 2); $query = "SELECT id FROM tab_whitelist WHERE telefone = '" . mysqli_real_escape_string($this->globais['db'], $tmp) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $return = true; } } return $return; } public function hitpbxGetCallbackFromRamal($ramal = '') { $return = ''; $query = "SELECT callback FROM tab_ramal WHERE ramal = '" . mysqli_real_escape_string($this->globais['db'], $ramal) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $resultLinha = mysqli_fetch_assoc($query_result); $return = $resultLinha['callback']; } return $return; } public function hitpbxGetDesvioFrom($args = array()) { $return = array(); $args['tipo'] = $args['tipo'] ? $args['tipo'] : ''; // shortname $args['value'] = $args['value'] ? $args['value'] : ''; $origem_tipo_id = ''; $query = "SELECT id FROM tab_desvio_origem_tipo WHERE shortname = '" . mysqli_real_escape_string($this->globais['db'], $args['tipo']) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $origem_tipo_id = $resultLinha['id']; } $origem_id = $args['value']; if ($args['tipo'] == 'ramal') { $query = "SELECT id FROM tab_ramal WHERE ramal = '" . mysqli_real_escape_string($this->globais['db'], $args['value']) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $origem_id = $resultLinha['id']; } } $query = "SELECT tab_desvio.periodo_id, tab_desvio.destino_id, tab_desvio_destino_tipo.shortname "; $query .= "FROM tab_desvio "; $query .= "INNER JOIN tab_desvio_destino_tipo ON tab_desvio_destino_tipo.id = tab_desvio.destino_tipo_id "; $query .= "WHERE tab_desvio.origem_tipo_id = '" . mysqli_real_escape_string($this->globais['db'], $origem_tipo_id) . "'"; $query .= "AND tab_desvio.origem_id = '" . mysqli_real_escape_string($this->globais['db'], $origem_id) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $periodo_match = false; if (empty($resultLinha['periodo_id'])) { $periodo_match = true; } else { $query2 = "SELECT * FROM tab_periodo "; $query2 .= "WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $resultLinha['periodo_id']) . "' "; $weekday = date('D'); if ($weekday == 'Mon') { $query2 .= "AND (monday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Tue') { $query2 .= "AND (tuesday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Wed') { $query2 .= "AND (wednesday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Thu') { $query2 .= "AND (thursday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Fri') { $query2 .= "AND (friday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Sat') { $query2 .= "AND (saturday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } if ($weekday == 'Sun') { $query2 .= "AND (sunday = '1' OR (monday = '0' AND tuesday = '0' AND wednesday = '0' AND thursday = '0' AND friday = '0' AND saturday = '0' AND sunday = '0')) "; } $hhmmss = date("H:i:s"); $query2 .= "AND ((time_start <= '" . $hhmmss . "' AND time_stop >= '" . $hhmmss . "') OR (time_start = '00:00:00' AND time_stop = '00:00:00')) "; $day = date('d'); $query2 .= "AND ((day_start <= '" . $day . "' AND day_stop >= '" . $day . "') OR (day_start = '0' AND day_stop = '0')) "; $month = date('m'); $query2 .= "AND ((month_start <= '" . $month . "' AND month_stop >= '" . $month . "') OR (month_start = '0' AND month_stop = '0')) "; $year = date('Y'); $query2 .= "AND ((year_start <= '" . $year . "' AND year_stop >= '" . $year . "') OR (year_start = '0' AND year_stop = '0')) "; $result2 = mysqli_query($this->globais['db'], $query2); if (mysqli_num_rows($result2) > 0) { $periodo_match = true; } } if ($periodo_match) { if ($resultLinha['shortname'] == 'queue') { $query2 = "SELECT id FROM tab_queue WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $resultLinha['destino_id']) . "'"; $result2 = mysqli_query($this->globais['db'], $query2); while ($resultLinha2 = mysqli_fetch_assoc($result2)) { $return = array( 'shortname' => $resultLinha['shortname'], 'queue' => $resultLinha2['id'] ); } } if (($resultLinha['shortname'] == 'ramal') || ($resultLinha['shortname'] == 'voicemail')) { $query2 = "SELECT ramal FROM tab_ramal WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $resultLinha['destino_id']) . "'"; $result2 = mysqli_query($this->globais['db'], $query2); while ($resultLinha2 = mysqli_fetch_assoc($result2)) { $return = array( 'shortname' => $resultLinha['shortname'], 'ramal' => $resultLinha2['ramal'] ); } } if ($resultLinha['shortname'] == 'ramalgrupo') { $query2 = "SELECT id FROM tab_group WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $resultLinha['destino_id']) . "'"; $result2 = mysqli_query($this->globais['db'], $query2); while ($resultLinha2 = mysqli_fetch_assoc($result2)) { $return = array( 'shortname' => $resultLinha['shortname'], 'callgroup' => $resultLinha2['id'] ); } } if ($resultLinha['shortname'] == 'numeroexterno') { $return = array( 'shortname' => $resultLinha['shortname'], 'numero' => $resultLinha['destino_id'] ); } } } return $return; } public function hitpbxGetQueuenomeFromId($queueid = '') { $return = ''; $query = "SELECT nome FROM tab_queue WHERE id = '" . mysqli_real_escape_string($this->globais['db'], $queueid) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $return = $resultLinha['nome']; } return $return; } public function hitpbxGetQueueFromNumeroExterno($args = array()) { $return = array(); $args['numero_externo'] = $args['numero_externo'] ? $args['numero_externo'] : ''; if ($args['numero_externo'] != '') { $query = "SELECT * FROM tab_queue WHERE numero_externo = '" . mysqli_real_escape_string($this->globais['db'], $args['numero_externo']) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $return = $resultLinha; } } return $return; } public function hitpbxGetRamais($args = array()) { $return = array(); $query = "SELECT ramal FROM tab_ramal "; $query .= "WHERE ramal IS NOT NULL "; if (isset($args['callgroup'])) { $query .= "AND callgroup = '" . mysqli_real_escape_string($this->globais['db'], $args['callgroup']) . "'"; } $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $return[] = $resultLinha['ramal']; } return $return; } public function hitpbxGetRamaisSecretariaFromRamal($ramal = '') { $return = array(); $query = "SELECT callgroup_secretaria FROM tab_ramal WHERE ramal = '" . mysqli_real_escape_string($this->globais['db'], $ramal) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $resultLinha = mysqli_fetch_assoc($query_result); $callgroup_secretaria = $resultLinha['callgroup_secretaria']; $query = "SELECT ramal FROM tab_ramal WHERE callgroup = '" . mysqli_real_escape_string($this->globais['db'], $callgroup_secretaria) . "'"; $query_result = mysqli_query($this->globais['db'], $query); while ($resultLinha = mysqli_fetch_assoc($query_result)) { $return[] = $resultLinha['ramal']; } } return $return; } public function hitpbxGetRingTimeoutFromRamal($ramal = '') { $return = ''; $query = "SELECT ring_timeout FROM tab_ramal WHERE ramal = '" . mysqli_real_escape_string($this->globais['db'], $ramal) . "'"; $query_result = mysqli_query($this->globais['db'], $query); if (mysqli_num_rows($query_result) > 0) { $resultLinha = mysqli_fetch_assoc($query_result); $return = $resultLinha['ring_timeout']; } return $return; } // -------------------------------------------------------------------------------------------------------------------------------- public function extrairNumeros($string) { preg_match_all('/\d+/', $string, $matches); $numeros = implode('', $matches[0]); return $numeros; } public function validarCNPJ($cnpj = '') { // Remover caracteres não numéricos $cnpj = preg_replace('/[^0-9]/', '', $cnpj); // Verificar se o CNPJ tem 14 dígitos if (strlen($cnpj) !== 14) { return false; } // Verificar CNPJs com dígitos repetidos (00.000.000/0000-00, 11.111.111/1111-11, etc.) if (preg_match('/(\d)\1{13}/', $cnpj)) { return false; } // Calcular o primeiro dígito verificador $soma = 0; for ($i = 0; $i < 12; $i++) { $soma += $cnpj[$i] * (($i < 4) ? (5 - $i) : (13 - $i)); } $resto = $soma % 11; $dv1 = ($resto < 2) ? 0 : 11 - $resto; // Calcular o segundo dígito verificador $soma = 0; for ($i = 0; $i < 13; $i++) { $soma += $cnpj[$i] * (($i < 5) ? (6 - $i) : (14 - $i)); } $resto = $soma % 11; $dv2 = ($resto < 2) ? 0 : 11 - $resto; // Verificar se os dígitos verificadores são válidos if ($cnpj[12] == $dv1 && $cnpj[13] == $dv2) { return true; } else { return false; } } public function validarCPF($cpf = '') { // Remover caracteres não numéricos $cpf = preg_replace('/[^0-9]/', '', $cpf); // Verificar se o CPF tem 11 dígitos if (strlen($cpf) !== 11) { return false; } // Verificar CPFs com dígitos repetidos (111.111.111-11, 222.222.222-22, etc.) if (preg_match('/(\d)\1{10}/', $cpf)) { return false; } // Separar os dígitos $digitos = str_split($cpf); // Calcular o primeiro dígito verificador $soma = 0; for ($i = 0; $i < 9; $i++) { $soma += $digitos[$i] * (10 - $i); } $resto = $soma % 11; $dv1 = ($resto < 2) ? 0 : 11 - $resto; // Calcular o segundo dígito verificador $soma = 0; for ($i = 0; $i < 10; $i++) { $soma += $digitos[$i] * (11 - $i); } $resto = $soma % 11; $dv2 = ($resto < 2) ? 0 : 11 - $resto; // Verificar se os dígitos verificadores são válidos if ($digitos[9] == $dv1 && $digitos[10] == $dv2) { return true; } else { return false; } } // -------------------------------------------------------------------------------------------------------------------------------- public function teste() { $this->agiLog($this->globais['fgId']); } function tocarFila($queueId, $timeout) { return $this->agiRunCmd('EXEC Queue Q' . $queueId . ',ctT,,,' . $timeout); } // -------------------------------------------------------------------------------------------------------------------------------- public function run() { // $this->logStart(); // $this->logAdd("
" . print_r($this->globais, true) . "

"); $this->agiLog("===> " . __FUNCTION__ . " <==="); $this->agiLog(print_r($this->globais, true)); if (is_null($this->globais['fgId'])) { $this->agiRunCmd('EXEC NOOP fgIdIsNull'); return; } if (is_null($this->globais['hostname'])) { $this->agiRunCmd('EXEC NOOP hostnameIsNull'); return; } if (is_null($this->globais['hostip'])) { $this->agiRunCmd('EXEC NOOP hostipIsNull'); return; } $this->fgGet(); if (count($this->globais['fgItemStart']) > 0) { $this->globais['arrDtmf'] = array( '35' => '#', '42' => '*', '48' => '0', '49' => '1', '50' => '2', '51' => '3', '52' => '4', '53' => '5', '54' => '6', '55' => '7', '56' => '8', '57' => '9' ); if ($this->globais['isXampp']) { $this->globais['callerid'] = '1138118400'; $this->globais['uniqueid'] = date("Ymd") . "." . date("His"); $this->globais['digitado'] = ''; $host = 'localhost'; $user = 'root'; $password = ''; $database = 'hitpbx_homologacao'; $port = '3306'; $this->globais['db'] = mysqli_connect($host, $user, $password, $database, $port) or die('Erro de conexão com o banco de dados'); mysqli_set_charset($this->globais['db'], 'utf8'); $this->fgItemRun($this->globais['fgItemStart']); } else { $host = '172.31.187.152'; $user = 'appuser'; $password = 'nmvP$x23Vzb@T%Su'; // $this->globais['hostname'] = gethostname(); if ($this->globais['hostname'] == 'hitpbx-001') { $database = 'hitpbx-001'; } else { $database = str_replace('hitpbx-', 'hitpbx_', $this->globais['hostname']); } $port = '6033'; $this->globais['db'] = mysqli_connect($host, $user, $password, $database, $port) or die('Erro de conexão com o banco de dados'); mysqli_set_charset($this->globais['db'], 'utf8'); /* logAdd("111
"); $query = "SELECT * FROM tab_ramal LIMIT 1"; $result = mysqli_query($db,$query); logAdd($query."
"); $result = mysqli_query($this->globais['db'],$query); logAdd($query."
"); */ // ... /* $host = '172.31.187.150'; $dbcdr = mysqli_connect($host, $user, $password, $database, $port) or die('Erro de conexão com o banco de dados'); mysqli_set_charset($dbcdr, 'utf8'); $query = " CREATE TABLE IF NOT EXISTS tab_ivr_log2 ( `id` INT NOT NULL AUTO_INCREMENT, `uniqueid` VARCHAR(32) NOT NULL, `did` TEXT NULL, `quando` DATETIME NULL, `fgitem_json` TEXT NULL, `fgitem_result` TEXT NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8; "; $result = mysqli_query($dbcdr,$query); */ // ... $response = $this->agiRunCmd('EXEC NOOP HITAGI'); $response = $this->agiRunCmd('ANSWER'); $response = $this->agiRunCmd('EXEC WAIT 1'); $response = $this->agiRunCmd('EXEC PLAYBACK beep'); $response = $this->agiRunCmd('EXEC WAIT 1'); $this->globais['digitado'] = ''; $this->globais['callerid'] = $this->agiVarGet('CALLERID'); $this->globais['uniqueid'] = $this->agiVarGet('UNIQUEID'); $response = $this->agiVarSet('AGIDID', $this->globais['fgId']); $cmd = 'EXEC QUEUELOG NONE,' . $this->globais['uniqueid'] . ',NONE,INFO|IVRSTART'; $response = $this->agiRunCmd($cmd); $cmd = 'EXEC QUEUELOG NONE,' . $this->globais['uniqueid'] . ',NONE,INFO|IVRAPPEND|->' . $this->globais['fgId']; $response = $this->agiRunCmd($cmd); if (1 == 1) { // Teste $callerid = $this->agiVarGet('CALLERID'); $this->agiLog('callerid: ' . $callerid); $arr = array( 'ramal' => '6999', 'numero' => $callerid ); $this->agiAddCallback($arr); } else { $this->fgItemRun($this->globais['fgItemStart']); } // 1353461660|1353461627.33271|NONE|NONE|INFO|IVRHANGUP| //$cmd = 'EXEC QUEUELOG NONE,' . $GLOBALS['uniqueid'] . ',NONE,NONE,INFO|IVRHANGUP'; //$response = agiRunCmd($cmd); // $response = agiRunCmd('HANGUP'); } } /* $this->teste(); $this->globais['nomeFila'] = '10'; $response = $this->tocarFila($this->globais['nomeFila'], 1); echo "\n" . $response . "\n"; */ } }