62
Rodrigo Ricardo Passos Construindo URA e Sistemas de Call Center com Asterisk www.encontrovoipcenter.com.br

Construindo URA e Sistemas de Call Center com Asterisk

Embed Size (px)

DESCRIPTION

Orientar desenvolvedores sobre a utilização do Asterisk para desempenhar o papel de uma URA com programação avançada. Estabelecer uma infra-estrutura para empresas que precisam de um sistema de Contact/Call Center Prover conhecimento para empresas que querem partir para o desenvolvimento de uma solução de Contact/Call Center baseado em Asterisk

Citation preview

Page 1: Construindo URA e Sistemas de Call Center com Asterisk

Rodrigo Ricardo Passos

Construindo URA e Sistemas de Call Center com Asterisk

www.encontrovoipcenter.com.br

Page 2: Construindo URA e Sistemas de Call Center com Asterisk

Apresentação

• Rodrigo Ricardo Passos• [email protected]

• Cursou Ciências da Computação na Universidade Católica de Petrópolis. Atualmente tem desempenhado o papel de gestor da IAXCOMM, um empresa prestadora de serviços na área de desenvolvimento de projetos em Telecomunicações. Foi gestor da Plataforma e Serviços de Comunicações dos clientes do InfoLink, que visa integrar redes de dados e telefonia bem como todo o relacionamento com fornecedores e modelagem do projeto desde o pré-venda até o pós-venda. É especialista em Redes e possui amplo conhecimento em engenharia de tráfego e Gestão de Segurança da Informação. Atuou em grandes projetos de start-up no Rio de Janeiro e em projetos de telecomunicações. Possui profundo conhecimento em Asterisk, equipamentos Cisco, e Sistemas Operacionais Linux, FreeBSD e OpenBSD.

Page 3: Construindo URA e Sistemas de Call Center com Asterisk

Objetivos

• Orientar desenvolvedores sobre a utilização do Asterisk para desempenhar o papel de uma URA com programação avançada.

• Estabelecer uma infra-estrutura para empresas que precisam de um sistema de Contact/Call Center

• Prover conhecimento para empresas que querem partir para o desenvolvimento de uma solução de Contact/Call Center baseado em Asterisk

Page 4: Construindo URA e Sistemas de Call Center com Asterisk

Agenda

• Asterisk e AEL• Elaborando o Projeto URA• Desenvolvimento de URA• Implementação do Projeto URA• Elaborando o Projeto Contact/Call Center• Desenvolvimento do Projeto Contact/Call

Center• Segmentos de mercado Open e Clouse Source

com Asterisk

Page 5: Construindo URA e Sistemas de Call Center com Asterisk

Asterisk AEL

• O que é AEL (Asterisk Extension Language)• Uma estrutura de desenvolvimento de plano

de discagem em forma de linguagem de programação

• Com o AEL o plano de discagem se torna mais dinâmico o que garante uma elasticidade no tratamento das ligações no Asterisk

Page 6: Construindo URA e Sistemas de Call Center com Asterisk

Asterisk AEL

• Estrutura do AEL• Módulo

– /usr/lib/asterisk/modules/pbx_ael.so• Arquivo de configuração

– /etc/asterisk/extensions.ael

Page 7: Construindo URA e Sistemas de Call Center com Asterisk

Asterisk AEL

• Estrutura do AEL• Declaração de variáveis globais

globals {PLANORAMAIS="_5XX";VIRTUAL="_415[2-9]";

};• Contextos e extensões

