<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>&lt;?php<br><br>include &quot;phpAMI.php&quot;;<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[&#39;login&#39;];<br>
$ramal = $_GET[&#39;ramal&#39;];<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(&quot;cti&quot;,&quot;user&quot;,&quot;IP&quot;);<br>$login=$ami-&gt;login();<br>if($login[&quot;Response&quot;]==&quot;Success&quot;){<br>    <br>    $agentLogado = &quot;Agent/&quot;.$agent; // Variável que fornecerá um canal para recuperação das variáveis da chamada corrente.<br>
    <br>    //$valor = $ami-&gt;command(&quot;database get canalAgent $agent&quot;);<br>    //$ami-&gt;dbDel(&quot;canalAgent&quot;, $agent);<br>    <br>    $rec = $ami-&gt;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[&quot;List&quot;][$agentLogado])<br>        {<br>            $callerid = $rec[&quot;List&quot;][$agentLogado][&quot;ConnectedLineNum&quot;];<br>            <br>        } elseif($rec[&quot;ListInfo&quot;][&quot;Items&quot;]==&quot;0&quot;){<br>
            <br>            $status = &quot;O agente $agent ainda não está logado, efetue o login.&quot;;<br>            <br>        } else {<br>            $status = &quot;Nao existe Chamada ativa para o agente $agent&quot;;<br>
        }<br><br>    if(@$callerid) <br>        {<br>            $canal = $ami-&gt;command(&quot;database get Canal $callerid&quot;); // Obtém as variáveis do canal definido na URA para o CallerID<br>            $canal =  $canal[&quot;Info&quot;][&quot;Value&quot;]; // Obtém o canal específico.<br>
            $protocolo = $ami-&gt;getVar(&quot;protocolo&quot;,$canal); // Obtém o array com o número do protocolo informado na URA.<br>            $protocolo = $protocolo[&quot;Info&quot;][&quot;Value&quot;]; //Recupera o valor exato do protocolo;<br>
            $horaInicio = $ami-&gt;getVar(&#39;CDR(start)&#39;, $agentLogado); // Recupera o array com horário de inico do atendimento pelo agente.<br>            $horaInicio = $horaInicio[&#39;Info&#39;][&#39;Value&#39;]; //recupera o horário no formato data e hora<br>
            $horaInicio = explode(&quot; &quot;, $horaInicio); // Separa data da hora<br>            $hora = $horaInicio[1]; // Define uma variável apenas para hora<br>            $duracaoChamada = $ami-&gt;getVar(&quot;CDR(duration)&quot;, $agentLogado); //Obtém o array com tempo de duração da chamada<br>
            $duracaoChamada = $duracaoChamada[&#39;Info&#39;][&#39;Value&#39;]; // Recupera o tempo exato, em segundos, de duração da chamada do agente em tempo real<br>            $duracaoChamada = date(&#39;i:s&#39;, $duracaoChamada); // Formata a data para minuto e segundos.<br>
            $data = date(&#39;d/m/y&#39;); // Define a data atual para o formato do parâmetro.<br>            date_default_timezone_set(&#39;America/Sao_Paulo&#39;); //Ajusta o timezone para o horário de São Paulo.<br>            $horaAtual = date(&#39;h:i:s&#39;); //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 &quot;&lt;script language=&#39;Javascript&#39;&gt;<br>
        function fechar(){<br>          window.opener = window<br>          window.close()<br>        }<br>     &lt;/script&gt;&quot;;<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[&#39;fecharSessao&#39;])){<br>        fecharSessao();<br>    }<br>               <br>?&gt;<br>&lt;html&gt;<br>&lt;head&gt;<br>    &lt;title&gt;Client CTI&lt;/title&gt;<br>
     &lt;meta charset=&quot;utf-8&quot;&gt;<br>     &lt;meta HTTP-EQUIV=&#39;refresh&#39; CONTENT=&#39;1.5&#39;&gt;<br>     &lt;link rel=&quot;stylesheet&quot; href=&quot;css/normalize.css&quot;&gt;<br>      &lt;link rel=&quot;stylesheet&quot; href=&quot;css/foundation.css&quot;&gt;<br>
      &lt;link rel=&#39;stylesheet&#39; href=&#39;css/estilos.css&#39;&gt;<br>&lt;/head&gt;<br>&lt;body &lt;?php if(!@isset($_SESSION[logado])) echo &quot;onload=&#39;fechar();&#39;&quot;<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>?&gt;&gt;<br>    &lt;div align=&quot;center&quot;&gt;<br>        &lt;img src=&quot;img/SLayout.png&quot; alt=&quot;minha msg&quot;&gt;&lt;/img&gt;&lt;BR&gt;&lt;BR&gt;<br>
    &lt;/div&gt;<br>    &lt;div align=&quot;center&quot; class=&quot;panel centered&quot;&gt;&lt;b&gt;Captura de Eventos CTI - SAC&lt;/b&gt;&lt;/div&gt;<br>    &lt;?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>            &quot;&lt;table align=&#39;center&#39;&gt;<br>                  &lt;thead&gt;<br>                    &lt;tr&gt;<br>
                        &lt;th class=&#39;alinhaCentro&#39;&gt;Data&lt;/th&gt;<br>                        &lt;th class=&#39;alinhaCentro&#39;&gt;Hora&lt;/th&gt;<br>                          &lt;th class=&#39;alinhaCentro&#39;&gt;Número Chamador&lt;/th&gt;<br>
                          &lt;th class=&#39;alinhaCentro&#39;&gt;Protocolo&lt;/th&gt;<br>                          &lt;th class=&#39;alinhaCentro&#39;&gt;Ramal&lt;/th&gt;<br>                          &lt;th class=&#39;alinhaCentro&#39;&gt;Tempo de Atendimento&lt;/th&gt;<br>
                    &lt;/tr&gt;<br>                  &lt;/thead&gt;<br>                  &lt;tbody&gt;<br>                      &lt;tr&gt;<br>                          &lt;td class=&#39;alinhaCentro&#39;&gt; $data &lt;/td&gt;<br>
                          &lt;td class=&#39;alinhaCentro&#39;&gt; $hora &lt;/td&gt;<br>                          &lt;td class=&#39;alinhaCentro&#39;&gt; $callerid &lt;/td&gt;<br>                          &lt;td class=&#39;alinhaCentro&#39;&gt; $protocolo &lt;/td&gt;<br>
                          &lt;td class=&#39;alinhaCentro&#39;&gt; $ramal &lt;/td&gt;<br>                          &lt;td class=&#39;alinhaCentro&#39;&gt; $duracaoChamada&lt;/td&gt;<br>                      &lt;/tr&gt;<br>
                  &lt;/tbody&gt;<br>              &lt;/table&gt;&quot;<br>        ;<br><br>    } else {<br>        echo &quot;&lt;div data-alert class=&#39;alert-box alert radius alinhaCentro&#39;&gt;&lt;b&gt;$status&lt;/b&gt;&lt;/div&gt;&quot;;<br>
    }<br>    <br>    ?&gt;<br>    <br>    &lt;div class=&quot;panel clearfix&quot;&gt; <br>        &lt;a align=&quot;center&quot; href=&quot;?fecharSessao&quot; class=&quot;tiny button radius&quot;&gt;Encerrar Captura de Eventos&lt;/a&gt; <br>
    &lt;/div&gt;<br>&lt;/body&gt;<br>&lt;/html&gt;<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">&lt;<a href="mailto:wilson.ritt@hotmail.com" target="_blank">wilson.ritt@hotmail.com</a>&gt;</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 =&gt; s,1,MixMonitor(${STRFTIME(${EPOCH},,%d_%m_%Y-%H:%M:%S)}-${CALLERID(num)}-${MACRO_EXTEN}-${UNIQUEID}.WAV,b);</div>
<div>exten =&gt; s,n,Answer</div><div>exten =&gt; s,n,Playback(custom/protocol)</div><div>exten =&gt; s,n,SayDigits(${UNIQUEID})</div><div>exten =&gt; 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 =&gt; s,n,Dial(SIP/${MACRO_EXTEN},20)</div><div>exten =&gt; 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>