2024-12-14 01:14:11 +00:00
< ? php
namespace Hitlabs\Hitagi ;
class AGIEntrada
{
private $globais = array ();
private $injection = array ();
public function __construct ( $injection , $globais = array ())
{
2024-12-16 19:01:16 +00:00
$globais [ 'fgId' ] = $globais [ 'fgId' ] ? ? null ;
$globais [ 'hostname' ] = $globais [ 'hostname' ] ? ? null ;
$globais [ 'hostip' ] = $globais [ 'hostip' ] ? ? null ;
$globais [ 'logEnabled' ] = $globais [ 'logEnabled' ] ? ? null ;
$globais [ 'appdir' ] = $globais [ 'appdir' ] ? ? null ;
$globais [ 'isXampp' ] = $globais [ 'isXampp' ] ? ? null ;
2024-12-14 01:14:11 +00:00
$this -> 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 " ) . " <hr> " ;
$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 ();
2024-12-16 19:01:16 +00:00
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' ])) {
2024-12-14 01:14:11 +00:00
// http://177.107.205.248/fluxograma/data-json/8999.json
2024-12-16 19:01:16 +00:00
$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' ;
2024-12-14 01:14:11 +00:00
}
$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 );
}
}
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)."<br>");
$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 . '<br>');
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.'<br>');
if ( $agiivrstop == 'SIM' ) {
// logAdd('FOI SIM<br>');
$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 = substr ( $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 ( " <hr>fgItemRun<br> " );
$this -> logAdd ( " <pre> " . print_r ( $fgItem , true ) . " </pre><br> " );
// 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 ( " <hr>fgItemRunAgiExec<br><br> " );
$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 ( " <hr>fgItemRunBlacklistCheck<br><br> " );
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 ( " <hr>fgItemRunBlacklistFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunBlacklistTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunBlacklistTrue<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunCalleridChange ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( '<hr>fgItemRunCalleridChange<br><br>' );
$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 ( '<hr>fgItemRunCNPJCheck<br><br>' );
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 ( " <hr>fgItemRunCNPJCheckFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunCNPJCheckTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunCNPJCheckTrue<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunCondTempoCheck ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( '<hr>fgItemRunCondTempoCheck<br><br>' );
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 ( " <hr>fgItemRunCondTempoCheckFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunCondTempoCheckTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunCondTempoCheckTrue<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunCPFCheck ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( '<hr>fgItemRunCPFCheck<br><br>' );
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 ( " <hr>fgItemRunCPFCheckFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunCPFCheckTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunCPFCheckTrue<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunDialdigit ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunDialdigit<br><br> " );
$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 ( " <hr>fgItemRunDialplanCheckvar<br><br> " );
$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 ( " <hr>fgItemRunDialExtension<br><br> " );
$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 ( " <hr>fgItemRunDialGroupExtension<br><br> " );
$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 ( " <hr>fgItemRunDialplanGosub<br><br> " );
$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 ( " <hr>fgItemRunDialplanSetvar<br><br> " );
$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 ( '<hr>fgItemRunDigit<br><br>' );
// 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 ( " <hr>fgItemRunDigitInvalid<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunExpedienteCheck ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunExpedienteCheck<br><br> " );
$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 ( " <hr>fgItemRunExpedienteFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunExpedienteTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunExpedienteTrue<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunFeriadoCheck ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunFeriadoCheck<br><br> " );
$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 ( " <hr>fgItemRunFeriadoFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunFeriadoTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunFeriadoTrue<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunIVRRedirect ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunIVRRedirect<br><br> " );
$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 ( " <hr>fgItemRunNoMatch<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunPesqSat ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunPesqSat ???<br><br> " );
$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 ( " <hr>fgItemRunQueue<br><br> " );
$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 ( " <hr>fgItemRunQueueWaitingCount<br><br> " );
$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 ( " <hr>fgItemRunQueueWaitingCountGreater<br><br> " );
$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<br>');
$queue_status = $this -> agiRunQueue ( array ( 'id' => $fgItem [ 'value' ], 'timeout' => $timeout ));
if ( $queue_status == 'stopivr' ) {
// logAdd('===> agiRunQueue stopivr<br>');
$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 ( " <hr>fgItemRunQueueWithCallbackNoReady<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunRecord ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunRecord<br><br> " );
$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 ( " <hr>fgItemRunTimeoutWithLimit<br><br> " );
$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 ( " <hr>fgItemRunTimeoutWithLimitLimit<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunVoicemail ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunVoicemail<br><br> " );
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 ( " <hr>fgItemRunWhitelistCheck<br><br> " );
$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 ( " <hr>fgItemRunWhitelistFalse<br><br> " );
$this -> fgItemRunNextFrom ( $fgItem );
}
public function fgItemRunWhitelistTrue ( $fgItem = array ())
{
$this -> agiLog ( " ===> " . __FUNCTION__ . " <=== " );
$this -> agiLog ( print_r ( $fgItem , true ));
$this -> logAdd ( " <hr>fgItemRunWhitelistTrue<br><br> " );
$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 ()
{
2024-12-16 19:01:16 +00:00
// $this->logStart();
// $this->logAdd("<pre>" . print_r($this->globais, true) . "</pre><br>");
$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 ;
}
2024-12-14 01:14:11 +00:00
$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' ;
2024-12-16 19:01:16 +00:00
// $this->globais['hostname'] = gethostname();
if ( $this -> globais [ 'hostname' ] == 'hitpbx-001' ) {
2024-12-14 01:14:11 +00:00
$database = 'hitpbx-001' ;
2024-12-16 19:01:16 +00:00
} else {
$database = str_replace ( 'hitpbx-' , 'hitpbx_' , $this -> globais [ 'hostname' ]);
2024-12-14 01:14:11 +00:00
}
$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<br> " );
$query = " SELECT * FROM tab_ramal LIMIT 1 " ;
$result = mysqli_query ( $db , $query );
logAdd ( $query . " <br> " );
$result = mysqli_query ( $this -> globais [ 'db' ], $query );
logAdd ( $query . " <br> " );
*/
// ...
/*
$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 );
$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 " ;
*/
}
}