context EntradaPSTN {${VIRTUAL} => {

Set(RAMAL=${EXTEN});&MGravaRamal(${RAMAL},${CALLERID(num));Dial(SIP/${RAMAL},60,Ttr);Congestion();

}};

• Macrosmacro MGravaRamalSaida(RAMAL,ORIGEM) {

Set(recordLocation=saida/PA);Set(DateDir=${STRFTIME(${EPOCH},,%d-%m-%Y)});System(/bin/mkdir /var/spool/asterisk/monitor/${recordLocation}/${DateDir});MixMonitor(${recordLocation}/${DateDir}/Hora-${STRFTIME(${EPOCH},,%H-%M-%S)}-Origem-${RAMAL}-Origem-${Origem}.wav,W(4));return;

};

Page 8: Construindo URA e Sistemas de Call Center com Asterisk

Asterisk AEL

Page 9: Construindo URA e Sistemas de Call Center com Asterisk

Asterisk AEL

Page 10: Construindo URA e Sistemas de Call Center com Asterisk

Asterisk AEL

Page 11: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

• O que preciso fazer antes de programar uma URA?– Mapear os pontos de funções– Mapear as informações que serão enviadas pelo

DTMF– Criar um dicionário de dados– Mapear as exceções– Criar mensagens de áudio para orientar os

usuários – Criar o fluxograma

Page 12: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

Page 13: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

Page 14: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

Page 15: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

Page 16: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

Page 17: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto URA

Page 18: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento de URA

• Código da URA em AEL• Código Cliente do Web Service• Código Cliente do Banco de Dados Oracle

Page 19: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento de URA

• Asterisk – /etc/asterisk/func_odbc.conf[AgentLogin]dsn=ironvoxread=select IdUsuario from IronvoxUser where IdUsuario='${SQL_ESC(${ARG1})}'prefix=IRONVOX

[TaskView]dsn=ironvoxread=select idIronvoxTaskView, NumOS, TaskToExec, TaskDone, TaskDHinicial from IronvoxTaskView where NumOS='$

{SQL_ESC(${ARG1})}'prefix=IRONVOX

[TaskInclude]dsn=ironvoxwrite=insert into IronvoxTaskView (NumOS, TaskToExec, TaskDHinicial) values ('${SQL_ESC(${VAL1})}', '${SQL_ESC($

{VAL2})}', '${SQL_ESC(${VAL3})}')prefix=IRONVOX

[TaskUpdate]dsn=ironvoxwrite=UPDATE IronvoxTaskView SET TaskDone='${SQL_ESC(${VAL1})}' WHERE idIronvoxTaskView='${SQL_ESC($

{ARG1})}'prefix=IRONVOX

Page 20: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento de URA

