[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