3035 lines
94 KiB
PHP
3035 lines
94 KiB
PHP
<?php
|
|
|
|
namespace Hitlabs\Hitagi;
|
|
|
|
class AGIEntrada
|
|
{
|
|
private $globais = array();
|
|
private $injection = array();
|
|
|
|
public function __construct($injection, $globais = array())
|
|
{
|
|
$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;
|
|
$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();
|
|
if (!is_null($this->globais['fgId'])) {
|
|
if ($this->globais['isXampp']) {
|
|
$target = $this->globais['appdir'] . DIRECTORY_SEPARATOR . 'dial' . DIRECTORY_SEPARATOR . $this->globais['fgId'] . '.json';
|
|
} else if (!is_null($this->globais['hostip'])) {
|
|
// http://177.107.205.248/fluxograma/data-json/8999.json
|
|
$target = 'http://' . $this->globais['hostip'] . '/fluxograma/data-json/' . $this->globais['fgId'] . '.json';
|
|
} else if (file_exists('/etc/asterisk')) {
|
|
$target = '/var/www/html/fluxograma/data-json/' . $this->globais['fgId'] . '.json';
|
|
}
|
|
$itens = file_get_contents($target);
|
|
if ($itens !== false) {
|
|
$itens = json_decode($itens, true);
|
|
foreach ($itens as $item) {
|
|
$this->globais['fgItens'][$item['id']] = $item;
|
|
if ($item['cmd'] == 'start') {
|
|
$this->globais['fgItemStart'] = $item;
|
|
}
|
|
}
|
|
unset($itens);
|
|
}
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
public function agiAddCallback($args = array())
|
|
{
|
|
$this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
$this->agiLog(print_r($args, true));
|
|
|
|
// https://www.voip-info.org/asterisk-auto-dial-out/
|
|
|
|
$args['ramal'] = isset($args['ramal']) ? $args['ramal'] : '';
|
|
$args['numero'] = isset($args['numero']) ? $args['numero'] : '';
|
|
|
|
//$calldata = "Channel: PJSIP/" . $args['ramal'] . "\n";
|
|
//$calldata.= "Context: padrao\n";
|
|
//$calldata.= "Extension: " . $args['numero'] . "\n";
|
|
|
|
$calldata = "Channel: Local/" . $args['ramal'] . "@padrao" . "\n";
|
|
$calldata .= "Context: padrao\n";
|
|
$calldata .= "Extension: 0" . $args['numero'] . "\n";
|
|
|
|
// MaxRetries
|
|
// RetryTime
|
|
// WaitTime
|
|
$filename = time() . '-' . rand(100, 999) . '.call';
|
|
|
|
/*
|
|
if (file_exists('/var/www/html/hitmanager/dial/')) {
|
|
$target = '/var/www/html/hitmanager/dial/' . $filename;
|
|
file_put_contents($target, $calldata);
|
|
$time = time() + 30;
|
|
touch($target, $time);
|
|
}
|
|
|
|
if (file_exists('/var/spool/asterisk/outgoing/')) {
|
|
$target2 = '/var/spool/asterisk/outgoing/' . $filename;
|
|
rename($target, $target2);
|
|
}
|
|
*/
|
|
|
|
/*
|
|
$target = $this->globais['appdir'] . DIRECTORY_SEPARATOR . 'outgoing' . DIRECTORY_SEPARATOR . $filename;
|
|
file_put_contents($target, $calldata);
|
|
$time = time() + 30;
|
|
touch($target, $time);
|
|
*/
|
|
|
|
$argssend = array();
|
|
// $argssend['filedir'] = '/var/spool/asterisk/outgoing';
|
|
$argssend['filedir'] = '/var/www/html/apagar';
|
|
$argssend['filename'] = $filename;
|
|
$argssend['filebase64'] = base64_encode($calldata);
|
|
$arquivoremoto = new ArquivoRemoto();
|
|
$arquivoremoto->ip = $this->globais['hostip'];
|
|
$this->agiLog(print_r($arquivoremoto, true));
|
|
$response = $arquivoremoto->salvar($argssend);
|
|
$this->agiLog(print_r($response, true));
|
|
|
|
}
|
|
|
|
public function agiRecordFilaIfAuditoria($args = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($args, true));
|
|
$return = '';
|
|
$args['idqueue'] = isset($args['idqueue']) ? $args['idqueue'] : '';
|
|
$gravar = $this->hitpbxCheckAuditoria(array('idqueue' => $args['idqueue']));
|
|
if ($gravar) {
|
|
$response = $this->agiRunRecord(array('tipo' => 'auditoria_fila', 'idqueue' => $args['idqueue']));
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
public function agiRecordRamaisIfAuditoria($args = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($args, true));
|
|
$return = '';
|
|
$args['ramal'] = isset($args['ramal']) ? $args['ramal'] : '';
|
|
$args['ramais'] = isset($args['ramais']) ? $args['ramais'] : array();
|
|
if ($args['ramal'] != '') {
|
|
$args['ramais'][] = $args['ramal'];
|
|
}
|
|
foreach ($args['ramais'] as $ramal) {
|
|
$gravar = $this->hitpbxCheckAuditoria(array('ramal' => $ramal));
|
|
if ($gravar) {
|
|
//$response = agiRunCmd('EXEC NOOP SIM'.$ramal);
|
|
$response = $this->agiRunRecord(array('tipo' => 'auditoria_ramal', 'ramal' => $ramal));
|
|
} else {
|
|
//$response = agiRunCmd('EXEC NOOP NAO'.$ramal);
|
|
}
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
public function agiRunDialNumeroExterno($numero = '')
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog($numero);
|
|
$return = '';
|
|
|
|
//$cmd = 'EXEC Dial SIP/SER2105/'.$numero.',30,Tt ""';
|
|
$cmd = 'EXEC Dial Local/' . $numero . '@checksaida,30,Tt ""';
|
|
$response = $this->agiRunCmd($cmd);
|
|
|
|
$cmd = 'GET VARIABLE DIALSTATUS';
|
|
$response = $this->agiRunCmd($cmd);
|
|
$explodido = explode("(", $response);
|
|
if (count($explodido) > 1) {
|
|
$return = substr($explodido[1], 0, -1);
|
|
if ($return != 'ANSWER') {
|
|
$cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""';
|
|
$response = $this->agiRunCmd($cmd);
|
|
}
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
|
|
public function agiRunDialRamal($ramal = '')
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog($ramal);
|
|
|
|
$return = '';
|
|
|
|
$runNext = true;
|
|
|
|
$desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'ramal', 'value' => $ramal));
|
|
if (count($desvio)) {
|
|
$runNext = false;
|
|
if ($desvio['shortname'] == 'numeroexterno') {
|
|
$return = $this->agiRunDialNumeroExterno($desvio['numero']);
|
|
}
|
|
if ($desvio['shortname'] == 'queue') {
|
|
$queuestatus = $this->agiRunQueue(array('id' => $desvio['queue']));
|
|
if ($queuestatus == '') {
|
|
$return = 'ANSWER';
|
|
}
|
|
}
|
|
if ($desvio['shortname'] == 'ramal') {
|
|
$return = $this->agiRunDialRamal($desvio['ramal']);
|
|
}
|
|
if ($desvio['shortname'] == 'voicemail') {
|
|
$this->agiRunVoicemail($desvio['ramal']);
|
|
$return = 'ANSWER';
|
|
}
|
|
if ($desvio['shortname'] == 'numeroexterno') {
|
|
$this->agiRunDialNumeroExterno($desvio['numero']);
|
|
}
|
|
}
|
|
|
|
if ($runNext) {
|
|
|
|
$ramais_vai_tocar = array();
|
|
|
|
$cmd = 'EXEC Dial ';
|
|
|
|
$ramais_secretaria = $this->hitpbxGetRamaisSecretariaFromRamal($ramal);
|
|
if (count($ramais_secretaria)) {
|
|
foreach ($ramais_secretaria as $ramal) {
|
|
|
|
$response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(' . $ramal . ')}');
|
|
$contacts = str_replace('200 result=1 (', '', $response);
|
|
$contacts = substr($contacts, 0, -1);
|
|
|
|
$ramais_vai_tocar[] = $ramal;
|
|
if ($cmd != 'EXEC Dial ') {
|
|
$cmd .= '&';
|
|
}
|
|
//$cmd.= 'PJSIP/'.$ramal;
|
|
//$cmd.= '${PJSIP_DIAL_CONTACTS('.$ramal.')}';
|
|
$cmd .= $contacts;
|
|
|
|
$response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(SIP' . $ramal . ')}');
|
|
$contacts2 = str_replace('200 result=1 (', '', $response);
|
|
$contacts2 = substr($contacts2, 0, -1);
|
|
$cmd .= '&' . $contacts2;
|
|
}
|
|
$cmd .= ',30,Tt ""';
|
|
} else {
|
|
|
|
$response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(' . $ramal . ')}');
|
|
$contacts = str_replace('200 result=1 (', '', $response);
|
|
$contacts = substr($contacts, 0, -1);
|
|
|
|
$ramais_vai_tocar[] = $ramal;
|
|
//$cmd.= 'PJSIP/' . $ramal;
|
|
//$cmd.= '${PJSIP_DIAL_CONTACTS('.$ramal.')}';
|
|
$cmd .= $contacts;
|
|
|
|
$response = $this->agiRunCmd('GET FULL VARIABLE ${PJSIP_DIAL_CONTACTS(SIP' . $ramal . ')}');
|
|
$contacts2 = str_replace('200 result=1 (', '', $response);
|
|
$contacts2 = substr($contacts2, 0, -1);
|
|
$cmd .= '&' . $contacts2;
|
|
|
|
$ring_timeout = $this->hitpbxGetRingTimeoutFromRamal($ramal);
|
|
if (empty($ring_timeout)) {
|
|
$cmd .= ',30,Tt ""';
|
|
} else {
|
|
$cmd .= ',' . $ring_timeout . ',Tt ""';
|
|
}
|
|
}
|
|
|
|
/*
|
|
$uniqueid = agiVarGet('UNIQUEID');
|
|
$argssend = array();
|
|
$argssend["companyId"] = "1";
|
|
$argssend["crmPhone"] = $GLOBALS['callerid'];
|
|
$argssend["operation"] = "inboundAnsweredCall";
|
|
$argssend["crmAgent"] = $ramal;
|
|
$argssend["srcPhone"] = $GLOBALS['callerid'];
|
|
$argssend["dstPhone"] = $ramal;
|
|
$argssend["operationStatus"] = "update-answer";
|
|
$argssend["uniqueid"] = $uniqueid;
|
|
crmSend($argssend);
|
|
*/
|
|
|
|
// ...
|
|
$response = $this->agiRecordRamaisIfAuditoria(array('ramais' => $ramais_vai_tocar));
|
|
$response = $this->agiRunCmd($cmd);
|
|
// ...
|
|
|
|
//$argssend["operationStatus"] = "hangup";
|
|
//crmSend($argssend);
|
|
|
|
$cmd = 'GET VARIABLE DIALSTATUS';
|
|
$response = $this->agiRunCmd($cmd);
|
|
$explodido = explode("(", $response);
|
|
if (count($explodido) > 1) {
|
|
$return = substr($explodido[1], 0, -1);
|
|
if ($return != 'ANSWER') {
|
|
$cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""';
|
|
$response = $this->agiRunCmd($cmd);
|
|
$callback = $this->hitpbxGetCallbackFromRamal($ramal);
|
|
if ($callback == '1') {
|
|
$callerid = $this->agiVarGet('CALLERID');
|
|
$arr = array(
|
|
'ramal' => $ramal,
|
|
'numero' => $callerid
|
|
);
|
|
$this->agiAddCallback($arr);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
|
|
public function agiRunDialRamalGrupo($callgroup = '')
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog($callgroup);
|
|
|
|
$return = '';
|
|
|
|
$runNext = true;
|
|
|
|
$desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'ramalgrupo', 'value' => $callgroup));
|
|
if (count($desvio)) {
|
|
$runNext = false;
|
|
if ($desvio['shortname'] == 'queue') {
|
|
$queuestatus = $this->agiRunQueue(array('id' => $desvio['queue']));
|
|
if ($queuestatus == '') {
|
|
$return = 'ANSWER';
|
|
}
|
|
}
|
|
if ($desvio['shortname'] == 'ramal') {
|
|
$return = $this->agiRunDialRamal($desvio['ramal']);
|
|
}
|
|
if ($desvio['shortname'] == 'ramalgrupo') {
|
|
$return = $this->agiRunDialRamalGrupo($desvio['callgroup']);
|
|
}
|
|
if ($desvio['shortname'] == 'voicemail') {
|
|
$this->agiRunVoicemail($desvio['ramal']);
|
|
$return = 'ANSWER';
|
|
}
|
|
if ($desvio['shortname'] == 'numeroexterno') {
|
|
$this->agiRunDialNumeroExterno($desvio['numero']);
|
|
}
|
|
}
|
|
|
|
if ($runNext) {
|
|
|
|
$ramais_vai_tocar = array();
|
|
|
|
$cmd = 'EXEC Dial ';
|
|
$query = "SELECT ramal FROM tab_ramal WHERE callgroup = '" . mysqli_real_escape_string($this->globais['db'], $callgroup) . "'";
|
|
$query_result = mysqli_query($this->globais['db'], $query) or die(mysqli_error($this->globais['db']));
|
|
while ($resultLinha = mysqli_fetch_assoc($query_result)) {
|
|
if ($cmd != 'EXEC Dial ') {
|
|
$cmd .= '&';
|
|
}
|
|
$cmd .= 'PJSIP/' . $resultLinha['ramal'];
|
|
$ramais_vai_tocar[] = $resultLinha['ramal'];
|
|
}
|
|
$cmd .= ' ""';
|
|
|
|
$response = $this->agiRecordRamaisIfAuditoria(array('ramais' => $ramais_vai_tocar));
|
|
$response = $this->agiRunCmd($cmd);
|
|
|
|
$cmd = 'GET VARIABLE DIALSTATUS';
|
|
$response = $this->agiRunCmd($cmd);
|
|
$explodido = explode("(", $response);
|
|
if (count($explodido) > 1) {
|
|
$return = substr($explodido[1], 0, -1);
|
|
if ($return != 'ANSWER') {
|
|
$cmd = 'EXEC PLAYBACK /var/lib/asterisk/sounds/pt_BR/exten-unavail ""';
|
|
$response = $this->agiRunCmd($cmd);
|
|
}
|
|
}
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
|
|
public function agiRunQueue($args = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($args, true));
|
|
|
|
$return = '';
|
|
|
|
$args['id'] = isset($args['id']) ? $args['id'] : '';
|
|
$args['timeout'] = isset($args['timeout']) ? $args['timeout'] : '';
|
|
|
|
$runNext = true;
|
|
|
|
$cmd = 'SET VARIABLE __AGIQUEUEID "Q' . $args['id'] . '"';
|
|
$response = $this->agiRunCmd($cmd);
|
|
|
|
$queuenome = $this->hitpbxGetQueuenomeFromId($args['id']);
|
|
$cmd = 'SET VARIABLE __AGIQUEUENOME "' . $queuenome . '"';
|
|
$response = $this->agiRunCmd($cmd);
|
|
|
|
// teste
|
|
// $cmd = 'GET FULL VARIABLE ${QUEUE_WAITING_COUNT(' . $args['id'] . ')}';
|
|
// $cmd = 'GET FULL VARIABLE ${QUEUE_MEMBER(' . $args['id'] . ',ready)}';
|
|
// $response = agiRunCmd($cmd);
|
|
|
|
// $cmd = 'SET VARIABLE AGICALLBACKQUEUEID 32';
|
|
// $response = agiRunCmd($cmd);
|
|
// ...
|
|
|
|
// MONITOR_FILENAME=FILA_${STRFTIME(${EPOCH},,%Y-%m-%d_%H-%M-%S)}_${UNIQUEID}_${CALLERID(num)}_${EXTEN}
|
|
// $cmd = "SET VARIABLE MONITOR_FILENAME FILA_" . date("Y-m-d_H-i-s") . "_" . $GLOBALS['uniqueid'] . "_" . $GLOBALS['callerid'] . "_" . $GLOBALS['fgId'];
|
|
$cmd = "SET VARIABLE MONITOR_FILENAME QUEUE_" . date("Y-m-d") . "_" . date("H-i-s") . "_" . $this->globais['uniqueid'] . "_" . $this->globais['callerid'] . "_" . $this->globais['fgId'];
|
|
$response = $this->agiRunCmd($cmd);
|
|
// $cmd = "SET VARIABLE GLOBAL(AGIRECORDNAME) QUEUE_" . date("Y-m-d") . "_" . date("H-i-s") . "_" . $GLOBALS['uniqueid'] . "_" . $GLOBALS['callerid'] . "_" . $GLOBALS['fgId'];
|
|
$cmd = "SET VARIABLE __AGIRECORDNAME QUEUE_" . date("Y-m-d") . "_" . date("H-i-s") . "_" . $this->globais['uniqueid'] . "_" . $this->globais['callerid'] . "_" . $this->globais['fgId'];
|
|
$response = $this->agiRunCmd($cmd);
|
|
|
|
$desvio = $this->hitpbxGetDesvioFrom(array('tipo' => 'queue', 'value' => $args['id']));
|
|
|
|
if ($this->globais['isXampp']) {
|
|
$rnd = rand(1, 100);
|
|
if ($rnd >= 80) {
|
|
$desvio = array();
|
|
} else if ($rnd >= 60) {
|
|
$desvio = array('shortname' => 'queue', 'queue' => '3');
|
|
} else if ($rnd >= 40) {
|
|
$desvio = array('shortname' => 'ramal', 'ramal' => '1001');
|
|
} else if ($rnd >= 20) {
|
|
$desvio = array('shortname' => 'voicemail', 'ramal' => '1001');
|
|
} else {
|
|
$desvio = array('shortname' => 'numeroexterno', 'numero' => '551138118400');
|
|
}
|
|
}
|
|
|
|
if (count($desvio)) {
|
|
// logAdd("desvio: ".json_encode($desvio)."<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 = str_replace('>)', '', trim($explodido[1]));
|
|
$return = substr(trim($explodido[1]), 0, -2);
|
|
}
|
|
} else {
|
|
$explodido = explode("(", $response);
|
|
if (count($explodido) > 1) {
|
|
$explodido = explode(")", $explodido[1]);
|
|
$return = $explodido[0];
|
|
}
|
|
}
|
|
}
|
|
|
|
return $return;
|
|
}
|
|
|
|
public function agiVarSet($varName = '', $varValue = '')
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog($varName);
|
|
// $this->agiLog($varValue);
|
|
if ($this->globais['isXampp']) {
|
|
return '';
|
|
} else {
|
|
if ($varName == 'CALLERID') {
|
|
$varName = 'CALLERID(num)';
|
|
}
|
|
$return = $this->agiRunCmd('SET VARIABLE ' . $varName . ' ' . $varValue);
|
|
return $return;
|
|
}
|
|
}
|
|
|
|
// --------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
public function fgItemGetChildrenFrom($fgItemFrom = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($fgItemFrom, true));
|
|
$return = array();
|
|
reset($this->globais['fgItens']);
|
|
foreach ($this->globais['fgItens'] as $fgItem) {
|
|
if ($fgItem['cmd'] != 'start') {
|
|
if ($fgItem['idmaster'] == $fgItemFrom['id']) {
|
|
$return[$fgItem['id']] = $fgItem;
|
|
}
|
|
}
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
public function fgItemGetMasterFrom($fgItemFrom = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($fgItemFrom, true));
|
|
$return = array();
|
|
if (isset($this->globais['fgItens'][$fgItemFrom['idmaster']])) {
|
|
$return = $this->globais['fgItens'][$fgItemFrom['idmaster']];
|
|
}
|
|
return $return;
|
|
}
|
|
|
|
public function fgItemIsDialplanCheckvar($fgItem = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($fgItem, true));
|
|
if (isset($fgItem['defaultvalues']['cmd'])) {
|
|
if ($fgItem['defaultvalues']['cmd'] == 'dialplan.checkvar') {
|
|
return true;
|
|
}
|
|
}
|
|
if ($fgItem['cmd'] == 'dialplan.checkvar') {
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public function fgItemRun($fgItem = array())
|
|
{
|
|
// $this->agiLog("===> " . __FUNCTION__ . " <===");
|
|
// $this->agiLog(print_r($fgItem, true));
|
|
|
|
$this->logAdd("<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()
|
|
{
|
|
// $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;
|
|
}
|
|
|
|
$this->fgGet();
|
|
|
|
if (count($this->globais['fgItemStart']) > 0) {
|
|
|
|
$this->globais['arrDtmf'] = array(
|
|
'35' => '#',
|
|
'42' => '*',
|
|
'48' => '0',
|
|
'49' => '1',
|
|
'50' => '2',
|
|
'51' => '3',
|
|
'52' => '4',
|
|
'53' => '5',
|
|
'54' => '6',
|
|
'55' => '7',
|
|
'56' => '8',
|
|
'57' => '9'
|
|
);
|
|
|
|
if ($this->globais['isXampp']) {
|
|
|
|
$this->globais['callerid'] = '1138118400';
|
|
$this->globais['uniqueid'] = date("Ymd") . "." . date("His");
|
|
$this->globais['digitado'] = '';
|
|
|
|
$host = 'localhost';
|
|
$user = 'root';
|
|
$password = '';
|
|
$database = 'hitpbx_homologacao';
|
|
$port = '3306';
|
|
$this->globais['db'] = mysqli_connect($host, $user, $password, $database, $port) or die('Erro de conexão com o banco de dados');
|
|
mysqli_set_charset($this->globais['db'], 'utf8');
|
|
|
|
$this->fgItemRun($this->globais['fgItemStart']);
|
|
} else {
|
|
|
|
$host = '172.31.187.152';
|
|
$user = 'appuser';
|
|
$password = 'nmvP$x23Vzb@T%Su';
|
|
// $this->globais['hostname'] = gethostname();
|
|
if ($this->globais['hostname'] == 'hitpbx-001') {
|
|
$database = 'hitpbx-001';
|
|
} else {
|
|
$database = str_replace('hitpbx-', 'hitpbx_', $this->globais['hostname']);
|
|
}
|
|
$port = '6033';
|
|
$this->globais['db'] = mysqli_connect($host, $user, $password, $database, $port) or die('Erro de conexão com o banco de dados');
|
|
mysqli_set_charset($this->globais['db'], 'utf8');
|
|
|
|
/*
|
|
logAdd("111<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);
|
|
|
|
if (1 == 1) {
|
|
|
|
// Teste
|
|
$callerid = $this->agiVarGet('CALLERID');
|
|
$this->agiLog('callerid: ' . $callerid);
|
|
$arr = array(
|
|
'ramal' => '6999',
|
|
'numero' => $callerid
|
|
);
|
|
$this->agiAddCallback($arr);
|
|
|
|
} else {
|
|
$this->fgItemRun($this->globais['fgItemStart']);
|
|
}
|
|
|
|
// 1353461660|1353461627.33271|NONE|NONE|INFO|IVRHANGUP|
|
|
//$cmd = 'EXEC QUEUELOG NONE,' . $GLOBALS['uniqueid'] . ',NONE,NONE,INFO|IVRHANGUP';
|
|
//$response = agiRunCmd($cmd);
|
|
|
|
// $response = agiRunCmd('HANGUP');
|
|
|
|
}
|
|
}
|
|
|
|
/*
|
|
$this->teste();
|
|
$this->globais['nomeFila'] = '10';
|
|
$response = $this->tocarFila($this->globais['nomeFila'], 1);
|
|
echo "\n" . $response . "\n";
|
|
*/
|
|
}
|
|
}
|