• Asterisk – /etc/asterisk/func_odbc.conf[Audit]dsn=ironvoxwrite=INSERT into UraAudit (datahora,idContatos,posicaoura,descricao) values ('$

{SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}','${SQL_ESC(${VAL3})}','${SQL_ESC(${VAL4})}')

prefix=IRONVOX

[CloseOS]dsn=ironvoxwrite=INSERT into OSFechamento (datahora,idContatos,tipoos,numeroos,permissor)

values ('${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}','${SQL_ESC(${VAL3})}','${SQL_ESC(${VAL4})}'

,'${SQL_ESC(${VAL5})}')prefix=IRONVOX

Page 21: Construindo URA e Sistemas de Call Center com Asterisk

Implementação do Projeto URA

• O que foi utilizado?– Servidor HP ML110– Placa Digivoice– Debian Linux– Banco de Dados Mysql– Perl

• DBD::Mysql• DBD::Oracle• SOAP::Lite

– UnixODBC– Asterisk 1.4.25

Page 22: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• No que devo pensar?– Requisições do cliente

• Integração com CRM• Quantidade de ligações• Gravações de chamadas• Rota de menor custo• Relatórios

– Filas ACD– Agentes– Tarifação

– Infra-estrutura • Servidor • Meio de comunicação (R2, ISDN, SIP Trunk)• Rede Interna

– Cabeamento de rede– Switch

• Telefonia– Telefone IP– Soft Phone– FXS

Page 23: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Cenário padrão – comum e precisa ser evitado– Baixo custo de implementação– Alto custo de suporte– Cliente insatisfeito– Técnico escravo da solução– Design do ambiente

• Servidor convencional• Placa E1 sem cancelamento de eco• Switch sem QoS• Gateway FXS• Telefones Analógicos• Gravação de todos os PA´s• Relatórios

Page 24: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

Page 25: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

O resultado, segundo Charles Darwin!!! A empresaA empresa O ClienteO Cliente

Page 26: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Então, onde estou errando?• Meus problemas são:

– Quando executo um relatório, as ligações picotam?– Estou consumindo mais 90% do processamento do

meu servidor.– O que sei:

• Estou com 26 chamadas• Tenho 4 chamadas na fila de espera• O cliente reclama que ouve sua própria voz e que a voz do

operador está baixa• O operador diz que a ligação picota e pede ao cliente que

repita o que disse

Page 27: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

Page 28: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• A solução precisa:– Ser escalável, ou seja, ter capacidade de crescimento,

seja ele na demanda de processamento ou na demanda de crescimento de atendimento;

– Ser redundante. Não pode parar, seja qual for motivo. Quem tem um, não tem nenhum!

– Prover segurança. O cliente confia que não perderá informações das chamadas, sejam as gravações, tarifações ou simplesmente deseja manter histórico do seu atendimento

– Estar de acordo com as leis: DECRETO Nº 6.523, DE 31 DE JULHO DE 2008.

Page 29: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Informações necessárias– Quantidade de troncos

• Calculadora de Erlang B

– Quantidade de agentes• Calculadora de Erlang C

– Onde encontro as calculadoras• http://www.erlang.com.br

Page 30: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Design de cenários– Sistema requer gravação de ligações– 2 E1´S ISDN com 70% de taxa de ocupação– Operação requer escuta de ligações– O projeto prevê solução com alta

disponibilidade– O cliente é um Call Center hibrido– Rede interna possui switches gerenciáveis e

fazem QoS

Page 31: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

Page 32: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Design técnico– Banco de dados MySQL com Replicação Master-Master– LinuxHA (Heartbeat)– Rsync para sincronizar gravações de chamadas– Pacotes SIP e RTP marcados com o DiffServ

• SIP CS3• RTP EF

– Switch gerenciável com filas de prioridades para pacotes SIP e RTP– E1 (R2 ou ISDN) com cancelamento de eco na interface– Servidores DAC de fabricante XPTO com processador Dual Xeon Quad– Servidores GW de fabricante XPTO com processador Xeon escalável até 4 E1– DAC gerencia as filas, os ramais SIP e grava as ligações– GW gerencia chamadas da PSTN e faz entroncamento SIP com o DAC– DTMF RFC2833– Codec G711A– Gateway FXS do fabricante XPTO com 24 portas– Telefones IP do fabricante XPTO com suporte a 2 linhas– Soft Phone com Headset USB do fabricante XPTO com processador DSP

Page 33: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Design técnico– Asterisk 1.4.26 no DAC

• Plano de discagem em AEL• Integração com Banco de Dados MySQL com

UnixODBC• Ramais SIP em Realtime• Filas utilizando Realtime• Agentes utilizando Realtime• Gravação utilizando Mixmonitor• Escuta das ligações utilizando o ChanSpy• Integração com CRM/ERP utilizando Web Services• XMPP para envio de mensagem ao Operador

Page 34: Construindo URA e Sistemas de Call Center com Asterisk

Elaborando o Projeto Contact/Call Center

• Design técnico– Asterisk 1.4.26 no GW

• Plano de discagem em AEL• URA institucional • Mensagens da URA gravadas no forma WAV• Troncos SIP utilizando Realtime

Page 35: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Antes de começarmos a instalar o DAC

precisamos acertar as seguintes configurações de Banco de Dados.

• Criando tabelas no MySQL• Configurando o UnixODBC

– /etc/odbc.ini– /etc/asterisk/res_odbc.conf

Page 36: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Filas e Agentes – Realtime

• /etc/asterisk/extconfig.conf• Informações adicionais em:

– http://www.voip-info.org/wiki/view/Asterisk+RealTime+Queue

Page 37: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Login, Logout, Pausas no DAC utilizando o AELcontext funcoes {

_*72 => { &MProfile(2); Hangup(); } _*73 => { &MProfile(3); Hangup(); } _*82 => { &MProfile(1); Hangup(); } _*83 => { &MProfile(4); Hangup(); }

}

Page 38: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Login, Logout, Pausas no DAC utilizando o AELmacro MProfile(TIPO) { NoCDR(); NoOp(${CHANNEL:0:7}); Read(senha|pin|4); if (${TIPO} = 1){ NoOp("Chamando o agi para autenticacao"); AGI(profile.pl|${TIPO}|${senha}|${CHANNEL:0:7}); } else if (${TIPO} = 2) { NoOp("Chamando o agi para logout"); AGI(profile.pl|${TIPO}|${senha}); } else if (${TIPO} = 3) { NoOp("Adicionando uma pausa no agente"); AGI(profile.pl|${TIPO}|${senha}); } else if (${TIPO} = 4) { NoOp("removendo a pausa do agente"); AGI(profile.pl|${TIPO}|${senha}); }};

Page 39: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Login, Logout, Pausas no DAC utilizando o AEL– AGI em Perl

Page 40: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Enviando a chamada para um Agentecontext DAC {

${PLANORAMAIS} => {Set(CHANNEL(language)=pt_BR);Set(extensao=SIP/${EXTEN});NoOp(${extensao});NoOp("Member Interface: ${MEMBERINTERFACE}");if ("${extensao}" != "") {

NoOp('Chamada para Queue do numero ${CALLERID(num)}');

NoOp("Estado do Device da extensao ${extensao}: ${DEVSTATE(${extensao})}");

if ("${DEVSTATE(${extensao})}" = "NOT_INUSE") {SIPAddHeader(Alert-Info: Bellcore-r7);Set(jabber=${DB(jabber/${extensao})});

NoOp(${CALLERID(num)});&MToXMPP(${CALLERID(num)}|${jabber});Dial(${extensao},60,Ttr);

}else if ("${DEVSTATE(${extensao})}" = "INUSE"){

Busy();}

}}

};

Page 41: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Enviando a chamada para um Agentemacro MToXMPP(CNumero,DST){

AGI(intranet.pl|${CNumero}|${DST}); Set(MENSAGEM=Mensagem do PABX - Voce recebera

uma ligacao do telefone ${CALLERID(num)}); if ("${MATRICULA}" != "") { NoOp('Cliente ${CLIENTE} e Maricula ${MATRICULA}'); Set(MENSAGEM=${MENSAGEM} - Provavel Cliente ${CLIENTE}:

http:///intranet.xpto.com.br/usuario.itm?Matricula=${MATRICULA}); } JAbberSend(ipbx,${jabber},${MENSAGEM});

};

Page 42: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Enviando a chamada para um Agente– AGI do CTI

Page 43: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Plano de discagem

• Enviando a chamada para um Agente

– Descrição do processo

Page 44: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Relatórios

• Depois que uma chamada é atendida entra em uma determinada Fila ACD e é enviada para um agente, todo processo é registrado no /var/log/asterisk/queue_log e se por um acaso não for configurado um NoCDR no plano de discagem todo o processo percorrido por uma ligação fica registrado no MySQL (CDR).

Page 45: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Relatórios

• Entendendo o queue_log– O queue_log tem os seguintes registros:

» epoch timestamp of listed action » uniqueid of call » queue name » bridged channel » event » event parameter 1 » event parameter 2 » event parameter 3

– Informações: http://www.voip-info.org/wiki/view/Asterisk+log+queue_log

Page 46: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Relatórios

• Entendendo o queue_log– O campo event dá a diretiva do que está acontecendo no app_queue, ou seja,

este campo é de extrema importância para encontrar informações sobre o curso de uma chamada em uma Fila ACD

– A informações do campo event são:» ABANDON – O Cliente que ligou para a Fila ACD abandona/desiste de sua

posição na fila. Este evento possui os seguintes parâmetros: position|origposition|waittime

» AGENTDUMP - O Agente sofre um “Dump” quando espera pelo anuncio da uma chamada

» AGENTLOGIN – Agente entra na Fila ACD. Este evento possui o seguinte parâmetro: channel

» AGENTCALLBACKLOGIN – Agente entra na Fila ACD através da aplicação AgentCallbackLogin. Este evento possui o seguinte parâmetro: exten@context

» AGENTLOGOFF- Agente saiu da Fila ACD. Este evento possui os seguintes parâmetros: channel|logintime

Page 47: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

» AGENTCALLBACKLOGOFF – Agente sai da Fila ACD através da aplicação AgentCallbackLogin. Este evento possui os seguinte parâmetros: exten@context|logintime|reason

» COMPLETEAGENT – Informa se a chamada foi desligada pelo Agente. Este evento possui os seguintes parâmetros: holdtime|calltime|origposition

» COMPLETECALLER – Informa se a chamada foi desligada pelo Cliente. Este evento tem os seguintes parâmetros: holdtime|calltime|origposition

» CONFIGRELOAD – Informa se o app_queue sofreu um reload nas configurações.

» CONNECT – Informa quando uma ligação foi conectada a um Agente. Este evento possui os seguintes parâmetros: holdtime|bridgedchannel|uniqueid

» ENTERQUEUE – Informa quando uma chamada entrou na Fila ACD. Este evento possui os seguintes parâmetros: url|callerid

Page 48: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

» EXITEMPTY – Informa quando um cliente foi desconectado da fila quando nenhum agente encontrava-se presente. Este evento possui os seguintes parâmetros: position|origposition|waittime

» EXITWITHKEY – Informa quando um cliente saiu da fila digitando uma tecla no telefone. Este tecla dispara uma ação no app_queue e pode ser vista na aplicação Queue. Este evento possui os seguintes parâmetros: key|position

» EXITWITHTIMEOUT – Informa quando um cliente foi desconectado da fila porque o tempo de espera excedeu. Este evento possui o seguinte parâmetro: position

» QUEUESTART – Informa o momento em que a app_queue foi iniciada.

» SYSCOMPAT - Informa quando uma chamada do atendida por uma agente mas houve uma incompatibilidade pelo tipo de canal e a chamada foi descartada.

» TRANSFER – Informa quando uma chamada foi transferida por uma agente para um ramal ou uma extensão dentro do Asterisk. Este evento possui os seguintes parâmetros: extension|context|holdtime|calltime

Page 49: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Relatórios

• O Asterisk, na versão 1.4 não inclui os registros que são gerados pelo app_queue no arquivo queue_log automaticamente, para isso faz-se necessário uma aplicação que lê o queue_log e adicione as informações no MySQL.

• Para resolver esse problema, fez-se necessário o seguintes procedimentos:

Page 50: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

– Criar o queue_log como um “named pipe” através do comando mkfifo:

» mkfifo queue_log– Criar uma aplicação em Perl que leia o named pipe e faça

a inclusão das informações no Banco de Dados MySQL:» /usr/local/bin/queuelog.pl

Page 51: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Snapshot do queue_log1252095064|1252095039.6310|Ouvidoria|mcspereira|CONNECT|16|1252095048.63111252095155|1252095039.6310|Ouvidoria|mcspereira|COMPLETECALLER|16|91|11252095294|1252094906.6301|Ouvidoria|lbortolini|COMPLETEAGENT|51|327|11252095303|NONE|Ouvidoria|lbortolini|PAUSE|1252095303|NONE|Publico|lbortolini|PAUSE|1252095411|1252095401.6318|Ouvidoria|NONE|ENTERQUEUE||31356138161252095419|1252095401.6318|Ouvidoria|mcspereira|CONNECT|8|1252095411.63191252095668|NONE|Ouvidoria|lbortolini|UNPAUSE|1252095668|NONE|Publico|lbortolini|UNPAUSE|1252095717|1252095401.6318|Ouvidoria|mcspereira|COMPLETECALLER|8|298|11252096784|1252096774.6340|Ouvidoria|NONE|ENTERQUEUE||51320948471252096790|1252096774.6340|Ouvidoria|mcspereira|CONNECT|6|1252096784.63411252096860|1252096850.6345|Ouvidoria|NONE|ENTERQUEUE||42322252911252096867|1252096850.6345|Ouvidoria|lbortolini|CONNECT|7|1252096860.63461252096926|1252096774.6340|Ouvidoria|mcspereira|COMPLETECALLER|6|136|11252096945|1252096935.6350|Ouvidoria|NONE|ENTERQUEUE||37327611471252096950|1252096935.6350|Ouvidoria|mcspereira|CONNECT|5|1252096945.63511252097059|1252096935.6350|Ouvidoria|mcspereira|COMPLETEAGENT|5|109|11252097204|1252097202.6356|Ouvidoria|Local/518@DAC/n|REMOVEMEMBER|1252097204|1252097202.6356|Publico|Local/518@DAC/n|REMOVEMEMBER|1252097262|1252096850.6345|Ouvidoria|lbortolini|COMPLETEAGENT|7|395|11252097410|1252097400.6364|Ouvidoria|NONE|ENTERQUEUE||37327611471252097419|1252097400.6364|Ouvidoria|lbortolini|CONNECT|9|1252097410.63651252097567|1252097564.6369|Publico|Local/518@DAC/n|ADDMEMBER|

Page 52: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Implementado o DAC– Relatórios

• Feito a importação do queue_log para o Banco de Dados MySQL, pode-se fazer query´s que permitam unir os registros da tabela cdr com a tabela queue_log. A relação entre as tabelas é o campo uniqueid.

• Exemplo de uma query “stored procedure”:

Page 53: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

DROP PROCEDURE `sp_ProcRelatorioQueueCompleted`//CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProcRelatorioQueueCompleted`(IN dataInicial varchar(12), IN dataFinal

varchar(12), IN queueNome varchar(20))BEGINDECLARE diaInicial varchar(2);DECLARE mesInicial varchar(2);DECLARE anoInicial varchar(4);DECLARE diaFinal varchar(2);DECLARE mesFinal varchar(2);DECLARE anoFinal varchar(4); DECLARE InitialDate VARCHAR(20); DECLARE FinalDate VARCHAR(20); SET diaInicial = SUBSTR(dataInicial,1,2);SET mesInicial = SUBSTR(dataInicial,4,2); SET anoInicial = SUBSTR(dataInicial,7,4); SET diaFinal = SUBSTR(dataFinal,1,2);SET mesFinal = SUBSTR(dataFinal,4,2); SET anoFinal = SUBSTR(dataFinal,7,4); SET InitialDate = CONCAT(anoInicial,'-',mesInicial,'-',diaInicial,' 00:00:00'); SET FinalDate = CONCAT(anoFinal,'-',mesFinal,'-',diaFinal,' 23:59:59'); SELECT c.src,q.id,logdate,q.`timestamp`,q.callid,q.qname,q.agent,q.`action`,q.info1,q.info2,q.info3 FROM queuelog as q left join cdr as c on q.callid = c.uniqueid where q.qname = queueNome and q.logdate >= InitialDate and q.logdate <= FinalDate and q.`action` like 'COMPLETE%';END

Page 54: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Utilizando o LinuxHA– O que é necessário:

• Heartbeat• MySQL Master-Master

Page 55: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Configurando o Heatbeat nos servidores DAC01 e DAC02– /etc/hosts

172.16.0.13 dac02. xpto.com.br dac02172.16.0.12 dac01. xpto.com.br dac01

– /etc/ha.d/ha.cfdebugfile /var/log/ha-debuglogfile /var/log/ha-loglogfacility local0keepalive 2deadtime 5 initdead 20udpport 694ucast eth0 172.16.0.13 # Quando for o dac01, colocar 172.16.0.12auto_failback off # Quando for o dac01, colocar remove off e coloca onnode gw01.xpto.com.brnode gw02. xpto.com.br

– /etc/ha.d/haresourcesdac01.xpto.com.br IPaddr::172.16.0.10/24/eth0 asterisk

– /etc/asterisk/sip.confbindaddr=172.16.0.10

Page 56: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Configurando o MySQL Master-Master no servidores DAC01 e DAC02– DAC01 como Master

• Editando o /etc/my.cnf[mysqld]

datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockold_passwords=1

log-binbinlog-do-db=<asterisk>  # input the database which should be replicatedbinlog-ignore-db=mysql            # input the database that should be ignored for replicationbinlog-ignore-db=test

server-id=1

[mysql.server]user=mysqlbasedir=/var/lib

[mysqld_safe]err-log=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

• Rodar o seguinte comando no mysql:grant replication slave on *.* to 'replication'@172.16.0.13 identified by 'slave‘;

• Restart no mysql service mysqld restart

Page 57: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Configurando o MySQL Master-Master no servidores DAC01 e DAC02– DAC02 como Slave

• Editando o /etc/my.cnf[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sockold_passwords=1

server-id=2master-host = 172.16.0.12master-user = replicationmaster-password = slavemaster-port = 3306

[mysql.server]user=mysqlbasedir=/var/lib

[mysqld_safe]err-log=/var/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pid

• Restart no mysqkservice mysqld restart

• Rodar o seguinte comando no mysql:start slave;

Page 58: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Configurando o MySQL Master-Master no servidores DAC01 e DAC02– DAC02 como Master

• Editando o /etc/my.cnf e adicionar após a configuração do master-port

log-bin                     binlog-do-db=asterisk

• Rodar o seguinte comando no mysql:grant replication slave on *.* to 'replication'@172.16.0.12

identified by 'slave2‘;

Page 59: Construindo URA e Sistemas de Call Center com Asterisk

Desenvolvimento do Projeto Contact/Call Center

• Configurando o MySQL Master-Master no servidores DAC01 e DAC02– DAC01 como Slave

• Editando o /etc/my.cnf e adicionar após a configuração do server-id=1master-host = 172.16.0.13master-user = replicationmaster-password = slave2master-port = 3306

– Reiniciar o MySQL no DAC01 e no DAC02 como o comando: service mysqld restart

– DAC01 • Rodar o seguinte comando no mysql:

start slave;

• Informações em: http://www.howtoforge.com/mysql_master_master_replication

Page 60: Construindo URA e Sistemas de Call Center com Asterisk

Segmentos de mercado Open Source com Asterisk

• Open Source – AACC - Asterisk Advanced Call Center

• http://sourceforge.net/projects/hanashidialer/

– Vicidial• www.vicidial.org

– Elastix• www.elastix.org

– QueueMetrics – com reservas !!!!!• http://www.queuemetrics.com/

Page 61: Construindo URA e Sistemas de Call Center com Asterisk

???? PERGUNTAS ????

E agora...

Page 62: Construindo URA e Sistemas de Call Center com Asterisk

Empresa

• IAXCOMM Informática– Uma empresa 100% brasileira que atua no

mercado de redes corporativas e projetos de telecomunicações. Tem sua sede em Petrópolis, interior do Rio de Janeiro.

– Endereço: Rua Marechal Deodoro, 209 – Sala 101Centro - Petrópolis - RJ

– Telefones: (21) 3514-6100 – (11) 3508-8777– Contato:

• Rodrigo Ricardo Passos• Email: [email protected]