Eu fiz uma ura integrada ao banco de dados, para isso eu utilizei AGI com PHP, só que eu utilizo o postgres.

segue código em anexo...

[]s


Mon, 2 Mar 2009 12:43:07 -0300, Breno Henrique Gonçalves e Alves escreveu:

Pessoal,
 
Estou precisando desenvolver uma Ura com conexão a banco de dados para validação de numero digitado pelo cliente.
 
Alguém tem algo implementado?
 
Algum material que possa compartilhar??
 
Agradeço Antecipadamente!
 
Breno



---Registre seu domínio .com ou .net por apenas R$15,00/ano e GANHE hospedagem, blog e e-mail grátis!LocaWeb - Soluções Completas em Serviços de Internet (www.locaweb.com.br)
#!/usr/bin/php -q 
<?php 
 
Function UraDefault($lstrConta) { 

        $agi = new AGI(); 
        
        $conn= 
db_connect_param('10.0.1.200','sa','xxx','comprod_asterisk',5432);  
        $lstrSql = ""; 
        $lstrSql.= " select"; 
        $lstrSql.= " 
x_ura_numeros,x_ura_comandos,x_ura_comando_timeout,x_ura_arquivo_saudacao, 
x_ura_arquivo_feriado,"; 
        $lstrSql.= " 
x_ura_arquivo_ring,x_ura_arquivo_ocupado,x_ura_tipo,x_ura_escolha_aleatoria, 
x_ura_feriado_1, 
x_ura_feriado_2,x_ura_sabado,x_ura_domingo,x_ura_segunda_sexta"; 
        $lstrSql.= " from ast_ramais"; 
        $lstrSql.= " where x_acc_conta = '$lstrConta'"; 
        $rs = db_query($lstrSql,$conn);   
        $datars=db_fetch_array($rs);   
        $lstrRamais =$datars['x_ura_numeros'];  
        $lstrComandos =$datars['x_ura_comandos'];  
        $lstComandoTo =$datars['x_ura_comando_timeout'];  
        $lstrArqSaudacao =$datars['x_ura_arquivo_saudacao'];  
        $lstrArqFeriado =$datars['x_ura_arquivo_feriado'];  
        $lstrArqRing =$datars['x_ura_arquivo_ring'];  
        $lstrArqOcupado =$datars['x_ura_arquivo_ocupado'];  
        $lstrTipo =$datars['x_ura_tipo'];  
        $lstrAleatorio =$datars['x_ura_escolha_aleatoria'];  
        $lstrUraFeriado1 =$datars['x_ura_feriado_1'];  
        $lstrUraFeriado2 =$datars['x_ura_feriado_2'];  
        $lstrUraSabado =$datars['x_ura_sabado'];  
        $lstrUraDomingo =$datars['x_ura_domingo'];  
        $lstrUraSegundaSexta =$datars['x_ura_segunda_sexta'];  
        $larrComandos = split(',',$lstrComandos); 
        $larrRamais = split(',',$lstrRamais); 
        $lstrRamaisCount=count($larrRamais); 
        $lbolcallPending = true; 
 
        db_close($conn); 
 
        $agi->verbose("ura Ramais:           $lstrSql");  
        $agi->verbose("ura Ramais:           $lstrRamais");  
        $agi->verbose("ura Comando:          $lstrComandos");  
        $agi->verbose("ura Comando TimeOut:  $lstComandoTo");  
        $agi->verbose("ura Arquivo Saudacao: $lstrArqSaudacao");  
        $agi->verbose("ura Arquivo Feriado:  $lstrArqFeriado");  
        $agi->verbose("ura Arquivo Rind:     $lstrArqRing");  
        $agi->verbose("ura Arquivo Ocupado:  $lstrArqOcupado");  
        $agi->verbose("ura Tipo:             $lstrTipo");  
        $agi->verbose("ura Aleatorio:        $lstrAleatorio");  
        $agi->verbose("ura Origem:           $lstrRamaisCount");  
 
        if ($lstrArqSaudacao != '' || $lstrArqRing != '' || $lstrArqFeriado != 
'' || $lstrArqOcupado != '' ){ 
                $agi->Answer(); 
                $lbolcallPending =false; 
        } 
 
        if 
(valida_feriado($lstrUraFeriado1,$lstrUraFeriado2,$lstrUraSabado,$lstrUraDomingo,$lstrUraSegundaSexta)
 !== false) { 
                if ( $lstrArqFeriado != '') { 
                        $agi->exec('Playback',$lstrArqFeriado); 
                } 
                $agi->hangup(); 
        }
 
 
        if ($lstrAleatorio == 'SIM') { 
                $lintCount=RAND(0,$lstrRamaisCount-1); 
        } else { 
                $lintCount = 1; 
        } 
 
        $lbolTrava = true; 
        $input=''; 
        $lboltimeOut=true; 
        While($lbolTrava){ 
                if ($lstrTipo == '1') { 
                        if($input == '') { 
                                $agi->exec('Background',$lstrArqSaudacao); 
                                $input = $agi->wait_for_digit(6000); 
                                $input = $input['result']; 
                                if ( $input != 0 && $input != -1) { 
                                        $input = $input - 48; 
                                } 
                        } 
 
                        if (($input == '' || $input == 0 || $input == -1) && 
$lboltimeOut === true) { 
                                $input=$lstComandoTo;  
                                $lboltimeOut=false; 
                        } 
 
                        $lstrRamal = 'error'; 
 
                        $i=0; 
 
                        while ($i <= count($larrComandos) -1 ) { 
                                $lstrComandoA=$larrComandos[$i]; 
                                if(trim($input) == trim($lstrComandoA)) { 
                                        $lstrComando=$i; 
                                        $i=count($larrComandos) + 1; 
                                } 
 
                                $i=$i + 1; 
                        };  
 
                        if( is_numeric($lstrComando)) { 
                                $lstrRamal=$larrRamais[$lstrComando]; 
                        }else { 
                                $lstrRamal=''; 
                        } 
 
                        if ($lstrRamal != 'error' || $lstrRamal != '') { 
                                $lboltimeOut = true; 
                        } 
                } 
 
                if ($lstrTipo == '2') { 
                        $lstrRamal=$larrRamais[$lintCount]; 
                        $lintCount=$lintCount + 1; 
                        ///se for maior cair fora 
 
                        if( $lstrRamal == '' ){ 
                                $lbolTrava=false; 
                        } 
                } 
                if ($lstrTipo == '3') { 
                        $lstrRamal=$larrRamais[$lintCount]; 
                        if( $lstrRamal == '' ){ 
                                $lbolTrava = false; 
                        } 
                } 
 
                $input=''; 
                if ($lbolTrava == false) { 
                        Exit; 
                } 
 
                if ( $lstrRamal != '' ) { 
                        $agi->exec('Dial','Local/'.$lstrRamal.'@ramais'); 
                } 
 
                if ($lstrTipo == '2' || $lstrTipo == '3') { 
                        $lstrDialStatus = 
$agi->get_variable('DIALSTATUS',TRUE);   
                        if ($lstrDialStatus == 'BUSY') { 
                                $agi->hangup(); 
                        } 
                        if ( $lstrTipo == '3' && $lstrDialStatus != 'BUSY' && 
$lstrArqOcupado != '') { 
                                $agi->exec('Playback',$lstrArqOcupado); 
                                $agi->exec('Wait','4'); 
                        } 
                } 
        } 
        return true; 
} 
function valida_feriado($lstrFeriados1,$lstrFeriados2, $lstrSabados, 
$lstrDomingos, $lstrSegSexs) { 

        $larrFeriados1 = split(',',$lstrFeriados1);
        $larrFeriados2 = split(',',$lstrFeriados2);
        $larrSabados   = split(',',$lstrSabados);
        $larrDomingos  = split(',',$lstrDomingos);
        $larrSegSexs   = split(',',$lstrSegSexs);

        $ldtaHoje=getdate();
        $dias_semana = array('SUN', 'MON', 'TUE','WED', 'THU', 'FRI', 'SAT');

        $lintHora      = date('G',$ldtaHoje[0]) ;
        $lstrDiaSemana = $dias_semana[date('w',$ldtaHoje[0])];
        $lstrData      = date('d/m/Y',$ldtaHoje[0]) ;

        $lbolNotFeriado = false;


        IF (count($larrFeriados1) > 0) {
                $i = 0;
                while ($i <= count($larrFeriados1) -1) {


                        $lstrDataFeriado1 = $larrFeriados1[$i];

                        $lintHoraInicial = Substr($lstrDataFeriado1,11,2);
                        $lintHoraFinal   = Substr($lstrDataFeriado1,14,2);
                        IF (Substr($lstrDataFeriado1,0,10) == $lstrData) {
                                if ($lintHora >= $lintHoraInicial && $lintHora 
< $lintHoraFinal) {
                                        $lbolNotFeriado = true; 
                                }
                        }

                        $i = $i + 1;
                }

                if ($lbolNotFeriado) {
                        return false;
                }
        }

        $lbolNotFeriado = false;
        IF (count($larrFeriados2) > 0) {
                $i = 0;
                while ($i <= count($larrFeriados2) - 1) {
                        $lstrDataFeriado2 = $larrFeriados2[$i];
                        $lintHoraInicial = Substr($lstrDataFeriado2,11,2);
                        $lintHoraFinal   = Substr($lstrDataFeriado2,14,2);

                        IF (Substr($lstrDataFeriado2,0,10) == $lstrData) {
                                if ($lintHora >= $lintHoraInicial && $lintHora 
< $lintHoraFinal) {
                                        $lbolNotFeriado = true; 
                                }
                        }

                        $i = $i + 1;
                }
                if ($lbolNotFeriado) {
                        return false;
                }
        }
        $lbolNotFeriado = false;
        IF (count($larrSabados) > 0) {
                if ($lstrDiaSemana == 'SAT')  {
                        $i = 0;
                        while ($i <= count($larrSabados) -1) {
                                $lstrDataSabado = $larrSabados[$i];
                                if ($lstrDataSabado != '' && $lstrDataSabado != 
null) {
                                        $lintHoraInicial = 
Substr($lstrDataSabado,0,2);
                                        $lintHoraFinal   = 
Substr($lstrDataSabado,3,2);

                                        if ($lintHora >= $lintHoraInicial && 
$lintHora < $lintHoraFinal) {
                                                $lbolNotFeriado = true;
                                        }
                                }
                                $i = $i + 1;
                        }
                        if ($lbolNotFeriado) {
                                return false;
                        } else {
                                return true;
                        }
                }
        }

        $lbolNotFeriado = false;
        IF (count($larrDomingos) > 0) {
                if ($lstrDiaSemana == 'SUN')  {

                        $i = 0;
                        while ($i <= count(larrDomingos) -1) {
                                $lstrDataDomingo = $larrDomingos[$i];
                                if ($lstrDataDomingo != '' && $lstrDataDomingo 
!= null) {
                                        $lintHoraInicial = 
Substr($lstrDataDomingo,0,2);
                                        $lintHoraFinal   = 
Substr($lstrDataDomingo,3,2);
                                        if ($lintHora >= $lintHoraInicial && 
$lintHora < $lintHoraFinal) {
                                                $lbolNotFeriado = true;
                                        }
                                }
                                $i = $i + 1;
                        }
                        if ($lbolNotFeriado) {
                                return false;
                        } else {
                                return true;
                        }
                }
        }
        $lbolNotFeriado = false;
        IF (count($larrSegSexs) > 0) {
                if (strpos('|MON|TUE|WED|THU|FRI|',$lstrDiaSemana) !== false)  {

                        $i = 0;
                        while ($i <= count($larrSegSexs) -1) {
                                $lstrDataSegSex = $larrSegSexs[$i];     
                                if ($lstrDataSegSex != '' && $lstrDataSegSex != 
null) {
                                        $lintHoraInicial = 
Substr($lstrDataSegSex,0,2);
                                        $lintHoraFinal   = 
Substr($lstrDataSegSex,3,2);
                                        if ($lintHora >= $lintHoraInicial && 
$lintHora < $lintHoraFinal) {
                                                $lbolNotFeriado = true;
                                        }
                                }
                                $i = $i + 1;
                        }
                        if ($lbolNotFeriado) {
                                return false;
                        } else {
                                return true;
                        }
                }
        }
        return false;
}
?> 
_______________________________________________
Openmoko Freerunner, primeiro telefone open source, disponível no Brasil 
rodando o Android da Google.
http://www.neodroid.com

Compre uma camiseta da AsteriskBrasil.org!
http://www.voipmania.com.br

Acesse o canal IRC de discussão sobre Asterisk em Português Brasileiro na rede 
Freenode.net: #asterisk-br
_______________________________________________
Lista de discussões AsteriskBrasil.org
AsteriskBrasil@listas.asteriskbrasil.org
http://listas.asteriskbrasil.org/mailman/listinfo/asteriskbrasil

Responder a