[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