Para que tudo funcione, é necessário ter um servidor
Asterisk funcionando. Além disso, vamos precisar:
- Um banco de dados MySQL;
- Um servidor Apache;
- Alterar o nome dos arquivos de áudio salvos pelo Asterisk;
- Criar um Script que alimente o banco de dados.
Não mostrarei como configurar nenhum servidor, somente instalaremos o MonitorAsterisk e modificar algumas configurações para que o mesmo funcione.
Vamos começar clonando o MonitorAsterisk no seu servidor Apache:
git clone https://github.com/hudymoreira/MonitorAsterisk/
Edite o arquivo
DbHelper.php para conficurar o acesso ao banco de dados MySQL:
vi ~/MonitorAsterisk/app/DbHelper.php
Na string de conexão, altere para que funcione com o seu banco de dados e usuário.
$this->con = new PDO("mysql:host=localhost;dbname=SeuBancoDeDados", "usuario", "senha");
Criando Tabelas
Criaremos agora duas tabelas no seu banco de dados, que serão alimentadas pelo script que é consumado pelo PHP:
Tabela "Ligacoes" contem todos os dados pertinentes a cada ligação, incluindo o nome do arquivo de áudio, e a duração de cada um.
CREATE TABLE `Ligacoes` (
`id_ligacao` INT(11) NOT NULL AUTO_INCREMENT,
`ramal` INT(11) NULL DEFAULT NULL,
`data_ligacao` DATETIME NULL DEFAULT NULL,
`arquivo` VARCHAR(254) NULL DEFAULT NULL,
`numero` VARCHAR(20) NULL DEFAULT NULL,
`duracao` DOUBLE NULL DEFAULT NULL,
`bk` BIT(1) NULL DEFAULT NULL,
PRIMARY KEY (`id_ligacao`)
)
Tabela "Usuario" contem somente os usuários que você deseja associar a cada ligação:
CREATE TABLE `Usuario` (
`id_usuario` INT(11) NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(254) NULL DEFAULT NULL,
`ramal` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`id_usuario`)
)
Asterisk, string de salvamento e link simbólico para o PHP (Apache)
Agora, vamos ligar com a forma que o áudio é salvo pelo Asterisk.
adiante, iremos montar um script que depende da nomenclatura do arquivo de áudio para alimentar o banco de dados. No
extensions.conf do seu Asterisk, altere suas configurações, para se adequar a algo parecido com isso:
exten => _XX.,1,Set(MONITOR_FILENAME=${STRFTIME(${EPOCH},,%Y-%m-%d_%H.%M.%S)}_${CDR(src)}_${CDR(dst)}_${CDR(billsec)})
exten => _XX.,n,Mixmonitor(${MONITOR_FILENAME}.wav)
exten => _XX.,n,Dial(SIP/${EXTEN}@tronco-que-centraliza-todas-ligacoes,50)
O arquivo gerado terá o seguinte formato:
[data]_[hora]_[ramal]_[numro do telefone].wav
O script usará o delimitador "_" para extrair as informações que precisa do nome do arquivo.
E, por fim, vamos criar um link simbólico na pasta raiz da nossa página MonitorAsterisk, apontando o diretório onde se encontram as ligações. Ex.:
cd /var/www/html/MonitorAsterisk
sudo ln -s /var/spool/asterisk/monitor/ audio
Chamei o link de 'audio', porém você pode mudar, desde que você edite os arquivos PHP correspondentes a essa alteração, onde fica a instrução que carrega os arquivos na página.
No arquivo
/MonitorAsterisk/views/ligacoes.tpl.php, você pode mudar o "src" para o que quiser, desde que o link seja o mesmo.
<source src="audio/<?php echo $ligacao->getArquivo();?>" type="audio/wav">
Script que alimenta as tabelas
O script a seguir varre o diretório
/var/spool/asterisk/monitor/ e testa cada arquivo, divide os delimitadores no nome e preenche as variáveis. E com o 'sox', extrai a duração de cada áudio em segundos. Com as variáveis preenchidas, ele verifica se a ligação não foi registrada. Caso não, ele grava a informação no banco.
#!/bin/bash
local="/var/spool/asterisk/monitor"
cd $local
for i in `ls`; do
ramal=`cut -d_ -f 3 <<< $i`
data=`cut -d_ -f 1 <<< $i`
hora=`cut -d_ -f 2 <<< $i`
numero=`cut -d_ -f 4 <<< $i`
dataL="$data $(sed "s/./:/g" <<< $hora)"
arquivo=$i
query=`echo "select ramal from Ligacoes where arquivo = '$arquivo' " | mysql MeuBandoDeDados -u usuario -pSenha`
if [ ${#query} -lt 4 ];then
sox $i -n stat 2>/tmp/Mtmp.txt
tmp=`cat /tmp/Mtmp.txt | grep Len`
duracao=`echo $tmp | cut -d: -f2`
rm /tmp/Mtmp.txt
echo "insert into Ligacoes (ramal,data_ligacao,arquivo,numero,duracao,bk) values ($ramal,'$dataL','$arquivo','$numero',$duracao,0)" | mysql MLigacao -u root -pmaster
fi
done
Neste ponto, você deve criar por conta própria uma melhor forma de automatizar esse script.
Utilização - filtro
Se tudo estiver ok, você poderá, através do seu navegador, acessar a página de monitoramento. Óbvio que se não tiver ligações, ou caso tenha e o Script não for rodado nenhuma vez, não terá nada para ver.
Caso já tenha massa crítica para testar, você pode filtrar as ligações que deseje escutar. Seguem alguns screenshots:
Utilização - Ligações
Nessa lista, temos o áudio a ser escutado e os detalhes da ligação:
Utilização - Exportar para o Excel
Você pode exportar o resultado das pesquisa para o Excel, caso precise:
Utilização - Usuário
Caso queira associar o nome de usuário à um ramal ,você pode fazer isso por aqui.
Bom é isso.
Obrigado...