#!/usr/bin/php -q = NUM_TENTATIVAS_GERA_PROTO) { // break; // } // $tentativa++; // } $query = "update pbx_supervisor_agentes set protocolo = '$protocolo', origem_destino = '$destino',canal_agente = '$canal_agente' , status = 'CHAMANDO',duracao = 'now()',tipo_ligacao = 'S',uniqueid = '$uniqueid',uniqueid2 = '$uniqueid',tipo_discagem = 'MANUAL' where ramal = '$origem'"; $result = @pg_query($conexao, $query); // write("EXEC PauseQueueMember |Agent/$matricula"); // read(); write("SET VARIABLE __INICIO_DIAL $inicio"); read(); write("SET VARIABLE __IDORIGEM $uniqueid"); read(); write("SET VARIABLE __MONITORADO SIM"); read(); write("SET VARIABLE __CALLCENTER SIM"); read(); write("SET VARIABLE __FILA-ORIGEM $fila"); read(); write("SET VARIABLE __MATRICULA-ORIGEM $matricula"); read(); write("SET VARIABLE __DESTINO-ORIGEM $destino"); read(); write("SET VARIABLE __RAMAL $origem"); read(); write("SET VARIABLE __CANALORIGEM $canal_agente"); read(); write("EXEC Macro origina-agente"); read(); mostra_parametro("SAIU_DO_AGENTE_LOGADO"); } } } } //Local/$destino@$contextoramal $uniqueid = $agi['uniqueid']; $contexto = $argv[1]; $destino = $agi['extension']; if (strtolower($contexto) == 'ext-transferencia') { mostra_parametro("EXT_TRANSFERENCIA"); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); $result = insert_padrao($conexao, $uniqueid, 'transfer', $destino); } else if (strtolower($contexto) == 'macro-dial-interno') { mostra_parametro("MACRO_DIAL_INTERNO"); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); $direcao = $argv[2]; $destino = $argv[3]; if ($idorigem) { $result = insert_padrao($conexao, $idorigem, $direcao, $destino); } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); $result = insert_padrao($conexao, $uniqueid, $direcao, $destino); } } else if (strtolower($contexto) == 'app-conta-senha') { mostra_parametro("APP_CONTA_SENHA"); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); $conta = $argv[2]; $destino = $argv[3]; $query = "select id from pbx_cs_usuarios where matricula = '$conta' and upper(status) = upper('a')"; $result = @pg_query($conexao, $query); $row = @pg_fetch_array($result); $id_usuario = $row['id']; if ($idorigem) { $result = insert_padrao($conexao, $idorigem, $contexto, $destino, $conta, $id_usuario); } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); $result = insert_padrao($conexao, $uniqueid, $contexto, $destino, $conta, $id_usuario); } } else if (strtolower($contexto) == 'saida-pstn') { mostra_parametro("SAIDA_PSTN"); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); $ramal = strtolower($agi["callerid"]); $query = "select matricula,dac from pbx_supervisor_agentes where ramal = '$ramal'"; $result = @pg_query($conexao, $query); $row = @pg_fetch_array($result); $matricula = $row['matricula']; $dac = $row['dac']; if ($idorigem) { if ($matricula) { //$query = "select count(*) from ast_bilhetes_complemento where uniqueid2 = '$idorigem' and conta = '$matricula' and direcao = 'app-conta-senha'"; $query = "select conta from ast_bilhetes_complemento where uniqueid2 = '$idorigem' and direcao = 'app-conta-senha'"; $result = @pg_query($conexao, $query); $row = @pg_fetch_array($result); $conta = $row['conta']; if ($conta) { if ($conta == $matricula) { $result = insert_padrao($conexao, $idorigem, $contexto, $destino, 'null', 'null', $matricula, $dac); } else { insert_padrao($conexao, $idorigem, $contexto, $destino); } } else { $result = insert_padrao($conexao, $idorigem, $contexto, $destino, 'null', 'null', $matricula, $dac); } } else { insert_padrao($conexao, $idorigem, $contexto, $destino); } } else { if ($matricula) { $query = "select conta from ast_bilhetes_complemento where uniqueid2 = '$uniqueid' and direcao = 'app-conta-senha'"; $result = @pg_query($conexao, $query); $row = @pg_fetch_array($result); $conta = $row['conta']; if ($conta) { if ($conta == $matricula) { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); $result = insert_padrao($conexao, $uniqueid, $contexto, $destino, 'null', 'null', $matricula, $dac); } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); insert_padrao($conexao, $idorigem, $contexto, $destino); } } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); $result = insert_padrao($conexao, $uniqueid, $contexto, $destino, 'null', 'null', $matricula, $dac); } } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); insert_padrao($conexao, $uniqueid, $contexto, $destino); } } } else if (strtolower($contexto) == 'ext-ramais') { mostra_parametro("EXT_RAMAIS"); $origem = $agi['callerid']; $destino = $agi['extension']; $canal = $agi['channel']; write("GET VARIABLE MONITORADO"); $monitorado = substr(strrchr(read(), "("), 1, -1); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); write("GET VARIABLE TIPO"); $tipo = substr(strrchr(read(), "("), 1, -1); $tipo = strtolower($tipo); if (!$tipo) { $tipo = $argv[2]; } if ($idorigem) { if ($idorigem == $uniqueid) { insert_padrao($conexao, $idorigem, $tipo, $destino); } else { if ($monitorado) { insert_padrao($conexao, $idorigem, $tipo, $destino); } else { insert_padrao($conexao, $uniqueid, $tipo, $destino); } } } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); insert_padrao($conexao, $uniqueid, $tipo, $destino); } //Monitoramento Ligações Recebidas CallCenter //$query = "select matricula,dac,status from pbx_supervisor_agentes where ramal = '$destino' and upper(status) in ('LIVRE','PAUSA')"; $query = "select matricula,dac,status,chamada_classificado,upper(modo_atendimento) as modo_atendimento from pbx_supervisor_agentes where ramal = '$destino'"; $result = @pg_query($conexao, $query); $row = @pg_fetch_array($result); $resultado = pg_num_rows($result); $matricula = $row['matricula']; $fila = $row['dac']; $status = $row['status']; $classifica = $row['chamada_classificado']; $modo_atendimento = $row['modo_atendimento']; $origem = $agi['callerid']; if ($modo_atendimento == 'MANUAL') { $canal_agente = $agi['channel']; } else { $canal_agente = 'Agent/' . $matricula; write("SET VARIABLE MODOATENDIMENTO AUTO"); read(); } //Se houver agente logado if ($resultado) { switch (strtoupper($status)) { case 'PAUSA': write("SET VARIABLE __PAUSA SIM"); read(); exit; break; case 'LIVRE': /* * Trata classificao * Verifica se a classificao esta ativa * Verifica se e exigida a classificao */ VerificaClassificacao($conexao, $fila, $matricula, $destino, $uniqueid, $classifica, ENTRANTE); // $query = "select b.prm_agente_classifica, a.exige_classificacao as prm_exige_classificacao // from pbx_queues_grupos a, pbx_parametros b // where nome = '$fila'"; // // $result = pg_query($conexao, $query); // $dados = pg_fetch_row($result); // if ($dados[0] && $dados[1]) { // //verifica se a chamada já está classificada // if ($classifica == 0) { // write("SET VARIABLE __CLASSIFICADA NAO"); // read(); // exit; // break; // } // else { // $query = "update pbx_supervisor_agentes set origem_destino = '$origem',status = 'CHAMANDO',duracao = 'now()',tipo_ligacao = 'E',uniqueid = '$uniqueid',uniqueid2 = '$uniqueid',tipo_discagem = 'MANUAL' where ramal = '$destino'"; // $result = pg_query($conexao, $query); // } //} // else { // $query = "update pbx_supervisor_agentes set origem_destino = '$origem',status = 'CHAMANDO',duracao = 'now()',tipo_ligacao = 'E',uniqueid = '$uniqueid',uniqueid2 = '$uniqueid',tipo_discagem = 'MANUAL' where ramal = '$destino'"; // $result = pg_query($conexao, $query); // } /* * Função retorna numero de Protocolo de Atendimento para o agente */ $protocolo=GeraProtocolo($conexao, $uniqueid); // $tentativa = 0; // while (true) { // $proto = @GetProto($conexao, $uniqueid, $agente); // if ($proto == '99') { // $proto = '0000-000000'; // break; // } // // if (!empty($proto) || $tentativa >= NUM_TENTATIVAS_GERA_PROTO) { // break; // } // $tentativa++; // } $query = "update pbx_supervisor_agentes set protocolo = '$protocolo', canal = '$canal', origem_destino = '$origem',status = 'CHAMANDO',duracao = 'now()',tipo_ligacao = 'E',uniqueid = '$uniqueid',uniqueid2 = '$uniqueid',tipo_discagem = 'MANUAL' where ramal = '$destino'"; $result = pg_query($conexao, $query); write("EXEC PauseQueueMember ,Local/$destino@app-callcenter/n"); read(); write("SET VARIABLE __INICIO_DIAL $inicio"); read(); write("SET VARIABLE __MATRICULA-DESTINO $matricula"); read(); write("SET VARIABLE __FILA-DESTINO $fila"); read(); write("SET VARIABLE __DIRECAO ENTRADA"); read(); write("SET VARIABLE __CALLCENTER-DESTINO SIM"); read(); write("SET VARIABLE __RAMALAGENTE $destino"); read(); break; default: write("SET VARIABLE __OCUPADO SIM"); read(); exit; break; } } } else if (strtolower($contexto) == 'ext-rotasinternas') { mostra_parametro("EXT_ROTAS_INTERNAS"); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); $tipo = $argv[2]; if ($idorigem) { if ($tipo == 'interna') { insert_padrao($conexao, $idorigem, $tipo, $destino); } else { insert_padrao($conexao, $idorigem, $contexto, $destino); } } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); if ($tipo == 'interna') { insert_padrao($conexao, $uniqueid, $tipo, $destino); } else { insert_padrao($conexao, $uniqueid, $contexto, $destino); } } } else if (strtolower($contexto) == 'ext-fila') { mostra_parametro("EXT_FILA"); write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); write("GET VARIABLE TRANSFER"); $transfer = substr(strrchr(read(), "("), 1, -1); $FONE = $agi["callerid"]; write("SET VARIABLE BINA_RETORNO $FONE"); read(); if ($idorigem) { if ($transfer) { mostra_parametro("TEM_TRANSFER"); insert_padrao($conexao, $uniqueid, $contexto, $destino); } insert_padrao($conexao, $idorigem, $contexto, $destino); } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); insert_padrao($conexao, $uniqueid, $contexto, $destino); } } else if (strtolower($contexto) == 'transfer-saida') { mostra_parametro("TRANSFER_SAIDA"); insert_padrao($conexao, $uniqueid, $contexto, $destino); } else if (strtolower($contexto) == 'fila-ramal') { mostra_parametro("FILA_RAMAL"); $destino = $argv[2]; insert_padrao($conexao, $uniqueid, $contexto, $destino); } else if (strtolower($contexto) == 'ura') { /* * Executa noop para cli do asterisk, mostrando a passagem para ura. */ mostra_parametro('ura'); /* * Captura valores passados na linha de comando. */ $tipo = trim($argv[2]); $idUra = trim($argv[3]); $opcUra = isset($argv[4]) ? trim($argv[4]) : '0'; $opcao = isset($argv[5]) ? trim($argv[5]) : ''; $acao = isset($argv[6]) ? trim($argv[6]) : ''; $identProc = 'pbx_complemento.php'; $upd = ''; //$log = sprintf("Contexto: %s Tipo: %s Id: %s OpcUra: %s Opcao: %s Acao: %s", $contexto, $tipo, $idUra, $opcUra, $opcao, $acao ); /* * Tenta recuperar o identificador da chamada pela origem, ou seja * o identificador atribuido a chamada no momento da recepcao da mesma, * sendo que este valor possa ser alterado numa transferencia por exemplo. */ write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); /* * Identificador da chamada. */ $uid = $idorigem ? $idorigem : $uniqueid; /* * Primera interacao com a ura. * ini -> Inicia o atendimento da ura. * opc -> Digitou uma opcao na ura. * def -> Foi executada a opcao default da ura por timeout. * seq -> Indica o inicio da atendimeto com "ini", entretanto * esta ura foi redirecionada de outra. * table field: uniqueid,umv_tipo,umv_ura_id,umv_atendimento,umv_ura_opcao,umv_opcao,umv_acao,reg_proc */ if ($tipo == 'ini') { /* * Retorna seq quando ja houve atendimeto em outra "URA" para * o identificador corrente, ou seja este atendimento eh para uma * "URA" que foi chamada a partir de outra. */ if (GetInteraUra($uid)) { $tipo = 'seq'; } $query = "insert into pbx_ura_movimento(uniqueid,umv_tipo,umv_ura_id,reg_proc,umv_ura_nome)values(%s,%s,%s,%s,(SELECT nome FROM pbx_ura WHERE id = $idUra))"; $query = sprintf($query, QuotedStr($uid), QuotedStr($tipo), QuotedStr($idUra), QuotedStr($identProc)); } else if (($tipo == 'opc') or ( $tipo == 'def')) { $query = "insert into pbx_ura_movimento(uniqueid,umv_tipo,umv_ura_id,umv_ura_opcao,umv_opcao,umv_acao,reg_proc,umv_ura_nome)values(%s,%s,%s,%s,%s,%s,%s,(SELECT nome FROM pbx_ura WHERE id = $idUra))"; $query = sprintf($query, QuotedStr($uid), QuotedStr($tipo), QuotedStr($idUra), QuotedStr($opcUra), QuotedStr($opcao), QuotedStr($acao), QuotedStr($identProc)); $upd = sprintf("update pbx_ura_movimento set umv_ult_atend_ura = %s, umv_ult_atend_opcao = %s where uniqueid = %s and umv_tipo = 'ini'", QuotedStr($idUra), (($tipo == 'opc') ? QuotedStr($opcUra) : QuotedStr('99')), QuotedStr($uid)); } try { $erro = ''; $inTran = 0; $result = pg_query('begin'); if (!$result) { RaiseExcept('Erro ao iniciar uma transação.', true); } $inTran = 1; $result = pg_query($query); if (!$result) { RaiseExcept('Erro ao inserir pbx_ura_movimento.', true); } if ($upd) { $result = pg_query($upd); if (!$result) { RaiseExcept('Erro ao atualizar pbx_ura_movimento.', true); } } $result = pg_query('commit'); if (!$result) { RaiseExcept('Erro ao finalizar uma transação.', true); } } catch (Exception $ex) { $log = sprintf("Data: %s Cmd: %s Cmd2: %s Sys: %s [ERRO]\n", date('Y-m-d H:i:s'), $query, $upd, $ex->getMessage()); WriteLog($log, '/var/log/asterisk/pbx_complemento_reg.log'); write("EXEC Playback appsounds/erro_operacao"); read(); write("HANGUP"); read(); if ($inTran) { @pg_query('rollback'); } exit; } /* * Tenta gravar as informaçoes da ura, caso nao seja possivel a operacao eh abortada. */ if ($idUra) { $destino = $idUra; } /* * Realiza insert padrao na tabela pbx_complemento. */ insert_padrao($conexao, $uid, $contexto, $destino); if (!$idorigem) { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); insert_padrao($conexao, $uniqueid, $contexto, $destino); } } else { write("GET VARIABLE IDORIGEM"); $idorigem = substr(strrchr(read(), "("), 1, -1); if ($idorigem) { insert_padrao($conexao, $idorigem, $contexto, $destino); } else { write("SET VARIABLE __IDORIGEM $uniqueid"); read(); insert_padrao($conexao, $uniqueid, $contexto, $destino); } } function mostra_parametro($parametro) { write("EXEC Noop PARAMETRO:$parametro"); read(); } function GetInteraUra($uid) { $query = "select '' from pbx_ura_movimento where uniqueid = '$uid' and umv_tipo = 'ini'"; $result = pg_query($query); return pg_num_rows($result) ? true : false; } fclose($in); fclose($stdlog); exit; ?>