[AsteriskBrasil] Protocolo de Ligação

Alex Sander sanderdabio em globo.com
Quinta Janeiro 9 09:34:11 BRST 2014


Bom dia Wilson.

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...

<?php

include "phpAMI.php";

session_start(); // Inicia a sessão

/**
 * Obtém as variaveis a partir do método GET da página index.php
 */

$agent = $_GET['login'];
$ramal = $_GET['ramal'];

/**
 * Inicia uma instância da classe phpAMI passando os parâmetros usuário e
senha do Asterisk manager Interface (AMI)
 * que possibilita o login e a captura de eventos das chamadas e o IP do
servidor do PABX onde vamos nos conectar e
 * capturar todos os eventos CTI.
 */

$ami=new phpAMI("cti","user","IP");
$login=$ami->login();
if($login["Response"]=="Success"){

    $agentLogado = "Agent/".$agent; // Variável que fornecerá um canal para
recuperação das variáveis da chamada corrente.

    //$valor = $ami->command("database get canalAgent $agent");
    //$ami->dbDel("canalAgent", $agent);

    $rec = $ami->status($agentLogado); // Array que armazena todas as
informações da chamada corrente.

    /**
     * Desvio condicional que verifica se, existindo chamada ativa, os
valores dos arrays estão presentes,
     * e atribui o valor do CallerId, senão define uma mensagem para o
status.
     */

    if(@$rec["List"][$agentLogado])
        {
            $callerid = $rec["List"][$agentLogado]["ConnectedLineNum"];

        } elseif($rec["ListInfo"]["Items"]=="0"){

            $status = "O agente $agent ainda não está logado, efetue o
login.";

        } else {
            $status = "Nao existe Chamada ativa para o agente $agent";
        }

    if(@$callerid)
        {
            $canal = $ami->command("database get Canal $callerid"); //
Obtém as variáveis do canal definido na URA para o CallerID
            $canal =  $canal["Info"]["Value"]; // Obtém o canal específico.
            $protocolo = $ami->getVar("protocolo",$canal); // Obtém o array
com o número do protocolo informado na URA.
            $protocolo = $protocolo["Info"]["Value"]; //Recupera o valor
exato do protocolo;
            $horaInicio = $ami->getVar('CDR(start)', $agentLogado); //
Recupera o array com horário de inico do atendimento pelo agente.
            $horaInicio = $horaInicio['Info']['Value']; //recupera o
horário no formato data e hora
            $horaInicio = explode(" ", $horaInicio); // Separa data da hora
            $hora = $horaInicio[1]; // Define uma variável apenas para hora
            $duracaoChamada = $ami->getVar("CDR(duration)", $agentLogado);
//Obtém o array com tempo de duração da chamada
            $duracaoChamada = $duracaoChamada['Info']['Value']; // Recupera
o tempo exato, em segundos, de duração da chamada do agente em tempo real
            $duracaoChamada = date('i:s', $duracaoChamada); // Formata a
data para minuto e segundos.
            $data = date('d/m/y'); // Define a data atual para o formato do
parâmetro.
            date_default_timezone_set('America/Sao_Paulo'); //Ajusta o
timezone para o horário de São Paulo.
            $horaAtual = date('h:i:s'); //Ajusta a data atual para o
formato do parâmetro.

        }

}

/**
 * Função java script que fecha a janela quando o agente clica em encerrar
captura de eventos.
 */

echo "<script language='Javascript'>
        function fechar(){
          window.opener = window
          window.close()
        }
     </script>";

/**
 * Função PHP que destrói a sessão aberta pelo agente.
 */

    function fecharSessao(){
        session_unset();
        session_destroy();
    }

    if(isset($_GET['fecharSessao'])){
        fecharSessao();
    }

?>
<html>
<head>
    <title>Client CTI</title>
     <meta charset="utf-8">
     <meta HTTP-EQUIV='refresh' CONTENT='1.5'>
     <link rel="stylesheet" href="css/normalize.css">
      <link rel="stylesheet" href="css/foundation.css">
      <link rel='stylesheet' href='css/estilos.css'>
</head>
<body <?php if(!@isset($_SESSION[logado])) echo "onload='fechar();'"
/**
 * A condição dentro da TAG body verifica se existe uma sessão ativa,
 * senão carrega o método javascript fechar() que fecha a janela quando a
página é carregada.
 */
?>>
    <div align="center">
        <img src="img/SLayout.png" alt="minha msg"></img><BR><BR>
    </div>
    <div align="center" class="panel centered"><b>Captura de Eventos CTI -
SAC</b></div>
    <?php

    /**
     * A condição abaixo verifica se as variáveis abaixo estão definidas
     * caso verdadeiro é porque existe uma chamada ativa, então, as
variáveis
     * recuperadas anteriormente podem ser exibidas para o agente.
     * Caso contrário será exibida uma informação de que não existe chamada
ativa.
     */

    if(isset($callerid) || isset($protocolo)){


        echo
            "<table align='center'>
                  <thead>
                    <tr>
                        <th class='alinhaCentro'>Data</th>
                        <th class='alinhaCentro'>Hora</th>
                          <th class='alinhaCentro'>Número Chamador</th>
                          <th class='alinhaCentro'>Protocolo</th>
                          <th class='alinhaCentro'>Ramal</th>
                          <th class='alinhaCentro'>Tempo de Atendimento</th>
                    </tr>
                  </thead>
                  <tbody>
                      <tr>
                          <td class='alinhaCentro'> $data </td>
                          <td class='alinhaCentro'> $hora </td>
                          <td class='alinhaCentro'> $callerid </td>
                          <td class='alinhaCentro'> $protocolo </td>
                          <td class='alinhaCentro'> $ramal </td>
                          <td class='alinhaCentro'> $duracaoChamada</td>
                      </tr>
                  </tbody>
              </table>"
        ;

    } else {
        echo "<div data-alert class='alert-box alert radius
alinhaCentro'><b>$status</b></div>";
    }

    ?>

    <div class="panel clearfix">
        <a align="center" href="?fecharSessao" class="tiny button
radius">Encerrar Captura de Eventos</a>
    </div>
</body>
</html>


Em 2 de janeiro de 2014 14:45, Wilson Ritt Iglesias <wilson.ritt em hotmail.com
> escreveu:

> Boa tarde!
>
> 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 (que no momento é a variável UNIQUEID) tanto para o
> cliente quanto para o atendente. Por enquanto, estou usando uma macro:
>
> [macro-In_dial]
>
> exten =>
> s,1,MixMonitor(${STRFTIME(${EPOCH},,%d_%m_%Y-%H:%M:%S)}-${CALLERID(num)}-${MACRO_EXTEN}-${UNIQUEID}.WAV,b);
> exten => s,n,Answer
> exten => s,n,Playback(custom/protocol)
> exten => s,n,SayDigits(${UNIQUEID})
> 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)
> exten => s,n,Dial(SIP/${MACRO_EXTEN},20)
> exten => s,n,Hangup
>
> porém apenas consigo passar o protocolo para o cliente, não consegui
> repassar isso pro atendente..
>
> Alguém pode dar uma força?
>
> Att.;
>
> Wilson Ritt
>
> _______________________________________________
> 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
> Intercomunicadores para 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://listas.asteriskbrasil.org/pipermail/asteriskbrasil/attachments/20140109/f22ad413/attachment.htm 


Mais detalhes sobre a lista de discussão AsteriskBrasil