<div dir="ltr"><div>Bom dia Wilson.<br><br></div>Fiz algo parecido usando AMI, mas no meu caso eu desenvolvi uma URA em AGI que resgatava o protocolo no CRM via webservice, daí eu defini uma variável de canal chamada protocolo e recuperava do agente que atendia a chamada. Segue o exemplo da página de testes que fiz. Se sabe programar em PHP vai entender o suficiente para começar seus testes e fuçar os comandos AMI...<br>
<br><?php<br><br>include "phpAMI.php";<br><br>session_start(); // Inicia a sessão<br><br>/**<br> * Obtém as variaveis a partir do método GET da página index.php<br> */<br> <br>$agent = $_GET['login'];<br>
$ramal = $_GET['ramal'];<br><br>/**<br> * Inicia uma instância da classe phpAMI passando os parâmetros usuário e senha do Asterisk manager Interface (AMI)<br> * que possibilita o login e a captura de eventos das chamadas e o IP do servidor do PABX onde vamos nos conectar e<br>
* capturar todos os eventos CTI.<br> */<br><br>$ami=new phpAMI("cti","user","IP");<br>$login=$ami->login();<br>if($login["Response"]=="Success"){<br> <br> $agentLogado = "Agent/".$agent; // Variável que fornecerá um canal para recuperação das variáveis da chamada corrente.<br>
<br> //$valor = $ami->command("database get canalAgent $agent");<br> //$ami->dbDel("canalAgent", $agent);<br> <br> $rec = $ami->status($agentLogado); // Array que armazena todas as informações da chamada corrente.<br>
<br> /**<br> * Desvio condicional que verifica se, existindo chamada ativa, os valores dos arrays estão presentes,<br> * e atribui o valor do CallerId, senão define uma mensagem para o status. <br> */<br>
<br> if(@$rec["List"][$agentLogado])<br> {<br> $callerid = $rec["List"][$agentLogado]["ConnectedLineNum"];<br> <br> } elseif($rec["ListInfo"]["Items"]=="0"){<br>
<br> $status = "O agente $agent ainda não está logado, efetue o login.";<br> <br> } else {<br> $status = "Nao existe Chamada ativa para o agente $agent";<br>
}<br><br> if(@$callerid) <br> {<br> $canal = $ami->command("database get Canal $callerid"); // Obtém as variáveis do canal definido na URA para o CallerID<br> $canal = $canal["Info"]["Value"]; // Obtém o canal específico.<br>
$protocolo = $ami->getVar("protocolo",$canal); // Obtém o array com o número do protocolo informado na URA.<br> $protocolo = $protocolo["Info"]["Value"]; //Recupera o valor exato do protocolo;<br>
$horaInicio = $ami->getVar('CDR(start)', $agentLogado); // Recupera o array com horário de inico do atendimento pelo agente.<br> $horaInicio = $horaInicio['Info']['Value']; //recupera o horário no formato data e hora<br>
$horaInicio = explode(" ", $horaInicio); // Separa data da hora<br> $hora = $horaInicio[1]; // Define uma variável apenas para hora<br> $duracaoChamada = $ami->getVar("CDR(duration)", $agentLogado); //Obtém o array com tempo de duração da chamada<br>
$duracaoChamada = $duracaoChamada['Info']['Value']; // Recupera o tempo exato, em segundos, de duração da chamada do agente em tempo real<br> $duracaoChamada = date('i:s', $duracaoChamada); // Formata a data para minuto e segundos.<br>
$data = date('d/m/y'); // Define a data atual para o formato do parâmetro.<br> date_default_timezone_set('America/Sao_Paulo'); //Ajusta o timezone para o horário de São Paulo.<br> $horaAtual = date('h:i:s'); //Ajusta a data atual para o formato do parâmetro.<br>
<br> }<br><br>}<br><br>/**<br> * Função java script que fecha a janela quando o agente clica em encerrar captura de eventos.<br> */<br> <br>echo "<script language='Javascript'><br>
function fechar(){<br> window.opener = window<br> window.close()<br> }<br> </script>";<br><br>/**<br> * Função PHP que destrói a sessão aberta pelo agente.<br> */<br><br> function fecharSessao(){<br>
session_unset();<br> session_destroy();<br> }<br><br> if(isset($_GET['fecharSessao'])){<br> fecharSessao();<br> }<br> <br>?><br><html><br><head><br> <title>Client CTI</title><br>
<meta charset="utf-8"><br> <meta HTTP-EQUIV='refresh' CONTENT='1.5'><br> <link rel="stylesheet" href="css/normalize.css"><br> <link rel="stylesheet" href="css/foundation.css"><br>
<link rel='stylesheet' href='css/estilos.css'><br></head><br><body <?php if(!@isset($_SESSION[logado])) echo "onload='fechar();'"<br>/**<br> * A condição dentro da TAG body verifica se existe uma sessão ativa, <br>
* senão carrega o método javascript fechar() que fecha a janela quando a página é carregada.<br> */<br>?>><br> <div align="center"><br> <img src="img/SLayout.png" alt="minha msg"></img><BR><BR><br>
</div><br> <div align="center" class="panel centered"><b>Captura de Eventos CTI - SAC</b></div><br> <?php <br> <br> /** <br> * A condição abaixo verifica se as variáveis abaixo estão definidas<br>
* caso verdadeiro é porque existe uma chamada ativa, então, as variáveis<br> * recuperadas anteriormente podem ser exibidas para o agente.<br> * Caso contrário será exibida uma informação de que não existe chamada ativa.<br>
*/<br> <br> if(isset($callerid) || isset($protocolo)){<br> <br> <br> echo <br> "<table align='center'><br> <thead><br> <tr><br>
<th class='alinhaCentro'>Data</th><br> <th class='alinhaCentro'>Hora</th><br> <th class='alinhaCentro'>Número Chamador</th><br>
<th class='alinhaCentro'>Protocolo</th><br> <th class='alinhaCentro'>Ramal</th><br> <th class='alinhaCentro'>Tempo de Atendimento</th><br>
</tr><br> </thead><br> <tbody><br> <tr><br> <td class='alinhaCentro'> $data </td><br>
<td class='alinhaCentro'> $hora </td><br> <td class='alinhaCentro'> $callerid </td><br> <td class='alinhaCentro'> $protocolo </td><br>
<td class='alinhaCentro'> $ramal </td><br> <td class='alinhaCentro'> $duracaoChamada</td><br> </tr><br>
</tbody><br> </table>"<br> ;<br><br> } else {<br> echo "<div data-alert class='alert-box alert radius alinhaCentro'><b>$status</b></div>";<br>
}<br> <br> ?><br> <br> <div class="panel clearfix"> <br> <a align="center" href="?fecharSessao" class="tiny button radius">Encerrar Captura de Eventos</a> <br>
</div><br></body><br></html><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">Em 2 de janeiro de 2014 14:45, Wilson Ritt Iglesias <span dir="ltr"><<a href="mailto:wilson.ritt@hotmail.com" target="_blank">wilson.ritt@hotmail.com</a>></span> escreveu:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div><div dir="ltr">Boa tarde!<div><br></div><div>Estou tentando implementar um código para que seja repassado um protocolo de ligação para os clientes, e gostaria de saber se existe alguma forma de exibir esse protocolo <span style="font-size:12pt">(que no momento é a variável UNIQUEID)</span><span style="font-size:12pt"> </span><span style="font-size:12pt">tanto para o cliente quanto para o atendente. Por enquanto, estou usando uma macro:</span></div>
<div><span style="font-size:12pt"><br></span></div><div><div>[macro-In_dial]</div><div><br></div><div>exten => s,1,MixMonitor(${STRFTIME(${EPOCH},,%d_%m_%Y-%H:%M:%S)}-${CALLERID(num)}-${MACRO_EXTEN}-${UNIQUEID}.WAV,b);</div>
<div>exten => s,n,Answer</div><div>exten => s,n,Playback(custom/protocol)</div><div>exten => s,n,SayDigits(${UNIQUEID})</div><div>exten => s,n,NoOp(Ligacao para o ramal ${MACRO_EXTEN}, arquivo de gravacao ${STRFTIME(${EPOCH},,%d_%m_%Y-%H:%M:%S)}-${CALLERID(num)}-${MACRO_EXTEN}-${UNIQUEID}.WAV)</div>
<div>exten => s,n,Dial(SIP/${MACRO_EXTEN},20)</div><div>exten => s,n,Hangup</div><div style="font-size:12pt"><br></div></div><div style="font-size:12pt">porém apenas consigo passar o protocolo para o cliente, não consegui repassar isso pro atendente.. </div>
<div style="font-size:12pt"><br></div><div style="font-size:12pt">Alguém pode dar uma força?</div><div style="font-size:12pt"><br></div><div style="font-size:12pt">Att.;</div><div style="font-size:12pt"><br></div><div style="font-size:12pt">
Wilson Ritt</div>                                            </div></div>
<br>_______________________________________________<br>
KHOMP: completa linha de placas externas FXO, FXS, GSM e E1<br>
Media Gateways de 1 a 64 E1s para SIP com R2, ISDN e SS7<br>
Intercomunicadores para acesso remoto via rede IP e telefones IP<br>
Conheça todo o portfólio em <a href="http://www.Khomp.com" target="_blank">www.Khomp.com</a><br>
_______________________________________________<br>
Para remover seu email desta lista, basta enviar um email em branco para <a href="mailto:asteriskbrasil-unsubscribe@listas.asteriskbrasil.org">asteriskbrasil-unsubscribe@listas.asteriskbrasil.org</a><br></blockquote></div>
<br></div>