[AsteriskBrasil] Callback simples
    Helvio Junior 
    helvio.listas em gmail.com
       
    Quarta Setembro 14 13:31:28 BRT 2016
    
    
  
Vanessa,
Segue abaixo um script que uso.
Ps: Como fiz alguns ajustes retirando coisas aqui da empresa do script 
pode ser que tenha alguns ajuste ou erro a se corrigir, mas ja serve 
como base.
Para maiores informações consultar: 
http://www.voip-info.org/wiki/view/Asterisk+auto-dial+out
Extensions.conf
exten = _X.,1,AGI(callback.php)
#!/usr/bin/php -q
<?php
/*
|--------------------------------------------------------------------------
| READ-ME
|--------------------------------------------------------------------------
| Salve este conteúdo em /var/lib/asterisk/agi-bin/callback.php
|
| Antes de executar este script será necessário instalar e habilitar as bibliotecas
|
| apt-get install -y php-http php5-dev libcurl3 libpcre3-dev libcurl4-openssl-dev
|
| Copiar a biblioteca PHPAGI disponível em (http://phpagi.sourceforge.net/)
| no diretório /var/lib/asterisk/agi-bin/phpagi-2.20
*/
require_once __DIR__.'/phpagi-2.20/phpagi.php';
openlog(pathinfo(__FILE__)['basename'], LOG_PID | LOG_PERROR, LOG_LOCAL0);
try{
         $agi = new AGI();
         $agi->exec('VERBOSE','"Entrada da CallBack" 4');
         $caller = '';
         $exten = '';
         $channel = '';
         
         $outputContext = 'saida';
         $forwardTo = '1000';
         $uniqueId = $agi->request['agi_uniqueid'];
         if ((isset($agi->request['agi_callerid'])) && ($agi->request['agi_callerid'] != ''))
                 $caller = $agi->request['agi_callerid'];
         if ((isset($agi->request['agi_extension'])) && ($agi->request['agi_extension'] != ''))
                 $exten = $agi->request['agi_extension'];
         if ((isset($agi->request['agi_channel'])) && ($agi->request['agi_channel'] != ''))
                 $channel = $agi->request['agi_channel'];
         if (empty($caller) || empty($exten) || empty($channel) || (strlen($channel) < 2))
         {
                 $agi->exec('VERBOSE','"CallerID, Channel ou Exten não fornecidos" 3');
                 die();
         }
         $cId = 'cb-' . date('U') . '-' . $caller;
         $filename = 'call_'.$cId.'.call';
         if (strlen($cId) > 19)
                 $cId = substr($cId,0,19);
         try{
                 $myfile = fopen("/tmp/{$filename}", "w");
         } catch (Exception $e) {
                 throw new Exception("Falha abrindo o arquivo de ligação");
         }
         $txt = "Channel: Local/".$caller."@".$outputContext."\n";
         fwrite($myfile, $txt);
         $txt = "Context: ".$outputContext."\n";
         fwrite($myfile, $txt);
         $txt = "Extension: ".$forwardTo."\n";
         fwrite($myfile, $txt);
         $txt = "Priority: 1\n";
         fwrite($myfile, $txt);
         $txt = "CallerID: <$caller>\n";
         fwrite($myfile, $txt);
         $txt = "Codecs: gsm,alaw,ulaw\n";
         fwrite($myfile, $txt);
         $txt = "MaxRetries: 3\n";
         fwrite($myfile, $txt);
         $txt = "RetryTime: 45\n";
         fwrite($myfile, $txt);
         $txt = "WaitTime: 90\n";
         fwrite($myfile, $txt);
         $txt = "Account: $cId\n";
         fwrite($myfile, $txt);
         $txt = "Archive: yes\n";
         fwrite($myfile, $txt);
         $txt = "SetVar: CHANNEL(language)=pt_BR\n";
         fwrite($myfile, $txt);
         $txt = "SetVar: CDR(userfield)=$cId\n";
         fwrite($myfile, $txt);
         fclose($myfile);
         try{
                 exec('touch -d "$(date -r /tmp/'.$filename.') + 20 seconds" "/tmp/'.$filename.'"');
         } catch (Exception $e) {}
         exec('sudo chmod 777 /tmp/'.$filename.'; sudo mv /tmp/'.$filename.' /var/spool/asterisk/outgoing/');
         //Antende a chamada
         $agi->answer();
         sleep(1);
         //Reset o CDR, para no relatório só marcar a chamada como atendida quando realmente for atendida por uma fila
         //$agi->exec('ResetCDR','v');
         //Toca o audio de callback
         $agi->stream_file('nomedoarquivodeaudio');
         //Desliga a ligação
         $agi->hangup();
         return 0;
} catch (Exception $e) {
         $agi->exec("NOOP", '"'.$e->getMessage().'"');
         $agi->exec("GOTO", '"interno,'.$exten.',1"');
         return 0;
}
closelog();
Att,
Hélvio Junior
dCAA - Digium Certified Asterisk Administrator
SafeId - Gestão de identidades e Acessos
+55 41 | 9855-9300, single-sign-on.com.br
helvio.junior em safetrend.com.br
Em 14/09/2016 12:01, Vanessa Sather escreveu:
> Bom dia.
> Sei que é pedir demais porem estou na urgência e pergunto se alguem 
> tem um script simples para dialplan mesmo contemplando callback?
> Gostaria de dar um toque no meu número fixo através do celular e o 
> mesmo reconhecer meu cel e retornar a chamada.
> Muito obrigada.
> Vanessa.
>
>
> _______________________________________________
> KHOMP: completa linha de placas externas FXO, FXS, GSM e E1
> Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7
> Intercomunicador e acesso remoto via rede IP e telefones IP
> Conheça todo o portfólio em www.Khomp.com
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para asteriskbrasil-unsubscribe em listas.asteriskbrasil.org
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20160914/2306d3d0/attachment.html>
    
    
Mais detalhes sobre a lista de discussão AsteriskBrasil