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ã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çõ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ão foi possí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)); } } ?>