#!/usr/bin/php -q 331 * deve procurar o tronco relacionado OI -> 314. A função abaixo * busca essa relação na tabela pbx_operadora_rel. * Este relacionamento deve ser configurado na aplicação web menu: * Ferramentas->Tarifação/Portabilidade->Operadoras. */ $operadora = GetOperadoraRelacionada($operadora); __log($operadora, 'GetOperadoraRelacionada($operadora)'); /* * Função retorna basicamente um array com informações da chamada, * ex.: uma chamada móvel local retorna array('movel', 'local', '0') * o último parametro é a operadora atual informada no destino, 0(zero) * não foi adicionado uma. */ $tpChamada = GetTipoChamada($destino); $tipoChamada = $tpChamada[0]; __log($tipoChamada, 'GetTipoChamada($destino)'); /* * Essa variável contém a operadora portada. */ __log("SET VARIABLE SPID $operadora"); write("SET VARIABLE SPID $operadora"); read(); /* * Indica se a chamada é para móvel ou fixo. */ __log("SET VARIABLE tipoChamada $tipoChamada"); write("SET VARIABLE tipoChamada $tipoChamada"); read(); if ($operadora) { __log($operadora, 'if ($operadora)'); /* * OPERADORAS E SPID * OI(BRASIL TELECOM S/A)" => 314 * VIVO S.A. => 320 * CLARO(AMERICEL S.A.)" => 321 * TIM CELULAR S.A. => 341 * Busca o número da operadora, oper_numero_saida por padrão tráz a mesama informação * de oper_numero, entretanto em algumas localidades uma operadora pode fazer uma con- * seção a outra ou seja a tabela de portabilidade retorna "014" mas na verdade deve * discar "031" então nesse caso oper_numero = 014 oper_numero_saida = 031. */ $query = "select coalesce(a.oper_numero_saida, a.oper_numero) as oper_numero_saida from pbx_operadoras a where a.oper_spid = '$operadora' "; $result = pg_query($conexao, $query); __log(''); __log($query, 'Numero de saida da operadora'); __log(''); /* * Se houver problemas para acessar o banco de dados envia mensagem e interrompe a execução. */ if (!$result) { __log("Erro Query: \"Erro ao cousultar Operadora na base de dados! Oper: $operadora. Msg: $msg\""); $msg = GetLasterror(); write("NOOP \"Erro ao cousultar Operadora na base de dados! Oper: $operadora. Msg: $msg\""); read(); exit; } /* * Se não encontrar a Operadora no banco de dados envia mensagem e interrompe a execução. */ if (!pg_num_rows($result)) { __log("\"Operadora não encontrada na base de dados! Oper: $operadora\""); write("NOOP \"Operadora não encontrada na base de dados! Oper: $operadora\""); read(); exit; } $dados = pg_fetch_array($result); $numeroSaida = $dados['oper_numero_saida']; __log($numeroSaida, 'Numero de saida retornado da tabela pbx_operadoras'); write("SET VARIABLE OPERDDD $numeroSaida"); write("SET VARIABLE OPERDDD $numeroSaida"); read(); /* * Ajusta operadora DDD */ $tam = strlen(ltrim($discado, "0")); __log($tam, "Tamanho discado: $discado"); if ($tam > 9) { $destinoEntra = $destino; $numero = substr(ltrim($destino, "0"), -11); $destino = $numeroSaida . $numero; write($destino, "Tamanho > 9: "); __log(sprintf('"Ajusta Operadora, Destino E: %s Destino S: %s Operadora Orig: %s Operadora Port: %s "', $destinoEntra, $destino, $operadora, $numeroSaida)); write(sprintf('NOOP "Ajusta Operadora, Destino E: %s Destino S: %s Operadora Orig: %s Operadora Port: %s "', $destinoEntra, $destino, $operadora, $numeroSaida)); read(); } /* * As operadoras a partir da versão 1.6.5.5 foram desvinculadas da tarifação, são adicionadas diretamente nos troncos que farao ligações * para móvel. */ $query = "select a.tipo||'/'||a.username as tronco, a.id, a.max_ligacoes from pbx_troncos a where a.portabilidade = '$operadora' and a.portabilidade > 0"; $result = pg_query($conexao, $query); __log(''); __log($query, "Pesquisa tronco pela operadora"); __log(''); if (pg_num_rows($result)) { $row = pg_fetch_array($result); $tronco = $row['tronco']; $idTronco = $row['id']; $maxLigacoes = $row['max_ligacoes']; __log(sprintf("Retorno troncos: Tronco: %s id: %s Max lig: %s", $tronco, $idTronco, $maxLigacoes)); __log("SET VARIABLE TRONCO $tronco"); write("SET VARIABLE TRONCO $tronco"); read(); __log("SET VARIABLE ID_TRONCO $idTronco"); write("SET VARIABLE ID_TRONCO $idTronco"); read(); __log("SET VARIABLE MAX_LIG $maxLigacoes"); write("SET VARIABLE MAX_LIG $maxLigacoes"); read(); __log("SET VARIABLE DESTINO $destino"); write("SET VARIABLE DESTINO $destino"); read(); __log("SET VARIABLE __IDOPERADORA $operadora"); write("SET VARIABLE __IDOPERADORA $operadora"); read(); // __log("EXEC Goto $context|$discado|portabilidade"); // write("EXEC Goto $context|$discado|portabilidade"); __log("EXEC Goto $context,$discado,portabilidade"); write("EXEC Goto $context,$discado,portabilidade"); read(); } } pg_close(); fclose($in); fclose($stdlog); exit; // Do function definitions before we start the main loop function read() { global $in, $debug, $stdlog; $input = str_replace("\n", "", fgets($in, 4096)); if ($debug) fputs($stdlog, "read: $input\n"); return $input; } function write($line, $logOnly = false) { global $debug, $stdlog; if ($logOnly) { fputs($stdlog, "$line\n"); } else if ($debug) { fputs($stdlog, "write: $line\n"); } if (!$logOnly) { echo $line . "\n"; } } function __log($log, $label = '') { $line = $label ? sprintf("%s: %s", $label, $log) : $log; write($line, true); } ?>