|
|
<?php |
|
|
|
|
|
function ConectaAmi($host = '', $porta = '', $usuario = '', $senha = '', $events = 0) { |
|
|
$host = $host ? trim($host) : '127.0.0.1'; |
|
|
$porta = $porta ? trim($porta) : '5038'; |
|
|
$usuario = $usuario ? trim($usuario) : 'manager'; |
|
|
$senha = $senha ? trim($senha) : 'manager007'; |
|
|
$errno = ''; |
|
|
$errstr = ''; |
|
|
$timeout = 10; |
|
|
$socket = fsockopen($host, $porta, $errno, $errstr, $timeout); |
|
|
|
|
|
if ($socket) { |
|
|
$actionid = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "action: login\r\n", "ConectaAmi"); |
|
|
__fwrite($socket, "username: $usuario\r\n"); |
|
|
__fwrite($socket, "secret: $senha\r\n"); |
|
|
__fwrite($socket, sprintf("events: %s\r\n", $events ? "on" : "off")); |
|
|
__fwrite($socket, "ActionID: " . $actionid . "\r\n\r\n"); |
|
|
|
|
|
$i = 0; |
|
|
while (!feof($socket)) { |
|
|
$bufer = fgets($socket); |
|
|
|
|
|
if (stristr($bufer, "Authentication accepted")) { |
|
|
return $socket; |
|
|
} else if (stristr($bufer, "Authentication failed")) { |
|
|
fclose($socket); |
|
|
return false; |
|
|
} |
|
|
if ($i++ > MAX_TENTATIVA_RETORNO) { |
|
|
return false; |
|
|
} |
|
|
} |
|
|
} |
|
|
return false; |
|
|
} |
|
|
|
|
|
function ExecutaAmi($socket, $params) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
$start = 0; |
|
|
foreach ($params as $key => $value) { |
|
|
__fwrite($socket, "$key: $value\r\n", ($start++ ? '' : 'ExecutaAmi')); |
|
|
} |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'ExecutaAmi'); |
|
|
} |
|
|
|
|
|
function LoginAgenteAmi($socket, $channel, $modoAtende, $ramal, $dac, $matricula, $penalidade) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'LoginAgenteAmi'); |
|
|
__fwrite($socket, "Channel: $channel\r\n"); |
|
|
__fwrite($socket, "context: app-login\r\n"); |
|
|
__fwrite($socket, "exten: $modoAtende\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "callerid: $ramal\r\n"); |
|
|
__fwrite($socket, "variable: DAC=$dac,AGENT=$matricula,RAMAL=$ramal,PENALIDADE=$penalidade\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'LoginAgenteAmi'); |
|
|
} |
|
|
|
|
|
/* ASTERISK 1.4 |
|
|
function LogoffAgenteAmi($socket, $matricula) |
|
|
{ |
|
|
$rand = rand(000000000,9999999999); |
|
|
__fwrite($socket, "Action: agentlogoff\r\n", 'LogoffAgenteAmi'); |
|
|
__fwrite($socket, "agent: $matricula\r\n"); |
|
|
__fwrite($socket, "soft: false\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'LogoffAgenteAmi'); |
|
|
} |
|
|
*/ |
|
|
|
|
|
function LogoffAgenteAmi($socket, $matricula, $ramal, $dac) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: agentlogoff\r\n", 'LogoffAgenteAmi'); |
|
|
__fwrite($socket, "agent: $matricula\r\n"); |
|
|
__fwrite($socket, "soft: false\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'LogoffAgenteAmi'); |
|
|
} |
|
|
|
|
|
function AddFilaAmi($socket, $dac, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: queueadd\r\n", 'AddFilaAmi'); |
|
|
__fwrite($socket, "queue: $dac\r\n"); |
|
|
__fwrite($socket, "interface: Agent/$matricula\r\n"); |
|
|
__fwrite($socket, "penaly: 1\r\n"); |
|
|
__fwrite($socket, "paused: true\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'AddFilaAmi'); |
|
|
} |
|
|
|
|
|
function RemFilaAmi($socket, $dac, $matricula, $ramal) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: queueremove\r\n", 'LogoffAgenteAmi'); |
|
|
__fwrite($socket, "queue: $dac\r\n"); |
|
|
__fwrite($socket, "interface: Local/$ramal@app-callcenter/n\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'RemFilaAmi'); |
|
|
} |
|
|
|
|
|
function AddPausaAmi($socket, $matricula, $ramal) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: queuepause\r\n", 'AddPausaAmi'); |
|
|
// __fwrite($socket, "interface: Agent/$matricula\r\n"); |
|
|
__fwrite($socket, "interface: Local/$ramal@app-callcenter/n\r\n"); |
|
|
__fwrite($socket, "paused: true\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'AddPausaAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function RemPausaAmi($socket, $matricula, $ramal) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: queuepause\r\n", 'RemPausaAmi'); |
|
|
// __fwrite($socket, "interface: Agent/$matricula\r\n"); |
|
|
__fwrite($socket, "interface: Local/$ramal@app-callcenter/n\r\n"); |
|
|
__fwrite($socket, "paused: false\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'RemPausaAmi'); |
|
|
} |
|
|
|
|
|
function DesligarAmi($socket, $channelAgente) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: hangup\r\n", 'DesligarAmi'); |
|
|
__fwrite($socket, "Channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'DesligarAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function DiscarCallAmi($socket, $channelAgente, $matricula, $numDisc, $ramal, $contextoRamal = "padrao", $codigo = null) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Originate\r\n", 'DiscarCallAmi'); |
|
|
__fwrite($socket, "Channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "Context: $contextoRamal\r\n"); |
|
|
__fwrite($socket, "Exten: $numDisc\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "Callerid: $ramal\r\n"); |
|
|
//__fwrite($socket, "variable: MATRICULA=$matricula,TIPO-DISCAGEM=APLICACAO,CONTEXTORAMAL=$contextoRamal,PERMISSAO=OK\r\n"); |
|
|
if ($codigo) { |
|
|
__fwrite($socket, "variable: RAMAL=$ramal,CONTEXTORAMAL=$contextoRamal,TIPODISCAGEM=AGENTE,CODIGOPARAM=$codigo\r\n"); |
|
|
} else { |
|
|
__fwrite($socket, "variable: RAMAL=$ramal,CONTEXTORAMAL=$contextoRamal,TIPODISCAGEM=AGENTE\r\n"); |
|
|
} |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'DiscarCallAmi'); |
|
|
} |
|
|
|
|
|
function DiscarDiretoAmi($socket, $channel, $numDisc, $ramal) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Originate\r\n", 'DiscarDiretoAmi'); |
|
|
__fwrite($socket, "Channel: $channel\r\n"); //Ramal local sip/1001 |
|
|
__fwrite($socket, "Context: padrao\r\n"); |
|
|
__fwrite($socket, "Exten: $numDisc\r\n"); //numero a discar |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "Callerid: $ramal\r\n"); //Ramal local 1001 |
|
|
__fwrite($socket, "Timeout: 30000\r\n"); |
|
|
__fwrite($socket, "Variable: TIPO-DISCAGEM=APLICACAO,PERMISSAO=OK\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
|
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'DiscarDiretoAmi'); |
|
|
} |
|
|
|
|
|
function AlarmeAmi($socket, $channel, $numDisc, $ramal, $audio = 'appsounds/alarmeapi') { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Originate\r\n", 'AlarmeAmi'); |
|
|
__fwrite($socket, "Channel: Local/$numDisc@padrao\r\n"); //Ramal local sip/1001 |
|
|
__fwrite($socket, "Application: Playback\r\n"); |
|
|
__fwrite($socket, "Data: $audio\r\n"); |
|
|
__fwrite($socket, "Context: default\r\n"); |
|
|
__fwrite($socket, "Exten: s\r\n"); //numero a discar |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "Callerid: $ramal\r\n"); //Ramal local 1001 |
|
|
__fwrite($socket, "Timeout: 30000\r\n"); |
|
|
__fwrite($socket, "Variable: TIPO-DISCAGEM=APLICACAO,PERMISSAO=OK\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
|
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'AlarmeAmi'); |
|
|
} |
|
|
|
|
|
function CallbackAmi($socket, $destino, $numDisc, $ramal) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Originate\r\n", 'CallbackAmi'); |
|
|
__fwrite($socket, "Channel: Local/$numDisc@padrao\r\n"); //Nro a discar |
|
|
__fwrite($socket, "Context: padrao\r\n"); |
|
|
__fwrite($socket, "Exten: $destino\r\n"); // ( fila ) |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "Callerid: $numDisc\r\n"); //Ramal local 1001 |
|
|
__fwrite($socket, "Timeout: 30000\r\n"); |
|
|
__fwrite($socket, "Variable: RAMAL=$ramal\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
|
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'CallbackAmi'); |
|
|
} |
|
|
|
|
|
function LigueGratisAmi($socket) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Originate\r\n", 'CallbackAmi'); |
|
|
__fwrite($socket, sprintf("Channel: Local/%s@padrao\r\n", GetNumeroLigueGratis())); //Nro a discar |
|
|
__fwrite($socket, "Context: ext-anuncios\r\n"); |
|
|
__fwrite($socket, sprintf("Exten: %s\r\n", GetAnuncioLigueGratis())); // ( fila ) |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, sprintf("Callerid: %s\r\n", GetNumeroLigueGratis())); //Ramal local 1001 |
|
|
__fwrite($socket, "Timeout: 30000\r\n"); |
|
|
__fwrite($socket, sprintf("Variable: RAMAL=%s,LIGUE-ME=%s\r\n", GetRamalLigueGratis(), GetNumeroLigueGratis())); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
|
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'CallbackAmi'); |
|
|
} |
|
|
|
|
|
function TransferirAmi($socket, $channelTransf, $numDisc) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: redirect\r\n", 'TransferirAmi'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "Context: ext-transferencia\r\n"); |
|
|
__fwrite($socket, "Exten: $numDisc\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TransferirAmi'); |
|
|
} |
|
|
|
|
|
function TransferirPesquisaAmi($socket, $channelTransf, $idPesqisa, $matricula = '') { |
|
|
if ($matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Setvar\r\n", 'SetVarPesquisa'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "variable: PESQUISA_MATRICULA\r\n"); |
|
|
__fwrite($socket, "value: $matricula\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
VerificaRetornoSocket($socket, "Success", "Error", 'SetVarPesquisa'); |
|
|
} |
|
|
|
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: redirect\r\n", 'TransferirPesquisaAmi'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "Context: $idPesqisa\r\n"); |
|
|
__fwrite($socket, "Exten: s\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TransferirPesquisaAmi'); |
|
|
} |
|
|
|
|
|
function IncluiAgenteAmi($socket) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: command\r\n", 'IncluiAgenteAmi'); |
|
|
__fwrite($socket, "command: module reload app_agent_pool.so\r\n"); |
|
|
__fwrite($socket, "Context: ext-transferencia\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'IncluiAgenteAmi'); |
|
|
} |
|
|
|
|
|
function TesteUrlAmi($socket) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: ping\r\n", 'TesteUrlAmi'); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "pong", "Error", 'TesteUrlAmi'); |
|
|
} |
|
|
|
|
|
function MonitorAgentsAmi() { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action:agents\r\n", 'MonitorAgentsAmi'); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'MonitorAgentsAmi'); |
|
|
} |
|
|
|
|
|
function IntercalarAmi($socket, $canalIntercalar, $ramalIntercalar, $rmalDestinoIntercalar) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'IntercalarAmi'); |
|
|
__fwrite($socket, "Channel: $canalIntercalar\r\n"); |
|
|
__fwrite($socket, "Context: call-intercala\r\n"); |
|
|
__fwrite($socket, "Exten: s\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "CallerID: $ramalIntercalar\r\n"); |
|
|
__fwrite($socket, "variable: RAMAL=$ramalIntercalar,DESTINO=$rmalDestinoIntercalar\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'IntercalarAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
//function MonitorarAmi($socket, $canalIntercalar, $ramalIntercalar, $rmalDestinoIntercalar) |
|
|
function MonitorarAmi($socket, $params) { |
|
|
// |
|
|
// Chaves array params: |
|
|
// "matricula_supervisor", "matricula_monitorado", "dac_monitorado", "setido_chamada", "nivel_lgpd_supevisor", "nivel_lgpd_monitorado", "uniqueid_monitorado", |
|
|
// "ramal_supervisor", "ramal_monitorado", "canal_monitorado", "canal_agente", "canal_supervisor" , "ramal_supervisor" |
|
|
// |
|
|
|
|
|
$rand = rand(000000000, 9999999999); |
|
|
$varLgpd = $params["var_lgpd"]; |
|
|
if ((int)$varLgpd === 0) { |
|
|
|
|
|
$canalIntercalar = $params['canal_supervisor']; |
|
|
$ramalIntercalar = $params['ramal_supervisor']; |
|
|
$rmalDestinoIntercalar = $params['ramal_monitorado']; |
|
|
|
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'MonitorarAmi'); |
|
|
__fwrite($socket, "Channel: $canalIntercalar\r\n"); |
|
|
__fwrite($socket, "Context: call-monitora\r\n"); |
|
|
__fwrite($socket, "Exten: s\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "CallerID: $ramalIntercalar\r\n"); |
|
|
__fwrite($socket, "variable: RAMAL=$ramalIntercalar,DESTINO=$rmalDestinoIntercalar,LGPD_VAR=0\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'MonitorarAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
$sentidoChamada = (strtoupper($params['setido_chamada']) == 'E' ? 'recebida' : 'originada' ); |
|
|
$canalAgente = ($params['setido_chamada'] == 'E') ? $params['canal_monitorado'] : $params['canal_agente']; |
|
|
$paramLgpd = GetParamLgpd($varLgpd); |
|
|
|
|
|
$paramLgpdContent = $paramLgpd['lgpdm_content']; |
|
|
$nvSuper = isset($paramLgpdContent['nivel_lgpd_supevisor']) ? $paramLgpdContent['nivel_lgpd_supevisor'] : 0; |
|
|
$nvMonitorado = isset($paramLgpdContent['nivel_lgpd_monitorado']) ? $paramLgpdContent['nivel_lgpd_monitorado'] : 0; |
|
|
$permiteSupervisao = $nvSuper > 0 ? 'SIM' : 'NAO'; |
|
|
$enviaAviso = ($nvSuper >= $nvMonitorado) ? 'SIM' : 'NAO'; |
|
|
|
|
|
__fwrite($socket, "Action: originate\r\n", 'MonitorarAmi'); |
|
|
__fwrite($socket, sprintf("Channel: %s\r\n", $params['canal_supervisor'])); |
|
|
__fwrite($socket, "Exten: s\r\n"); |
|
|
__fwrite($socket, "Context: call-intercala-lgpd-verifica\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, sprintf("CallerID: %s\r\n", $params['ramal_supervisor'])); |
|
|
//__fwrite($socket, sprintf("variable: RAMAL=%s|DESTINO=%s|LGPD_VAR=%s\r\n", $params['ramal_supervisor'], $params['ramal_monitorado'], $varLgpd)); |
|
|
__fwrite($socket, sprintf("Variable: RAMAL_AGENTE=%s,CANAL_AGENTE=%s,LGPD=%s,FEATURES=%s,ENVIA_AVISO_MONITORADO=%s,LGPD_VAR=%s\r\n", $params['ramal_monitorado'], $canalAgente, $permiteSupervisao, $sentidoChamada, $enviaAviso, $varLgpd)); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'MonitorarAmi'); |
|
|
return $ret; |
|
|
|
|
|
/* |
|
|
|
|
|
;CHAMADA ORIGINADA - UTILIZAR O CANAL DO AGENTE (campo: canal_agente da pbx_supervisor_agentes) |
|
|
Action: Originate |
|
|
Channel: SIP/8517 |
|
|
Exten: s |
|
|
Context: call-intercala-lgpd-verifica |
|
|
Priority: 1 |
|
|
Callerid: 8517 |
|
|
Variable: RAMAL_AGENTE=8511|CANAL_AGENTE=SIP/8511-000000a3|LGPD=SIM|FEATURES=originada |
|
|
|
|
|
|
|
|
;CHAMADA RECEBIDA - UTILIZAR O CANAL DO CLIENTE (campo: canal da pbx_supervisor_agentes) |
|
|
Action: Originate |
|
|
Channel: SIP/8517 ;ramal intercala - supervisor |
|
|
Exten: s |
|
|
Context: call-intercala-lgpd-verifica |
|
|
Priority: 1 |
|
|
Callerid: 8517 ; ramal intercala - supervisor |
|
|
Variable: RAMAL_AGENTE=8515|CANAL_AGENTE=SIP/LINHA_E1-00000098|LGPD=SIM|FEATURES=recebida |
|
|
|
|
|
*/ |
|
|
} |
|
|
|
|
|
function __MonitorarAmi($socket, $canalIntercalar, $ramalIntercalar, $rmalDestinoIntercalar) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'MonitorarAmi'); |
|
|
__fwrite($socket, "Channel: $canalIntercalar\r\n"); |
|
|
__fwrite($socket, "Context: call-monitora\r\n"); |
|
|
__fwrite($socket, "Exten: s\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "CallerID: $ramalIntercalar\r\n"); |
|
|
__fwrite($socket, "variable: RAMAL=$ramalIntercalar|DESTINO=$rmalDestinoIntercalar\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'MonitorarAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function ReloadUraAmi($socket) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: command\r\n", 'ReloadUraAmi'); |
|
|
__fwrite($socket, "command: dialplan reload\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'ReloadUraAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function ReloadFilaAmi($socket) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: command\r\n", 'ReloadFilaAmi'); |
|
|
__fwrite($socket, "command: module reload app_queue.so\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'ReloadFilaAmi'); |
|
|
} |
|
|
|
|
|
function IniciaGravacaoAmi($socket, $channelTransf, $fileAudio, $fileAudioTipo) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: monitor\r\n", 'IniciaGravacaoAmi'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "file: $fileAudio\r\n"); |
|
|
__fwrite($socket, "format: $fileAudioTipo\r\n"); |
|
|
__fwrite($socket, "mix: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'IniciaGravacaoAmi'); |
|
|
} |
|
|
|
|
|
function FinalizaGravacaoAmi($socket, $channelTransf) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: stopmonitor\r\n", 'FinalizaGravacaoAmi'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'FinalizaGravacaoAmi'); |
|
|
} |
|
|
|
|
|
function IniciaPausaGravacaoAmi($socket, $channelTransf) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: pausemonitor\r\n", 'IniciaPausaGravacaoAmi'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'IniciaPausaGravacaoAmi'); |
|
|
} |
|
|
|
|
|
function FinalizaPausaGravacaoAmi($socket, $channelTransf) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: unpausemonitor\r\n", 'FinalizaPausaGravacaoAmi'); |
|
|
__fwrite($socket, "Channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'FinalizaPausaGravacaoAmi'); |
|
|
} |
|
|
|
|
|
function MuteSetVarAmi($socket, $channelAgente) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Setvar\r\n", 'MuteSetVarAmi'); |
|
|
__fwrite($socket, "Channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "variable: MUTE\r\n"); |
|
|
__fwrite($socket, "value: V\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'MuteSetVarAmi'); |
|
|
} |
|
|
|
|
|
function MuteAddCanaisAmi($socket, $ramal, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'MuteAddCanaisAmi'); |
|
|
__fwrite($socket, "Channel: Local/s@app-atende\r\n"); |
|
|
__fwrite($socket, "context: app-mute\r\n"); |
|
|
__fwrite($socket, "exten: s\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "variable: RAMAL=$ramal,AGENTE=$matricula\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'MuteAddCanaisAmi'); |
|
|
} |
|
|
|
|
|
function MuteAddAgenteAmi($socket, $salaConferencia) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: meetmemute\r\n", 'MuteAddAgenteAmi'); |
|
|
__fwrite($socket, "meetme: $salaConferencia\r\n"); |
|
|
__fwrite($socket, "usernum: 2\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'MuteAddAgenteAmi'); |
|
|
} |
|
|
|
|
|
function MuteRemAgenteAmi($socket, $salaConferencia) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: meetmeunmute\r\n", 'MuteRemAgenteAmi'); |
|
|
__fwrite($socket, "meetme: $salaConferencia\r\n"); |
|
|
__fwrite($socket, "usernum: 2\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'MuteRemAgenteAmi'); |
|
|
} |
|
|
|
|
|
function PenduloSetVarAmi($socket, $channelAgente) { |
|
|
return true; |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Setvar\r\n", 'PenduloSetVarAmi'); |
|
|
__fwrite($socket, "channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "variable: ESPERA\r\n"); |
|
|
__fwrite($socket, "value: V\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'PenduloSetVarAmi'); |
|
|
} |
|
|
|
|
|
//function PenduloAddCanaisAmi($socket, $ramal, $matricula, $channelTransf, $numDisc, $channelAgente, $automatico = false) { |
|
|
// $rand = rand(000000000, 9999999999); |
|
|
// __fwrite($socket, "Action: redirect\r\n", 'PenduloAddCanaisAmi'); |
|
|
// __fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
// if (!$automatico) { |
|
|
// __fwrite($socket, "extrachannel: $channelAgente\r\n"); |
|
|
// } |
|
|
// __fwrite($socket, "context: app-espera\r\n"); |
|
|
// __fwrite($socket, "exten: $matricula$numDisc\r\n"); |
|
|
// __fwrite($socket, "priority: 1\r\n"); |
|
|
// __fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
// $ret = VerificaRetornoSocket($socket, "Success", "Error", 'PenduloAddCanaisAmi'); |
|
|
// return $ret; |
|
|
//} |
|
|
|
|
|
function PenduloAddCanaisAmi($socket, $ramal, $matricula, $channelTransf, $numDisc, $channelAgente, $automatico = false) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Atxfer\r\n", 'PenduloAddCanaisAmi'); |
|
|
__fwrite($socket, "channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "context: app-consulta\r\n"); |
|
|
__fwrite($socket, "exten: $numDisc\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'PenduloAddCanaisAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function PenduloRemCanaisAmi($socket, $ramal, $matricula, $channelTransf) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: redirect\r\n", 'PenduloRemCanaisAmi'); |
|
|
__fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "context: app-atendentes\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'PenduloRemCanaisAmi'); |
|
|
} |
|
|
|
|
|
function PenduloAddMuteAmi($socket, $channelMute, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'PenduloAddMuteAmi'); |
|
|
__fwrite($socket, "channel: $channelMute\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "context: ext-app-espera\r\n"); |
|
|
__fwrite($socket, "priority: agente\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'PenduloAddMuteAmi'); |
|
|
} |
|
|
|
|
|
function PenduloRemMuteAmi($socket, $channelMute, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'PenduloRemMuteAmi'); |
|
|
__fwrite($socket, "channel: $channelMute\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "context: ext-app-espera\r\n"); |
|
|
__fwrite($socket, "priority: cliente\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'PenduloRemMuteAmi'); |
|
|
} |
|
|
|
|
|
function TrConsultaSetVarAmi($socket, $channelAgente) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Setvar\r\n", 'TrConsultaSetVarAmi'); |
|
|
__fwrite($socket, "channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "variable: TRANSFER\r\n"); |
|
|
__fwrite($socket, "value: V\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaSetVarAmi'); |
|
|
} |
|
|
|
|
|
function TrConsultaEsperaAmi($socket, $ramal, $matricula, $numDisc, $contextoRamal) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'TrConsultaEsperaAmi'); |
|
|
__fwrite($socket, "channel: Local/$ramal@app-callcenter/n\r\n"); |
|
|
__fwrite($socket, "context: app-transfere\r\n"); |
|
|
__fwrite($socket, "exten: $matricula$numDisc\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "callerid: $ramal\r\n"); |
|
|
__fwrite($socket, "variable: CONSULTA=OK\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaEsperaAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function TrConsultaTransfereAmi($socket, $channelTransfConsulta, $matricula, $channelAgente) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'TrConsultaTransfereAmi'); |
|
|
__fwrite($socket, "channel: $channelTransfConsulta\r\n"); |
|
|
__fwrite($socket, "context: app-transfere\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "priority: transfere\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaTransfereAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
//function TrConsultaTransfereAbortaAmi($socket, $channelAgente, $matricula) { |
|
|
// $rand = rand(000000000, 9999999999); |
|
|
// __fwrite($socket, "Action: Redirect\r\n", 'TrConsultaTransfereAbortaAmi'); |
|
|
// __fwrite($socket, "channel: $channelAgente\r\n"); |
|
|
// __fwrite($socket, "context: app-transfere\r\n"); |
|
|
// __fwrite($socket, "exten: $matricula\r\n"); |
|
|
// __fwrite($socket, "priority: transfere\r\n"); |
|
|
// __fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
// $ret = VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaTransfereAbortaAmi'); |
|
|
// return $ret; |
|
|
//} |
|
|
|
|
|
function TrConsultaTransfereAbortaAmi($socket, $channelAgente, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: CancelAtxfer\r\n", 'TrConsultaTransfereAbortaAmi'); |
|
|
__fwrite($socket, "channel: $channelAgente\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaTransfereAbortaAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function TrConsultaLiberaAgenteAmi($socket, $channelTransf) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'TrConsultaLiberaAgenteAmi'); |
|
|
__fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "exten: transfer\r\n"); |
|
|
__fwrite($socket, "context: ext-app-transfer\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaLiberaAgenteAmi'); |
|
|
} |
|
|
|
|
|
function TrConsultaConferenciaAmi($socket, $channelTransfConsulta, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'TrConsultaConferenciaAmi'); |
|
|
__fwrite($socket, "channel: $channelTransfConsulta\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "context: ext-app-transfer\r\n"); |
|
|
__fwrite($socket, "priority: conferencia\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TrConsultaConferenciaAmi'); |
|
|
} |
|
|
|
|
|
function SetVarAmi($socket, $channelTransf, $ramal, $channelAgente, $matricula) { |
|
|
// $rand = rand(000000000, 9999999999); |
|
|
// __fwrite($socket, "Action: Setvar\r\n", 'SetVarAmi'); |
|
|
// __fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
// __fwrite($socket, "variable: CONSULTANDO\r\n"); |
|
|
// __fwrite($socket, "value: SIM\r\n"); |
|
|
// __fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
// $ret = VerificaRetornoSocket($socket, "Success", "Error", 'SetVarAmi-1'); |
|
|
// $ret = ($ret == "ok"); |
|
|
// if ($ret) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Setvar\r\n"); |
|
|
__fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "variable: CALLERID(NUM)\r\n"); |
|
|
__fwrite($socket, "value: $ramal\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
// $ret = VerificaRetornoSocket($socket, "Success", "Error", 'SetVarAmi-2'); |
|
|
// } |
|
|
// |
|
|
// if ($ret) { |
|
|
// $rand = rand(000000000, 9999999999); |
|
|
// __fwrite($socket, "Action: Setvar\r\n", 'SetVarAmi'); |
|
|
// __fwrite($socket, "channel: $channelAgente\r\n"); |
|
|
// __fwrite($socket, "variable: MATRICULA-DESTINO\r\n"); |
|
|
// __fwrite($socket, "value: $matricula\r\n"); |
|
|
// __fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
// $ret = VerificaRetornoSocket($socket, "Success", "Error", 'SetVarAmi-2'); |
|
|
// } |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function ExecutaAgtAmi($socket, $cmdAmi) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
$var = ''; |
|
|
$start = 0; |
|
|
foreach ($cmdAmi as $value) { |
|
|
$var = trim($value); |
|
|
$var = "$var\r\n"; |
|
|
__fwrite($socket, $var, ($start++ ? '' : 'ExecutaAgtAmi')); |
|
|
} |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
$ret = VerificaRetornoSocket($socket, "Success", "Error", 'ExecutaAgtAmi'); |
|
|
return $ret; |
|
|
} |
|
|
|
|
|
function TrMuteClienteAmi($socket, $channelTransf, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'TrMuteClienteAmi'); |
|
|
__fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "context: app-mute\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TrMuteClienteAmi'); |
|
|
} |
|
|
|
|
|
function AlertaAgtAmi($socket, $channel, $ramalLogado, $audio = 'appsounds/chamada_nao_classificada') { |
|
|
/* |
|
|
* Se atendimento manual use channel do ramal do agente(SIP/8285), atumatico |
|
|
* use o canal do agente(Agent/1000). |
|
|
*/ |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Originate\r\n", 'AlertaAgtAmi'); |
|
|
__fwrite($socket, "channel: $channel\r\n"); |
|
|
__fwrite($socket, "Application: Playback\r\n"); |
|
|
__fwrite($socket, "Data: $audio\r\n"); |
|
|
__fwrite($socket, "Callerid: $ramalLogado\r\n"); |
|
|
__fwrite($socket, "Variable: AVISO=OK\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'AlertaAgtAmi'); |
|
|
} |
|
|
|
|
|
function TrMuteAtendenteAmi($socket, $ramal, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: originate\r\n", 'TrMuteAtendenteAmi'); |
|
|
__fwrite($socket, "channel: Agent/$matricula\r\n"); |
|
|
__fwrite($socket, "context: app-mute\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "priority: sala\r\n"); |
|
|
__fwrite($socket, "callerid: $ramal\r\n"); |
|
|
__fwrite($socket, "variable: MATRICULA=$matricula,OPTS=m\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TrMuteAtendenteAmi'); |
|
|
} |
|
|
|
|
|
function TrRemMuteAmi($socket, $channelTransf, $matricula) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "Action: Redirect\r\n", 'TrRemMuteAmi'); |
|
|
__fwrite($socket, "channel: $channelTransf\r\n"); |
|
|
__fwrite($socket, "exten: $matricula\r\n"); |
|
|
__fwrite($socket, "context: app-atendentes\r\n"); |
|
|
__fwrite($socket, "priority: 1\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'TrRemMuteAmi'); |
|
|
} |
|
|
|
|
|
function VerificaRetornoSocket($socket, $sucess, $erro, $function = '') { |
|
|
__fwrite(null, '', "VerificaRetornoSocket: $function", true); |
|
|
$i = 0; |
|
|
while (!feof($socket)) { |
|
|
$bufer = trim(@fgets($socket)); |
|
|
|
|
|
/* |
|
|
* Envia para o log. |
|
|
*/ |
|
|
if ($bufer) { |
|
|
__fwrite(null, $bufer . "\n", '', true); |
|
|
} |
|
|
|
|
|
if (stristr($bufer, $sucess)) { |
|
|
return "ok"; |
|
|
} else if (stristr($bufer, $erro)) { |
|
|
return 'Error'; |
|
|
} else if (stristr($bufer, "--END COMMAND--")) { |
|
|
return "ok"; |
|
|
} |
|
|
|
|
|
if ($i++ > MAX_TENTATIVA_RETORNO) |
|
|
break; |
|
|
} |
|
|
|
|
|
return 'Error'; |
|
|
} |
|
|
|
|
|
function AnalisaRetornoSocket($socket) { |
|
|
$i = 0; |
|
|
while (!feof($socket)) { |
|
|
$bufer = @fgets($socket); |
|
|
echo $bufer; |
|
|
flush(); |
|
|
$i++; |
|
|
} |
|
|
} |
|
|
|
|
|
function DesconectaAmi($socket) { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
__fwrite($socket, "action: logoff\r\n", 'DesconectaAmi'); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
fclose($socket); |
|
|
} |
|
|
|
|
|
function InfoRamalAmi($socket, $ramal) { |
|
|
$infoRamal = array('direcao' => '', 'status' => 'LIVRE', 'duracao' => '00:00:00', 'numero' => ''); |
|
|
$params = array('action' => 'command', 'command' => 'core show channels verbose'); |
|
|
$result = GetAmi($socket, $params); |
|
|
$map = array('channel' => array(0, 21), 'context' => array(21, 21), 'extension' => array(42, 17), 'prio' => array(59, 5), 'state' => array(64, 8), 'application' => array(72, 13), 'data' => array(85, 26), 'callerid' => array(111, 16), 'duration' => array(127, 9), 'accountcode' => array(136, 12), 'bridgedto' => array(148, 16)); |
|
|
$linhas = array(); |
|
|
$start = 0; |
|
|
foreach ($result as $line) { |
|
|
if ($start) { |
|
|
if (stripos($line, "active channels") !== false) { |
|
|
break; |
|
|
} |
|
|
$linha = array(); |
|
|
foreach ($map as $key => $pos) { |
|
|
$linha[$key] = trim(substr($line, $pos[0], $pos[1])); |
|
|
} |
|
|
$linhas[] = $linha; |
|
|
} |
|
|
$start = $start || ((stripos($line, "Channel") !== false) && (stripos($line, "Extension") !== false)); |
|
|
} |
|
|
|
|
|
if (!count($linhas)) { |
|
|
return $infoRamal; |
|
|
} |
|
|
$info = false; |
|
|
$ocupado = false; |
|
|
|
|
|
/* |
|
|
* Identificando o ramal; |
|
|
*/ |
|
|
foreach ($linhas as $linha) { |
|
|
if ($ramal == $linha['callerid']) { |
|
|
$status = strtoupper(trim($linha['state'])); |
|
|
$infoRamal['direcao'] = $linha['application'] == 'Dial' ? 'S' : 'E'; |
|
|
$infoRamal['status'] = $status == 'UP' ? 'OCUPADO' : 'CHAMANDO'; |
|
|
$infoRamal['duracao'] = $linha['duration']; |
|
|
$infoRamal['ponte'] = $linha['bridgedto']; |
|
|
$infoRamal['dados'] = $linha['data']; |
|
|
$ocupado = $status == 'UP'; |
|
|
$info = true; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
/* |
|
|
* Ramal n<EFBFBD>o esta setado retorna default; |
|
|
*/ |
|
|
if ($info === false) { |
|
|
return $infoRamal; |
|
|
} |
|
|
|
|
|
/* |
|
|
* Identificando o ramal; |
|
|
*/ |
|
|
foreach ($linhas as $linha) { |
|
|
/* |
|
|
* Informacoes do ramal |
|
|
*/ |
|
|
$entrada = $infoRamal['direcao'] == 'E'; |
|
|
$ponte = trim($infoRamal['ponte']); |
|
|
$dataRamal = trim($infoRamal['dados']); |
|
|
/* |
|
|
* Informa<EFBFBD><EFBFBD>es do canal corrente; |
|
|
*/ |
|
|
$canal = trim($linha['channel']); |
|
|
$data = trim($linha['data']); |
|
|
$numero = trim($linha['callerid']); |
|
|
|
|
|
if ($ocupado && ($ponte == $canal)) { |
|
|
$infoRamal['numero'] = $numero; |
|
|
break; |
|
|
} else if (!$entrada && (strpos($dataRamal, $numero) !== false)) { |
|
|
$infoRamal['numero'] = $numero; |
|
|
} else if ($entrada && (strpos($data, $ramal) !== false)) { |
|
|
$infoRamal['numero'] = $numero; |
|
|
} |
|
|
} |
|
|
|
|
|
return array_slice($infoRamal, 0, 4, true); |
|
|
} |
|
|
|
|
|
function EnviaSmsAmi($socket, $channel, $destino, $texto) { |
|
|
/* |
|
|
Action: Originate |
|
|
Channel: Local/100@app-envia-sms |
|
|
Async: true |
|
|
Variable: SMS_TRONCO_ENVIO=b1c0|SMS_DESTINO=6599893984|SMS_MENSAGEM=TESTE API SIMPLES IP SMS|SMS_SIP_ID=09876 |
|
|
ActionID:09876 |
|
|
*/ |
|
|
//$rand = rand(000000000,9999999999); |
|
|
$rand = time(); |
|
|
$GLOBALS["SSrand"] = $rand; |
|
|
__fwrite($socket, "Action: Originate\r\n", 'EnviaSmsAmi'); |
|
|
__fwrite($socket, "Channel: Local/100@app-envia-sms\r\n"); |
|
|
__fwrite($socket, "Exten: s\r\n"); |
|
|
__fwrite($socket, "Context: app-atende-sms\r\n"); |
|
|
__fwrite($socket, "Priority: 1\r\n"); |
|
|
__fwrite($socket, "Timeout: 60000\r\n"); |
|
|
__fwrite($socket, "Variable: SMS_TRONCO_ENVIO=$channel,SMS_DESTINO=$destino,SMS_MENSAGEM=$texto,SMS_SIP_ID=$rand\r\n"); |
|
|
__fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
|
|
|
return VerificaRetornoSocket($socket, "Success", "Error", 'EnviaSmsAmi'); |
|
|
} |
|
|
|
|
|
function GetAmi($socket, $params, $end = '--END COMMAND--') { |
|
|
$rand = rand(000000000, 9999999999); |
|
|
$start = 0; |
|
|
$write = 0; |
|
|
|
|
|
foreach ($params as $key => $value) { |
|
|
$write = fwrite($socket, "$key: $value\r\n"); |
|
|
if (!$write) |
|
|
return false; |
|
|
} |
|
|
|
|
|
fwrite($socket, "ActionID: $rand\r\n\r\n"); |
|
|
if (!$write) |
|
|
return false; |
|
|
|
|
|
$result = array(); |
|
|
while (!feof($socket)) { |
|
|
$line = trim(fgets($socket)); |
|
|
if ($line) |
|
|
$result[] = $line; |
|
|
if (stripos($line, $end) !== false) |
|
|
break; |
|
|
} |
|
|
|
|
|
return $result; |
|
|
} |
|
|
|
|
|
function __fwrite($socket, $value, $function = '', $logOnly = false) { |
|
|
global $debugAmi, $errorMode; |
|
|
|
|
|
if (!$logOnly) { |
|
|
$wSck = fwrite($socket, $value); |
|
|
if ($errorMode && !$wSck) { |
|
|
GeraExcept("N<EFBFBD>o foi poss<EFBFBD>vel gravar no socket!"); |
|
|
} |
|
|
} |
|
|
|
|
|
if ($debugAmi) { |
|
|
$login = "anonimo"; |
|
|
if (function_exists('IsUserConnect')) { |
|
|
$login = IsUserConnect() ? $_SESSION["SSlogin"] : "anonimo"; |
|
|
} |
|
|
$path = "/var/log/asterisk/log_ami_$login.log"; |
|
|
if ($function) { |
|
|
GravaLog(sprintf("\n[%s-%s]\n", $function, date('Y-m-d H:i:s')), $path); |
|
|
} |
|
|
|
|
|
if ($value) { |
|
|
GravaLog($value, $path); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
function DesligaTodasAmi($socket, $ramal) { |
|
|
$params = array('action' => 'command', 'command' => 'core show channels verbose'); |
|
|
$result = GetAmi($socket, $params); |
|
|
// $map = array('channel' => array(0,21),'context' => array(21,21),'extension' => array(42,17),'prio' => array(59,5),'state' => array(64,8),'application' => array(72,13),'data' => array(85,26),'callerid' => array(111,16),'duration' => array(127,9),'accountcode' => array(136,12),'bridgedto' => array(148,16)); |
|
|
$map = array('channel' => array(0, 21), 'context' => array(21, 21)); |
|
|
$linhas = array(); |
|
|
$start = 0; |
|
|
foreach ($result as $line) { |
|
|
if ($start) { |
|
|
/* |
|
|
* Active channels indica o final do arquivo. |
|
|
*/ |
|
|
if (stripos($line, "active channels") !== false) { |
|
|
break; |
|
|
} |
|
|
$linha = array(); |
|
|
foreach ($map as $key => $pos) { |
|
|
$linha[$key] = trim(substr($line, $pos[0], $pos[1])); |
|
|
} |
|
|
|
|
|
/* |
|
|
* Verifica se o contexto é de monitoria ou itercalação. |
|
|
*/ |
|
|
$context = trim($linha['context']); |
|
|
if ((stripos($context, 'call-monitora') !== false) || (stripos($context, 'call-intercala') !== false)) { |
|
|
/* |
|
|
* Se o channel corresponder ao ramal |
|
|
*/ |
|
|
$channel = trim($linha['channel']); |
|
|
if (stripos($channel, $ramal) !== false) { |
|
|
DesligarAmi($socket, $channel); |
|
|
} |
|
|
} |
|
|
} |
|
|
/* |
|
|
* Identifica a linha de cabeçalio, após esta linha deve començar a ler os dados, |
|
|
* start é modificado para true. |
|
|
*/ |
|
|
$start = $start || ((stripos($line, "Channel") !== false) && (stripos($line, "Extension") !== false)); |
|
|
} |
|
|
} |
|
|
|
|
|
?>
|
|
|
|