Rodrigo Ricardo Passos Construindo URA e Sistemas de Call Center com Asterisk  www.encontrovoipcenter.com.br
Apresentação <ul><li>Rodrigo Ricardo Passos </li></ul><ul><li>[email_address] </li></ul><ul><li>Cursou Ciências da Computa...
Objetivos <ul><li>Orientar desenvolvedores sobre a utilização do Asterisk para desempenhar o papel de uma URA com programa...
Agenda <ul><li>Asterisk e AEL </li></ul><ul><li>Elaborando o Projeto URA </li></ul><ul><li>Desenvolvimento de URA </li></u...
Asterisk AEL <ul><li>O que é AEL (Asterisk Extension Language) </li></ul><ul><li>Uma estrutura de desenvolvimento de plano...
Asterisk AEL <ul><li>Estrutura do AEL </li></ul><ul><li>Módulo </li></ul><ul><ul><li>/usr/lib/asterisk/modules/pbx_ael.so ...
Asterisk AEL <ul><li>Estrutura do AEL </li></ul><ul><li>Declaração de variáveis globais </li></ul><ul><ul><li>globals { </...
Asterisk AEL
Asterisk AEL
Asterisk AEL
Elaborando o Projeto URA <ul><li>O que preciso fazer antes de programar uma URA? </li></ul><ul><ul><li>Mapear os pontos de...
Elaborando o Projeto URA
Elaborando o Projeto URA
Elaborando o Projeto URA
Elaborando o Projeto URA
Elaborando o Projeto URA
Elaborando o Projeto URA
Desenvolvimento de URA <ul><li>Código da URA em AEL </li></ul><ul><li>Código Cliente do Web Service </li></ul><ul><li>Códi...
Desenvolvimento de URA <ul><li>Asterisk – /etc/asterisk/func_odbc.conf </li></ul><ul><ul><li>[AgentLogin] </li></ul></ul><...
Desenvolvimento de URA <ul><li>Asterisk – /etc/asterisk/func_odbc.conf </li></ul><ul><ul><li>[Audit] </li></ul></ul><ul><u...
Implementação do Projeto URA <ul><li>O que foi utilizado? </li></ul><ul><ul><li>Servidor HP ML110 </li></ul></ul><ul><ul><...
Elaborando o Projeto Contact/Call Center <ul><li>No que devo pensar? </li></ul><ul><ul><li>Requisições do cliente </li></u...
Elaborando o Projeto Contact/Call Center <ul><li>Cenário padrão – comum e precisa ser evitado </li></ul><ul><ul><li>Baixo ...
Elaborando o Projeto Contact/Call Center
Elaborando o Projeto Contact/Call Center O resultado, segundo Charles Darwin!!!   A empresa O Cliente
Elaborando o Projeto Contact/Call Center <ul><li>Então, onde estou errando? </li></ul><ul><li>Meus problemas são: </li></u...
Elaborando o Projeto Contact/Call Center
Elaborando o Projeto Contact/Call Center <ul><li>A solução precisa: </li></ul><ul><ul><li>Ser escalável, ou seja, ter capa...
Elaborando o Projeto Contact/Call Center <ul><li>Informações necessárias </li></ul><ul><ul><li>Quantidade de troncos </li>...
Elaborando o Projeto Contact/Call Center <ul><li>Design de cenários </li></ul><ul><ul><li>Sistema requer gravação de ligaç...
Elaborando o Projeto Contact/Call Center
Elaborando o Projeto Contact/Call Center <ul><li>Design técnico </li></ul><ul><ul><li>Banco de dados MySQL com Replicação ...
Elaborando o Projeto Contact/Call Center <ul><li>Design técnico </li></ul><ul><ul><li>Asterisk 1.4.26 no DAC </li></ul></u...
Elaborando o Projeto Contact/Call Center <ul><li>Design técnico </li></ul><ul><ul><li>Asterisk 1.4.26 no GW </li></ul></ul...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Antes de começarmos a inst...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Filas e Agentes – Realtime...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></u...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul>...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul>...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul>...
Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><ul><ul><li>AGENTCALLBACKLOGOFF – Agente sai da Fila ACD atravé...
Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><ul><ul><li>EXITEMPTY – Informa quando um cliente foi desconect...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul>...
Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><ul><li>Criar o queue_log como um “ named pipe ” através do com...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Snapshot do queue_log </li></ul><ul><li>1252095064|1252095039.6310|...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul>...
Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><li>DROP PROCEDURE `sp_ProcRelatorioQueueCompleted`// </li></ul...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Utilizando o LinuxHA </li></ul><ul><ul><li>O que é necessário: </li...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o Heatbeat nos servidores DAC01 e DAC02 </li></ul><ul>...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li...
Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li...
Segmentos de mercado Open Source com Asterisk <ul><li>Open Source  </li></ul><ul><ul><li>AACC - Asterisk Advanced Call Cen...
???? PERGUNTAS ???? <ul><li>E agora... </li></ul>
Empresa <ul><li>IAXCOMM Informática </li></ul><ul><ul><li>Uma empresa 100% brasileira que atua no mercado de redes corpora...
Próximos SlideShares
Carregando em…5
×

Construindo URA e Sistemas de Call Center com Asterisk

29.848 visualizações

Publicada em

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

Publicada em: Tecnologia, Negócios
0 comentários
9 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
29.848
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
1.214
Comentários
0
Gostaram
9
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Construindo URA e Sistemas de Call Center com Asterisk

  1. 1. Rodrigo Ricardo Passos Construindo URA e Sistemas de Call Center com Asterisk www.encontrovoipcenter.com.br
  2. 2. Apresentação <ul><li>Rodrigo Ricardo Passos </li></ul><ul><li>[email_address] </li></ul><ul><li>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. </li></ul>
  3. 3. Objetivos <ul><li>Orientar desenvolvedores sobre a utilização do Asterisk para desempenhar o papel de uma URA com programação avançada. </li></ul><ul><li>Estabelecer uma infra-estrutura para empresas que precisam de um sistema de Contact/Call Center </li></ul><ul><li>Prover conhecimento para empresas que querem partir para o desenvolvimento de uma solução de Contact/Call Center baseado em Asterisk </li></ul>
  4. 4. Agenda <ul><li>Asterisk e AEL </li></ul><ul><li>Elaborando o Projeto URA </li></ul><ul><li>Desenvolvimento de URA </li></ul><ul><li>Implementação do Projeto URA </li></ul><ul><li>Elaborando o Projeto Contact/Call Center </li></ul><ul><li>Desenvolvimento do Projeto Contact/Call Center </li></ul><ul><li>Segmentos de mercado Open e Clouse Source com Asterisk </li></ul>
  5. 5. Asterisk AEL <ul><li>O que é AEL (Asterisk Extension Language) </li></ul><ul><li>Uma estrutura de desenvolvimento de plano de discagem em forma de linguagem de programação </li></ul><ul><li>Com o AEL o plano de discagem se torna mais dinâmico o que garante uma elasticidade no tratamento das ligações no Asterisk </li></ul>
  6. 6. Asterisk AEL <ul><li>Estrutura do AEL </li></ul><ul><li>Módulo </li></ul><ul><ul><li>/usr/lib/asterisk/modules/pbx_ael.so </li></ul></ul><ul><li>Arquivo de configuração </li></ul><ul><ul><li>/etc/asterisk/extensions.ael </li></ul></ul>
  7. 7. Asterisk AEL <ul><li>Estrutura do AEL </li></ul><ul><li>Declaração de variáveis globais </li></ul><ul><ul><li>globals { </li></ul></ul><ul><ul><ul><li>PLANORAMAIS=&quot;_5XX&quot;; </li></ul></ul></ul><ul><ul><ul><li>VIRTUAL=&quot;_415[2-9]&quot;; </li></ul></ul></ul><ul><ul><li>}; </li></ul></ul><ul><li>Contextos e extensões </li></ul><ul><ul><li>context EntradaPSTN { </li></ul></ul><ul><ul><li>${VIRTUAL} => { </li></ul></ul><ul><ul><li>Set(RAMAL=${EXTEN}); </li></ul></ul><ul><ul><li>&MGravaRamal(${RAMAL},${CALLERID(num)); </li></ul></ul><ul><ul><li>Dial(SIP/${RAMAL},60,Ttr); </li></ul></ul><ul><ul><li>Congestion(); </li></ul></ul><ul><ul><li>} </li></ul></ul><ul><ul><li>}; </li></ul></ul><ul><li>Macros </li></ul><ul><ul><li>macro MGravaRamalSaida(RAMAL,ORIGEM) { </li></ul></ul><ul><ul><li>Set(recordLocation=saida/PA); </li></ul></ul><ul><ul><li>Set(DateDir=${STRFTIME(${EPOCH},,%d-%m-%Y)}); </li></ul></ul><ul><ul><li>System(/bin/mkdir /var/spool/asterisk/monitor/${recordLocation}/${DateDir}); </li></ul></ul><ul><ul><li>MixMonitor(${recordLocation}/${DateDir}/Hora-${STRFTIME(${EPOCH},,%H-%M-%S)}-Origem-${RAMAL}-Origem-${Origem}.wav,W(4)); </li></ul></ul><ul><ul><li>return; </li></ul></ul><ul><li>}; </li></ul>
  8. 8. Asterisk AEL
  9. 9. Asterisk AEL
  10. 10. Asterisk AEL
  11. 11. Elaborando o Projeto URA <ul><li>O que preciso fazer antes de programar uma URA? </li></ul><ul><ul><li>Mapear os pontos de funções </li></ul></ul><ul><ul><li>Mapear as informações que serão enviadas pelo DTMF </li></ul></ul><ul><ul><li>Criar um dicionário de dados </li></ul></ul><ul><ul><li>Mapear as exceções </li></ul></ul><ul><ul><li>Criar mensagens de áudio para orientar os usuários </li></ul></ul><ul><ul><li>Criar o fluxograma </li></ul></ul>
  12. 12. Elaborando o Projeto URA
  13. 13. Elaborando o Projeto URA
  14. 14. Elaborando o Projeto URA
  15. 15. Elaborando o Projeto URA
  16. 16. Elaborando o Projeto URA
  17. 17. Elaborando o Projeto URA
  18. 18. Desenvolvimento de URA <ul><li>Código da URA em AEL </li></ul><ul><li>Código Cliente do Web Service </li></ul><ul><li>Código Cliente do Banco de Dados Oracle </li></ul>
  19. 19. Desenvolvimento de URA <ul><li>Asterisk – /etc/asterisk/func_odbc.conf </li></ul><ul><ul><li>[AgentLogin] </li></ul></ul><ul><ul><li>dsn=ironvox </li></ul></ul><ul><ul><li>read=select IdUsuario from IronvoxUser where IdUsuario='${SQL_ESC(${ARG1})}' </li></ul></ul><ul><ul><li>prefix=IRONVOX </li></ul></ul><ul><ul><li>[TaskView] </li></ul></ul><ul><ul><li>dsn=ironvox </li></ul></ul><ul><ul><li>read=select idIronvoxTaskView, NumOS, TaskToExec, TaskDone, TaskDHinicial from IronvoxTaskView where NumOS='${SQL_ESC(${ARG1})}' </li></ul></ul><ul><ul><li>prefix=IRONVOX </li></ul></ul><ul><ul><li>[TaskInclude] </li></ul></ul><ul><ul><li>dsn=ironvox </li></ul></ul><ul><ul><li>write=insert into IronvoxTaskView (NumOS, TaskToExec, TaskDHinicial) values ('${SQL_ESC(${VAL1})}', '${SQL_ESC(${VAL2})}', '${SQL_ESC(${VAL3})}') </li></ul></ul><ul><ul><li>prefix=IRONVOX </li></ul></ul><ul><ul><li>[TaskUpdate] </li></ul></ul><ul><ul><li>dsn=ironvox </li></ul></ul><ul><ul><li>write=UPDATE IronvoxTaskView SET TaskDone='${SQL_ESC(${VAL1})}' WHERE idIronvoxTaskView='${SQL_ESC(${ARG1})}' </li></ul></ul><ul><ul><li>prefix=IRONVOX </li></ul></ul>
  20. 20. Desenvolvimento de URA <ul><li>Asterisk – /etc/asterisk/func_odbc.conf </li></ul><ul><ul><li>[Audit] </li></ul></ul><ul><ul><li>dsn=ironvox </li></ul></ul><ul><ul><li>write=INSERT into UraAudit (datahora,idContatos,posicaoura,descricao) values ('${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}','${SQL_ESC(${VAL3})}','${SQL_ESC(${VAL4})}') </li></ul></ul><ul><ul><li>prefix= IRONVOX </li></ul></ul><ul><ul><li>[CloseOS] </li></ul></ul><ul><ul><li>dsn=ironvox </li></ul></ul><ul><ul><li>write=INSERT into OSFechamento (datahora,idContatos,tipoos,numeroos,permissor) values ('${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}','${SQL_ESC(${VAL3})}','${SQL_ESC(${VAL4})}' </li></ul></ul><ul><ul><li>,'${SQL_ESC(${VAL5})}') </li></ul></ul><ul><ul><li>prefix= IRONVOX </li></ul></ul>
  21. 21. Implementação do Projeto URA <ul><li>O que foi utilizado? </li></ul><ul><ul><li>Servidor HP ML110 </li></ul></ul><ul><ul><li>Placa Digivoice </li></ul></ul><ul><ul><li>Debian Linux </li></ul></ul><ul><ul><li>Banco de Dados Mysql </li></ul></ul><ul><ul><li>Perl </li></ul></ul><ul><ul><ul><li>DBD::Mysql </li></ul></ul></ul><ul><ul><ul><li>DBD::Oracle </li></ul></ul></ul><ul><ul><ul><li>SOAP::Lite </li></ul></ul></ul><ul><ul><li>UnixODBC </li></ul></ul><ul><ul><li>Asterisk 1.4.25 </li></ul></ul>
  22. 22. Elaborando o Projeto Contact/Call Center <ul><li>No que devo pensar? </li></ul><ul><ul><li>Requisições do cliente </li></ul></ul><ul><ul><ul><li>Integração com CRM </li></ul></ul></ul><ul><ul><ul><li>Quantidade de ligações </li></ul></ul></ul><ul><ul><ul><li>Gravações de chamadas </li></ul></ul></ul><ul><ul><ul><li>Rota de menor custo </li></ul></ul></ul><ul><ul><ul><li>Relatórios </li></ul></ul></ul><ul><ul><ul><ul><li>Filas ACD </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Agentes </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Tarifação </li></ul></ul></ul></ul><ul><ul><li>Infra-estrutura </li></ul></ul><ul><ul><ul><li>Servidor </li></ul></ul></ul><ul><ul><ul><li>Meio de comunicação (R2, ISDN, SIP Trunk) </li></ul></ul></ul><ul><ul><ul><li>Rede Interna </li></ul></ul></ul><ul><ul><ul><ul><li>Cabeamento de rede </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Switch </li></ul></ul></ul></ul><ul><ul><ul><li>Telefonia </li></ul></ul></ul><ul><ul><ul><ul><li>Telefone IP </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Soft Phone </li></ul></ul></ul></ul><ul><ul><ul><ul><li>FXS </li></ul></ul></ul></ul>
  23. 23. Elaborando o Projeto Contact/Call Center <ul><li>Cenário padrão – comum e precisa ser evitado </li></ul><ul><ul><li>Baixo custo de implementação </li></ul></ul><ul><ul><li>Alto custo de suporte </li></ul></ul><ul><ul><li>Cliente insatisfeito </li></ul></ul><ul><ul><li>Técnico escravo da solução </li></ul></ul><ul><ul><li>Design do ambiente </li></ul></ul><ul><ul><ul><li>Servidor convencional </li></ul></ul></ul><ul><ul><ul><li>Placa E1 sem cancelamento de eco </li></ul></ul></ul><ul><ul><ul><li>Switch sem QoS </li></ul></ul></ul><ul><ul><ul><li>Gateway FXS </li></ul></ul></ul><ul><ul><ul><li>Telefones Analógicos </li></ul></ul></ul><ul><ul><ul><li>Gravação de todos os PA´s </li></ul></ul></ul><ul><ul><ul><li>Relatórios </li></ul></ul></ul>
  24. 24. Elaborando o Projeto Contact/Call Center
  25. 25. Elaborando o Projeto Contact/Call Center O resultado, segundo Charles Darwin!!! A empresa O Cliente
  26. 26. Elaborando o Projeto Contact/Call Center <ul><li>Então, onde estou errando? </li></ul><ul><li>Meus problemas são: </li></ul><ul><ul><li>Quando executo um relatório, as ligações picotam? </li></ul></ul><ul><ul><li>Estou consumindo mais 90% do processamento do meu servidor. </li></ul></ul><ul><ul><li>O que sei: </li></ul></ul><ul><ul><ul><li>Estou com 26 chamadas </li></ul></ul></ul><ul><ul><ul><li>Tenho 4 chamadas na fila de espera </li></ul></ul></ul><ul><ul><ul><li>O cliente reclama que ouve sua própria voz e que a voz do operador está baixa </li></ul></ul></ul><ul><ul><ul><li>O operador diz que a ligação picota e pede ao cliente que repita o que disse </li></ul></ul></ul>
  27. 27. Elaborando o Projeto Contact/Call Center
  28. 28. Elaborando o Projeto Contact/Call Center <ul><li>A solução precisa: </li></ul><ul><ul><li>Ser escalável, ou seja, ter capacidade de crescimento, seja ele na demanda de processamento ou na demanda de crescimento de atendimento; </li></ul></ul><ul><ul><li>Ser redundante. Não pode parar, seja qual for motivo. Quem tem um, não tem nenhum! </li></ul></ul><ul><ul><li>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 </li></ul></ul><ul><ul><li>Estar de acordo com as leis: DECRETO Nº 6.523, DE 31 DE JULHO DE 2008. </li></ul></ul>
  29. 29. Elaborando o Projeto Contact/Call Center <ul><li>Informações necessárias </li></ul><ul><ul><li>Quantidade de troncos </li></ul></ul><ul><ul><ul><li>Calculadora de Erlang B </li></ul></ul></ul><ul><ul><li>Quantidade de agentes </li></ul></ul><ul><ul><ul><li>Calculadora de Erlang C </li></ul></ul></ul><ul><ul><li>Onde encontro as calculadoras </li></ul></ul><ul><ul><ul><li>http://www.erlang.com.br </li></ul></ul></ul>
  30. 30. Elaborando o Projeto Contact/Call Center <ul><li>Design de cenários </li></ul><ul><ul><li>Sistema requer gravação de ligações </li></ul></ul><ul><ul><li>2 E1´S ISDN com 70% de taxa de ocupação </li></ul></ul><ul><ul><li>Operação requer escuta de ligações </li></ul></ul><ul><ul><li>O projeto prevê solução com alta disponibilidade </li></ul></ul><ul><ul><li>O cliente é um Call Center hibrido </li></ul></ul><ul><ul><li>Rede interna possui switches gerenciáveis e fazem QoS </li></ul></ul>
  31. 31. Elaborando o Projeto Contact/Call Center
  32. 32. Elaborando o Projeto Contact/Call Center <ul><li>Design técnico </li></ul><ul><ul><li>Banco de dados MySQL com Replicação Master-Master </li></ul></ul><ul><ul><li>LinuxHA (Heartbeat) </li></ul></ul><ul><ul><li>Rsync para sincronizar gravações de chamadas </li></ul></ul><ul><ul><li>Pacotes SIP e RTP marcados com o DiffServ </li></ul></ul><ul><ul><ul><li>SIP CS3 </li></ul></ul></ul><ul><ul><ul><li>RTP EF </li></ul></ul></ul><ul><ul><li>Switch gerenciável com filas de prioridades para pacotes SIP e RTP </li></ul></ul><ul><ul><li>E1 (R2 ou ISDN) com cancelamento de eco na interface </li></ul></ul><ul><ul><li>Servidores DAC de fabricante XPTO com processador Dual Xeon Quad </li></ul></ul><ul><ul><li>Servidores GW de fabricante XPTO com processador Xeon escalável até 4 E1 </li></ul></ul><ul><ul><li>DAC gerencia as filas, os ramais SIP e grava as ligações </li></ul></ul><ul><ul><li>GW gerencia chamadas da PSTN e faz entroncamento SIP com o DAC </li></ul></ul><ul><ul><li>DTMF RFC2833 </li></ul></ul><ul><ul><li>Codec G711A </li></ul></ul><ul><ul><li>Gateway FXS do fabricante XPTO com 24 portas </li></ul></ul><ul><ul><li>Telefones IP do fabricante XPTO com suporte a 2 linhas </li></ul></ul><ul><ul><li>Soft Phone com Headset USB do fabricante XPTO com processador DSP </li></ul></ul>
  33. 33. Elaborando o Projeto Contact/Call Center <ul><li>Design técnico </li></ul><ul><ul><li>Asterisk 1.4.26 no DAC </li></ul></ul><ul><ul><ul><li>Plano de discagem em AEL </li></ul></ul></ul><ul><ul><ul><li>Integração com Banco de Dados MySQL com UnixODBC </li></ul></ul></ul><ul><ul><ul><li>Ramais SIP em Realtime </li></ul></ul></ul><ul><ul><ul><li>Filas utilizando Realtime </li></ul></ul></ul><ul><ul><ul><li>Agentes utilizando Realtime </li></ul></ul></ul><ul><ul><ul><li>Gravação utilizando Mixmonitor </li></ul></ul></ul><ul><ul><ul><li>Escuta das ligações utilizando o ChanSpy </li></ul></ul></ul><ul><ul><ul><li>Integração com CRM/ERP utilizando Web Services </li></ul></ul></ul><ul><ul><ul><li>XMPP para envio de mensagem ao Operador </li></ul></ul></ul>
  34. 34. Elaborando o Projeto Contact/Call Center <ul><li>Design técnico </li></ul><ul><ul><li>Asterisk 1.4.26 no GW </li></ul></ul><ul><ul><ul><li>Plano de discagem em AEL </li></ul></ul></ul><ul><ul><ul><li>URA institucional </li></ul></ul></ul><ul><ul><ul><li>Mensagens da URA gravadas no forma WAV </li></ul></ul></ul><ul><ul><ul><li>Troncos SIP utilizando Realtime </li></ul></ul></ul>
  35. 35. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Antes de começarmos a instalar o DAC precisamos acertar as seguintes configurações de Banco de Dados. </li></ul></ul><ul><ul><ul><li>Criando tabelas no MySQL </li></ul></ul></ul><ul><ul><ul><li>Configurando o UnixODBC </li></ul></ul></ul><ul><ul><ul><ul><li>/etc/odbc.ini </li></ul></ul></ul></ul><ul><ul><ul><ul><li>/etc/asterisk/res_odbc.conf </li></ul></ul></ul></ul>
  36. 36. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Filas e Agentes – Realtime </li></ul></ul><ul><ul><ul><li>/etc/asterisk/extconfig.conf </li></ul></ul></ul><ul><ul><ul><li>Informações adicionais em: </li></ul></ul></ul><ul><ul><ul><ul><li>http://www.voip-info.org/wiki/view/Asterisk+RealTime+Queue </li></ul></ul></ul></ul>
  37. 37. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Login, Logout, Pausas no DAC utilizando o AEL </li></ul></ul></ul><ul><ul><ul><ul><li>context funcoes { </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>_*72 => { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>&MProfile(2); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Hangup(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>_*73 => { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>&MProfile(3); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Hangup(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>_*82 => { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>&MProfile(1); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Hangup(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>_*83 => { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>&MProfile(4); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Hangup(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul>
  38. 38. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Login, Logout, Pausas no DAC utilizando o AEL </li></ul></ul></ul><ul><ul><ul><ul><li>macro MProfile(TIPO) { </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoCDR(); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoOp(${CHANNEL:0:7}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Read(senha|pin|4); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>if (${TIPO} = 1){ </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoOp(&quot;Chamando o agi para autenticacao&quot;); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AGI(profile.pl|${TIPO}|${senha}|${CHANNEL:0:7}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul><ul><ul><ul><ul><li>else if (${TIPO} = 2) { </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoOp(&quot;Chamando o agi para logout&quot;); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AGI(profile.pl|${TIPO}|${senha}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul><ul><ul><ul><ul><li>else if (${TIPO} = 3) { </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoOp(&quot;Adicionando uma pausa no agente&quot;); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AGI(profile.pl|${TIPO}|${senha}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul><ul><ul><ul><ul><li>else if (${TIPO} = 4) { </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoOp(&quot;removendo a pausa do agente&quot;); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>AGI(profile.pl|${TIPO}|${senha}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul><ul><ul><ul><ul><li>}; </li></ul></ul></ul></ul>
  39. 39. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Login, Logout, Pausas no DAC utilizando o AEL </li></ul></ul></ul><ul><ul><ul><ul><li>AGI em Perl </li></ul></ul></ul></ul>
  40. 40. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Enviando a chamada para um Agente </li></ul></ul></ul><ul><ul><ul><ul><li>context DAC { </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>${PLANORAMAIS} => { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Set(CHANNEL(language)=pt_BR); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Set(extensao=SIP/${EXTEN}); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>NoOp(${extensao}); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>NoOp(&quot;Member Interface: ${MEMBERINTERFACE}&quot;); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>if (&quot;${extensao}&quot; != &quot;&quot;) { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>NoOp('Chamada para Queue do numero ${CALLERID(num)}'); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>NoOp(&quot;Estado do Device da extensao ${extensao}: ${DEVSTATE(${extensao})}&quot;); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>if (&quot;${DEVSTATE(${extensao})}&quot; = &quot;NOT_INUSE&quot;) { </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>SIPAddHeader(Alert-Info: Bellcore-r7); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Set(jabber=${DB(jabber/${extensao})}); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>NoOp(${CALLERID(num)}); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>&MToXMPP(${CALLERID(num)}|${jabber}); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Dial(${extensao},60,Ttr); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>else if (&quot;${DEVSTATE(${extensao})}&quot; = &quot;INUSE&quot;){ </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>Busy(); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>}; </li></ul></ul></ul></ul>
  41. 41. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Enviando a chamada para um Agente </li></ul></ul></ul><ul><ul><ul><ul><li>macro MToXMPP(CNumero,DST){ </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>AGI(intranet.pl|${CNumero}|${DST}); </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Set(MENSAGEM=Mensagem do PABX - Voce recebera uma ligacao do telefone ${CALLERID(num)}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>if (&quot;${MATRICULA}&quot; != &quot;&quot;) { </li></ul></ul></ul></ul><ul><ul><ul><ul><li>NoOp('Cliente ${CLIENTE} e Maricula ${MATRICULA}'); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Set(MENSAGEM=${MENSAGEM} - Provavel Cliente ${CLIENTE}: http:///intranet.xpto.com.br/usuario.itm?Matricula=${MATRICULA}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>} </li></ul></ul></ul></ul><ul><ul><ul><ul><li>JAbberSend(ipbx,${jabber},${MENSAGEM}); </li></ul></ul></ul></ul><ul><ul><ul><ul><li>}; </li></ul></ul></ul></ul>
  42. 42. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Enviando a chamada para um Agente </li></ul></ul></ul><ul><ul><ul><ul><li>AGI do CTI </li></ul></ul></ul></ul>
  43. 43. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Plano de discagem </li></ul></ul><ul><ul><ul><li>Enviando a chamada para um Agente </li></ul></ul></ul><ul><ul><ul><ul><li>Descrição do processo </li></ul></ul></ul></ul>
  44. 44. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul><ul><ul><ul><li>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). </li></ul></ul></ul>
  45. 45. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul><ul><ul><ul><li>Entendendo o queue_log </li></ul></ul></ul><ul><ul><ul><ul><li>O queue_log tem os seguintes registros: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>epoch timestamp of listed action </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>uniqueid of call </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>queue name </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>bridged channel </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>event </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>event parameter 1 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>event parameter 2 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>event parameter 3 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>Informações: http://www.voip-info.org/wiki/view/Asterisk+log+queue_log </li></ul></ul></ul></ul>
  46. 46. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul><ul><ul><ul><li>Entendendo o queue_log </li></ul></ul></ul><ul><ul><ul><ul><li>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 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>A informações do campo event são: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>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 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>AGENTDUMP - O Agente sofre um “Dump” quando espera pelo anuncio da uma chamada </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>AGENTLOGIN – Agente entra na Fila ACD. Este evento possui o seguinte parâmetro: channel </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>AGENTCALLBACKLOGIN – Agente entra na Fila ACD através da aplicação AgentCallbackLogin. Este evento possui o seguinte parâmetro: exten@context </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>AGENTLOGOFF- Agente saiu da Fila ACD. Este evento possui os seguintes parâmetros: channel|logintime </li></ul></ul></ul></ul></ul>
  47. 47. Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><ul><ul><li>AGENTCALLBACKLOGOFF – Agente sai da Fila ACD através da aplicação AgentCallbackLogin. Este evento possui os seguinte parâmetros: exten@context|logintime|reason </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>COMPLETEAGENT – Informa se a chamada foi desligada pelo Agente. Este evento possui os seguintes parâmetros: holdtime|calltime|origposition </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>COMPLETECALLER – Informa se a chamada foi desligada pelo Cliente. Este evento tem os seguintes parâmetros: holdtime|calltime|origposition </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CONFIGRELOAD – Informa se o app_queue sofreu um reload nas configurações. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>CONNECT – Informa quando uma ligação foi conectada a um Agente. Este evento possui os seguintes parâmetros: holdtime|bridgedchannel|uniqueid </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>ENTERQUEUE – Informa quando uma chamada entrou na Fila ACD. Este evento possui os seguintes parâmetros: url|callerid </li></ul></ul></ul></ul></ul>
  48. 48. Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><ul><ul><li>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 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>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 </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>EXITWITHTIMEOUT – Informa quando um cliente foi desconectado da fila porque o tempo de espera excedeu. Este evento possui o seguinte parâmetro: position </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>QUEUESTART – Informa o momento em que a app_queue foi iniciada. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>SYSCOMPAT - Informa quando uma chamada do atendida por uma agente mas houve uma incompatibilidade pelo tipo de canal e a chamada foi descartada. </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>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 </li></ul></ul></ul></ul></ul>
  49. 49. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul><ul><ul><ul><li>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. </li></ul></ul></ul><ul><ul><ul><li>Para resolver esse problema, fez-se necessário o seguintes procedimentos: </li></ul></ul></ul>
  50. 50. Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><ul><li>Criar o queue_log como um “ named pipe ” através do comando mkfifo : </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>mkfifo queue_log </li></ul></ul></ul></ul></ul><ul><ul><ul><ul><li>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: </li></ul></ul></ul></ul><ul><ul><ul><ul><ul><li>/usr/local/bin/queuelog.pl </li></ul></ul></ul></ul></ul>
  51. 51. Desenvolvimento do Projeto Contact/Call Center <ul><li>Snapshot do queue_log </li></ul><ul><li>1252095064|1252095039.6310|Ouvidoria|mcspereira|CONNECT|16|1252095048.6311 </li></ul><ul><li>1252095155|1252095039.6310|Ouvidoria|mcspereira|COMPLETECALLER|16|91|1 </li></ul><ul><li>1252095294|1252094906.6301|Ouvidoria|lbortolini|COMPLETEAGENT|51|327|1 </li></ul><ul><li>1252095303|NONE|Ouvidoria|lbortolini|PAUSE| </li></ul><ul><li>1252095303|NONE|Publico|lbortolini|PAUSE| </li></ul><ul><li>1252095411|1252095401.6318|Ouvidoria|NONE|ENTERQUEUE||3135613816 </li></ul><ul><li>1252095419|1252095401.6318|Ouvidoria|mcspereira|CONNECT|8|1252095411.6319 </li></ul><ul><li>1252095668|NONE|Ouvidoria|lbortolini|UNPAUSE| </li></ul><ul><li>1252095668|NONE|Publico|lbortolini|UNPAUSE| </li></ul><ul><li>1252095717|1252095401.6318|Ouvidoria|mcspereira|COMPLETECALLER|8|298|1 </li></ul><ul><li>1252096784|1252096774.6340|Ouvidoria|NONE|ENTERQUEUE||5132094847 </li></ul><ul><li>1252096790|1252096774.6340|Ouvidoria|mcspereira|CONNECT|6|1252096784.6341 </li></ul><ul><li>1252096860|1252096850.6345|Ouvidoria|NONE|ENTERQUEUE||4232225291 </li></ul><ul><li>1252096867|1252096850.6345|Ouvidoria|lbortolini|CONNECT|7|1252096860.6346 </li></ul><ul><li>1252096926|1252096774.6340|Ouvidoria|mcspereira|COMPLETECALLER|6|136|1 </li></ul><ul><li>1252096945|1252096935.6350|Ouvidoria|NONE|ENTERQUEUE||3732761147 </li></ul><ul><li>1252096950|1252096935.6350|Ouvidoria|mcspereira|CONNECT|5|1252096945.6351 </li></ul><ul><li>1252097059|1252096935.6350|Ouvidoria|mcspereira|COMPLETEAGENT|5|109|1 </li></ul><ul><li>1252097204|1252097202.6356|Ouvidoria|Local/518@DAC/n|REMOVEMEMBER| </li></ul><ul><li>1252097204|1252097202.6356|Publico|Local/518@DAC/n|REMOVEMEMBER| </li></ul><ul><li>1252097262|1252096850.6345|Ouvidoria|lbortolini|COMPLETEAGENT|7|395|1 </li></ul><ul><li>1252097410|1252097400.6364|Ouvidoria|NONE|ENTERQUEUE||3732761147 </li></ul><ul><li>1252097419|1252097400.6364|Ouvidoria|lbortolini|CONNECT|9|1252097410.6365 </li></ul><ul><li>1252097567|1252097564.6369|Publico|Local/518@DAC/n|ADDMEMBER| </li></ul>
  52. 52. Desenvolvimento do Projeto Contact/Call Center <ul><li>Implementado o DAC </li></ul><ul><ul><li>Relatórios </li></ul></ul><ul><ul><ul><li>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. </li></ul></ul></ul><ul><ul><ul><li>Exemplo de uma query “stored procedure”: </li></ul></ul></ul>
  53. 53. Desenvolvimento do Projeto Contact/Call Center <ul><ul><ul><li>DROP PROCEDURE `sp_ProcRelatorioQueueCompleted`// </li></ul></ul></ul><ul><ul><ul><li>CREATE DEFINER=`root`@`%` PROCEDURE `sp_ProcRelatorioQueueCompleted`(IN dataInicial varchar(12), IN dataFinal varchar(12), IN queueNome varchar(20)) </li></ul></ul></ul><ul><ul><ul><li>BEGIN </li></ul></ul></ul><ul><ul><ul><li>DECLARE diaInicial varchar(2); </li></ul></ul></ul><ul><ul><ul><li>DECLARE mesInicial varchar(2); </li></ul></ul></ul><ul><ul><ul><li>DECLARE anoInicial varchar(4); </li></ul></ul></ul><ul><ul><ul><li>DECLARE diaFinal varchar(2); </li></ul></ul></ul><ul><ul><ul><li>DECLARE mesFinal varchar(2); </li></ul></ul></ul><ul><ul><ul><li>DECLARE anoFinal varchar(4); </li></ul></ul></ul><ul><ul><ul><li>DECLARE InitialDate VARCHAR(20); </li></ul></ul></ul><ul><ul><ul><li>DECLARE FinalDate VARCHAR(20); </li></ul></ul></ul><ul><ul><ul><li>SET diaInicial = SUBSTR(dataInicial,1,2); </li></ul></ul></ul><ul><ul><ul><li>SET mesInicial = SUBSTR(dataInicial,4,2); </li></ul></ul></ul><ul><ul><ul><li>SET anoInicial = SUBSTR(dataInicial,7,4); </li></ul></ul></ul><ul><ul><ul><li>SET diaFinal = SUBSTR(dataFinal,1,2); </li></ul></ul></ul><ul><ul><ul><li>SET mesFinal = SUBSTR(dataFinal,4,2); </li></ul></ul></ul><ul><ul><ul><li>SET anoFinal = SUBSTR(dataFinal,7,4); </li></ul></ul></ul><ul><ul><ul><li>SET InitialDate = CONCAT(anoInicial,'-',mesInicial,'-',diaInicial,' 00:00:00'); </li></ul></ul></ul><ul><ul><ul><li>SET FinalDate = CONCAT(anoFinal,'-',mesFinal,'-',diaFinal,' 23:59:59'); </li></ul></ul></ul><ul><ul><ul><li>SELECT c.src,q.id,logdate,q.`timestamp`,q.callid,q.qname,q.agent,q.`action`,q.info1,q.info2,q.info3 </li></ul></ul></ul><ul><ul><ul><li>FROM queuelog as q left join cdr as c on q.callid = c.uniqueid </li></ul></ul></ul><ul><ul><ul><li>where q.qname = queueNome and q.logdate >= InitialDate and q.logdate <= FinalDate and q.`action` like 'COMPLETE%'; </li></ul></ul></ul><ul><ul><ul><li>END </li></ul></ul></ul>
  54. 54. Desenvolvimento do Projeto Contact/Call Center <ul><li>Utilizando o LinuxHA </li></ul><ul><ul><li>O que é necessário: </li></ul></ul><ul><ul><ul><li>Heartbeat </li></ul></ul></ul><ul><ul><ul><li>MySQL Master-Master </li></ul></ul></ul>
  55. 55. Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o Heatbeat nos servidores DAC01 e DAC02 </li></ul><ul><ul><li>/etc/hosts </li></ul></ul><ul><ul><ul><li>172.16.0.13 dac02. xpto.com.br dac02 </li></ul></ul></ul><ul><ul><ul><li>172.16.0.12 dac01. xpto.com.br dac01 </li></ul></ul></ul><ul><ul><li>/etc/ha.d/ha.cf </li></ul></ul><ul><ul><ul><li>debugfile /var/log/ha-debug </li></ul></ul></ul><ul><ul><ul><li>logfile /var/log/ha-log </li></ul></ul></ul><ul><ul><ul><li>logfacility local0 </li></ul></ul></ul><ul><ul><ul><li>keepalive 2 </li></ul></ul></ul><ul><ul><ul><li>deadtime 5 </li></ul></ul></ul><ul><ul><ul><li>initdead 20 </li></ul></ul></ul><ul><ul><ul><li>udpport 694 </li></ul></ul></ul><ul><ul><ul><li>ucast eth0 172.16.0.13 # Quando for o dac01, colocar 172.16.0.12 </li></ul></ul></ul><ul><ul><ul><li>auto_failback off # Quando for o dac01, colocar remove off e coloca on </li></ul></ul></ul><ul><ul><ul><li>node gw01.xpto.com.br </li></ul></ul></ul><ul><ul><ul><li>node gw02. xpto.com.br </li></ul></ul></ul><ul><ul><li>/etc/ha.d/haresources </li></ul></ul><ul><ul><ul><li>dac01.xpto.com.br IPaddr::172.16.0.10/24/eth0 asterisk </li></ul></ul></ul><ul><ul><li>/etc/asterisk/sip.conf </li></ul></ul><ul><ul><ul><li>bindaddr=172.16.0.10 </li></ul></ul></ul>
  56. 56. Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li></ul><ul><ul><li>DAC01 como Master </li></ul></ul><ul><ul><ul><li>Editando o /etc/my.cnf </li></ul></ul></ul><ul><ul><ul><li>[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 log-bin binlog-do-db=<asterisk>  # input the database which should be replicated binlog-ignore-db=mysql            # input the database that should be ignored for replication binlog-ignore-db=test server-id=1 [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] err-log=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid </li></ul></ul></ul><ul><ul><ul><li>Rodar o seguinte comando no mysql: </li></ul></ul></ul><ul><ul><ul><ul><li>grant replication slave on *.* to 'replication'@172.16.0.13 identified by 'slave‘; </li></ul></ul></ul></ul><ul><ul><ul><li>Restart no mysql </li></ul></ul></ul><ul><ul><ul><ul><li>service mysqld restart </li></ul></ul></ul></ul>
  57. 57. Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li></ul><ul><ul><li>DAC02 como Slave </li></ul></ul><ul><ul><ul><li>Editando o /etc/my.cnf </li></ul></ul></ul><ul><ul><ul><ul><li>[mysqld] </li></ul></ul></ul></ul><ul><ul><ul><ul><li>datadir=/var/lib/mysql </li></ul></ul></ul></ul><ul><ul><ul><ul><li>socket=/var/lib/mysql/mysql.sock </li></ul></ul></ul></ul><ul><ul><ul><ul><li>old_passwords=1 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>server-id=2 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-host = 172.16.0.12 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-user = replication </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-password = slave </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-port = 3306 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>[mysql.server] </li></ul></ul></ul></ul><ul><ul><ul><ul><li>user=mysql </li></ul></ul></ul></ul><ul><ul><ul><ul><li>basedir=/var/lib </li></ul></ul></ul></ul><ul><ul><ul><ul><li>[mysqld_safe] </li></ul></ul></ul></ul><ul><ul><ul><ul><li>err-log=/var/log/mysqld.log </li></ul></ul></ul></ul><ul><ul><ul><ul><li>pid-file=/var/run/mysqld/mysqld.pid </li></ul></ul></ul></ul><ul><ul><ul><li>Restart no mysqk </li></ul></ul></ul><ul><ul><ul><ul><li>service mysqld restart </li></ul></ul></ul></ul><ul><ul><ul><li>Rodar o seguinte comando no mysql: </li></ul></ul></ul><ul><ul><ul><ul><li>start slave; </li></ul></ul></ul></ul>
  58. 58. Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li></ul><ul><ul><li>DAC02 como Master </li></ul></ul><ul><ul><ul><li>Editando o /etc/my.cnf e adicionar após a configuração do master-port </li></ul></ul></ul><ul><ul><ul><ul><li>log-bin                     </li></ul></ul></ul></ul><ul><ul><ul><ul><li>binlog-do-db=asterisk </li></ul></ul></ul></ul><ul><ul><ul><li>Rodar o seguinte comando no mysql: </li></ul></ul></ul><ul><ul><ul><ul><li>grant replication slave on *.* to 'replication'@172.16.0.12 identified by 'slave2‘; </li></ul></ul></ul></ul>
  59. 59. Desenvolvimento do Projeto Contact/Call Center <ul><li>Configurando o MySQL Master-Master no servidores DAC01 e DAC02 </li></ul><ul><ul><li>DAC01 como Slave </li></ul></ul><ul><ul><ul><li>Editando o /etc/my.cnf e adicionar após a configuração do server-id=1 </li></ul></ul></ul><ul><ul><ul><ul><li>master-host = 172.16.0.13 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-user = replication </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-password = slave2 </li></ul></ul></ul></ul><ul><ul><ul><ul><li>master-port = 3306 </li></ul></ul></ul></ul><ul><ul><li>Reiniciar o MySQL no DAC01 e no DAC02 como o comando: service mysqld restart </li></ul></ul><ul><ul><li>DAC01 </li></ul></ul><ul><ul><ul><li>Rodar o seguinte comando no mysql: </li></ul></ul></ul><ul><ul><ul><ul><li>start slave; </li></ul></ul></ul></ul><ul><li>Informações em: http://www.howtoforge.com/mysql_master_master_replication </li></ul>
  60. 60. Segmentos de mercado Open Source com Asterisk <ul><li>Open Source </li></ul><ul><ul><li>AACC - Asterisk Advanced Call Center </li></ul></ul><ul><ul><ul><li>http://sourceforge.net/projects/hanashidialer/ </li></ul></ul></ul><ul><ul><li>Vicidial </li></ul></ul><ul><ul><ul><li>www.vicidial.org </li></ul></ul></ul><ul><ul><li>Elastix </li></ul></ul><ul><ul><ul><li>www.elastix.org </li></ul></ul></ul><ul><ul><li>QueueMetrics – com reservas !!!!! </li></ul></ul><ul><ul><ul><li>http://www.queuemetrics.com/ </li></ul></ul></ul>
  61. 61. ???? PERGUNTAS ???? <ul><li>E agora... </li></ul>
  62. 62. Empresa <ul><li>IAXCOMM Informática </li></ul><ul><ul><li>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. </li></ul></ul><ul><ul><li>Endereço: Rua Marechal Deodoro, 209 – Sala 101 </li></ul></ul><ul><ul><li>Centro - Petrópolis - RJ </li></ul></ul><ul><ul><li>Telefones: (21) 3514-6100 – (11) 3508-8777 </li></ul></ul><ul><ul><li>Contato: </li></ul></ul><ul><ul><ul><li>Rodrigo Ricardo Passos </li></ul></ul></ul><ul><ul><ul><li>Email: rodrigopassos@iaxcomm.com.br </li></ul></ul></ul>

×