[AsteriskBrasil] Retorno click-to-call

Claudio Eden claudio.eden em gmail.com
Quinta Maio 21 13:48:27 BRT 2015


Danilo,

Como você está usando arquivos .call (que para esse seu cenário não é a
melhor maneira) você poderá fazer algo na seguinte linha, considerando que
os arquivos .call possuem um artifício que é o uso do *parametro ARCHIVE*
que irá informar ao asterisk que, APÓS o arquivo .call ser utilizado, o
asterisk deve armazenar um arquivo contendo o RESULTADO dessa ligação no
diretório /var/spool/asterisk/outgoing_done/.

Basta você incluir a linha destacada em vermelho no seu código:

 fputs($oSocket, "Channel: $strChannel\r\n");
 fputs($oSocket, "Callerid: $strCallerId\r\n");
 fputs($oSocket, "Extension: $strExten\r\n");
 fputs($oSocket, "Context: $strContext\r\n");
 fputs($oSocket, "MaxRetries: $strMaxRetry\r\n");
 fputs($oSocket, "RetryTime: $RetryTime\r\n");
* fputs($oSocket, "Archive: yes\r\n");*   * <---------------------*
 fputs($oSocket, "WaitTime: $WaitTime\r\n\r\n");

Com isso irá ter no diretório /var/spool/asterisk/outgoing_done/ um arquivo
equivalente ao .call, porém contendo o resultado da ligação.

De posse desse arquivo, sua atuação poderia ser o seguinte:
1. após executar esse código discador.php, você direcionar para um outro
script (tipo listener.php) que irá ficar em loop verificando se o arquivo
de retorno do .call apareceu no diretório
/var/spool/asterisk/outgoing_done/.
2. quando o arquivo aparecer, voce lê o conteúdo, e exibe para o usuario, o
retorno da maneira que você desejar (se apenas o código, retorno json, se
mensagem completa, etc).

Espero ter ajudado.


*Atenciosamente,*


*Cláudio Éden*
Consultor de TI  |  dCAA  |  MCDST  |  ITIL
+55 85 8972-1842

http://www.eden.com.br
http://www.asteriskhandson.com.br




Em 21 de maio de 2015 11:39, Danilo Almeida <daniloricalmeida at gmail.com>
escreveu:

> Bom dia, Pessoal!!
>
> Surgiu a necessidade de integrar um sistema de terceiro em um servidor que
> tenho em um cliente.
>
> O sistema fará uma discagem através de uma URL que criei.
>
>
> http://asterisk/discador.php?user=USER&pass=SENHA&origem=RAMAL&destino=NUMERO
>
> segue codígo:
>
> <?php
> include_once "Connection.class.php";
>
>  # Usuario e senha para acesso ao sistema
>  $origem = $_GET['origem'];
>  $destino = $_GET['destino'];
>
> $conn = new Connection();
>
>     $user = anti_injection($_GET['user']);
>     $pass = anti_injection($_GET['pass']);
>
>     $sql1 = 'SELECT * FROM tb_usuarios WHERE user_login = \''.$user.'\'AND
> user_senha = \''.$pass.'\'';
>           $rs = mysql_query($sql1);
>           if(mysql_num_rows($rs) > 0 ){
>             $permissao = TRUE;
>           }else{
>             $permissao =  FALSE;
>           }
>
>
> if(($permissao == TRUE)AND($origem != "")AND($destino != "")){ #informe o
> endereco ip do seu asterisk
>
>  $strHost = "127.0.0.1";
>
>  #especifique o usuario que ira conectar ao CLI (deve estar definido em
> /etc/asterisk/manager.conf)
>  $strUser = "USUARIO";
>
>  #senha para o usuario acima
>  $strSecret = "SENHA";
>
>  #especifique o canal (extension) que vc deseja receber estas ligacoes
>  #exemplo: SIP/XXX, IAX2/XXXX, ZAP/XXXX,
>  $strChannel = "Local/".$origem."@contexto-discador";
>
>  #informe o contexto que ira processar a ligacao para PSTN
>  $strContext = "contexto-pabx";
>
>  #especifique a prioridade do contexto acima
>  $strPriority = "1";
>
>  #especifique a quantidade de tentativas
>  $strMaxRetry = "2";
>
>  $WaitTime = "30";
>
>  #Duração entre uma tentativa e outra
>  $RetryTime = "15";
>
>  #obtem o numero a ser discado
>  $strExten = $destino;
>
>  #especifica um callerid para a ligacao
>  $strCallerId = $origem;
>
>  #nome do arquivo a ser criado
>  $arquivo_tmp = "/tmp/".$strExten.".call";
>  #diretorio a ser movido após escrita
>  $arquivo_call = "/var/spool/asterisk/outgoing/".$strExten.".call";
>
>  #abre arquivo
>  $oSocket = $fp = fopen($arquivo_tmp, "w");
>
>  fputs($oSocket, "Channel: $strChannel\r\n");
>  fputs($oSocket, "Callerid: $strCallerId\r\n");
>  fputs($oSocket, "Extension: $strExten\r\n");
>  fputs($oSocket, "Context: $strContext\r\n");
>  fputs($oSocket, "MaxRetries: $strMaxRetry\r\n");
>  fputs($oSocket, "RetryTime: $RetryTime\r\n");
>  fputs($oSocket, "WaitTime: $WaitTime\r\n\r\n");
>
>  fclose(oSocket);
>
> system("mv ".$arquivo_tmp." ".$arquivo_call);
>
>  //copy($arquivo_tmp,$arquivo_call);
> //unlink($arquivo_tmp);
>
>  echo "ok";
>
> exit;
>
> }else{
> echo "Parametros invalidos";
>
> exit;
> }
> ?>
>
> Através dessa URL esta realizando ligação normalmente, o que gostaria da
> ajuda de vocês, é uma maneira de retornar o status da chamada através dessa
> mesma URL para o sistema.
>
> EX: 0 - ok, 1 - ramal indisponivel, etc
>
> Sei que tem alguma forma, gostaria de saber se alguém já desenvolveu
> alguma coisa assim e pode me dar uma dica.
>
> OBS: Estou escrevendo um arquivo .call e jogando ele dentro do outgoing do
> asterisk para gerar a chamada. No asterisk 11 tentei fazer com o originate
> e não obtive sucesso.
>
> Desde já agradeço.. abraços!!
>
> *att*
> *Danilo Almeida*
>
> _______________________________________________
> WORKOFFEE KHOMP: em Junho serão 2 edições do workshop
> gratuito da Khomp:  dia 11 em Brasília, e dia 18 em Curitiba
> Aproveite e conheça os lançamentos: EBS Server PRO e UMG 100
> Garanta sua vaga e saiba mais em: www.workoffee.com.br
> _______________________________________________
> DIGIVOICE: Fabricante pioneiro em Banco de Canais e Placas E1, GSM, FXO e
> FXS para Asterisk e Elastix. Temos Cursos de Telefonia IP e Asterisk.
> Construa soluções de PABX IP com produtos DigiVoice - visite
> www.digivoice.com.br
> _______________________________________________
> Para remover seu email desta lista, basta enviar um email em branco para
> asteriskbrasil-unsubscribe at listas.asteriskbrasil.org
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20150521/94bd7fbb/attachment.html>


Mais detalhes sobre a lista de discussão AsteriskBrasil