You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

952 lines
39 KiB

<?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));
}
}
?>