Escolar Documentos
Profissional Documentos
Cultura Documentos
Palestrarodrigoricardopassos 12781114898987 Phpapp01
Palestrarodrigoricardopassos 12781114898987 Phpapp01
www.encontrovoipcenter.com.br
Apresentao
Rodrigo Ricardo Passos rodrigopassos@iaxcomm.com.br
Cursou Cincias da Computao na Universidade Catlica de Petrpolis. Atualmente tem desempenhado o papel de gestor da IAXCOMM, um empresa prestadora de servios na rea de desenvolvimento de projetos em Telecomunicaes. Foi gestor da Plataforma e Servios de Comunicaes 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 ps-venda. especialista em Redes e possui amplo conhecimento em engenharia de trfego e Gesto de Segurana da Informao. Atuou em grandes projetos de start-up no Rio de Janeiro e em projetos de telecomunicaes. Possui profundo conhecimento em Asterisk, equipamentos Cisco, e Sistemas Operacionais Linux, FreeBSD e OpenBSD.
Objetivos
Orientar desenvolvedores sobre a utilizao do Asterisk para desempenhar o papel de uma URA com programao avanada. 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 soluo de Contact/Call Center baseado em Asterisk
Agenda
Asterisk e AEL Elaborando o Projeto URA Desenvolvimento de URA Implementao do Projeto URA Elaborando o Projeto Contact/Call Center Desenvolvimento do Projeto Contact/Call Center Segmentos de mercado Open e Clouse Source com Asterisk
Asterisk AEL
O que AEL (Asterisk Extension Language) Uma estrutura de desenvolvimento de plano de discagem em forma de linguagem de programao Com o AEL o plano de discagem se torna mais dinmico o que garante uma elasticidade no tratamento das ligaes no Asterisk
Asterisk AEL
Estrutura do AEL Mdulo /usr/lib/asterisk/modules/pbx_ael.so Arquivo de configurao /etc/asterisk/extensions.ael
Asterisk AEL
Estrutura do AEL Declarao de variveis globais globals {
PLANORAMAIS="_5XX"; VIRTUAL="_415[2-9]";
}; Contextos e extenses context EntradaPSTN { ${VIRTUAL} => { Set(RAMAL=${EXTEN}); &MGravaRamal(${RAMAL},${CALLERID(num)); Dial(SIP/${RAMAL},60,Ttr); Congestion(); } }; Macros macro 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; };
Asterisk AEL
Estrutura do AEL Includes
context RamalTotal { includes { funcoes; Emergencia; LigacaoCobrar; ZeroOitocentos; ServicosOperadoras; Interno; } };
Comentrios
// Este um comentrio no AEL
Variveis
context teste { Set(Numero=1234);
Numero=1234; Set(CALLERID(num)=21212121); CALLERID(num)=21212121;
};
Asterisk AEL
Estrutura do AEL Condicionais
macro MDND(ramal,tipo) { if (${tipo} = ON) { NoCDR(); Set(DB(${ramal}/dnd/disponivel)=1); Playback(do-not-disturb&activated); Hangup(); } else { if (${tipo} = OFF) { NoCDR();
Laos
context loops { 1 => { for (x=0; ${x} < 3; x=${x} + 1) { Verbose(x is ${x} !); }; }; 2 => { y=10; while (${y} >= 0) { Verbose(y is ${y} !); y=${y}-1; }; }; };
Asterisk AEL
Estrutura do AEL Goto e Label
context gotoexample { s => { begin: NoOp(Infinite Loop! yay!); Wait(1); goto begin; }; 3 => { goto s|begin; }; 4 => { goto gotoexample|s|begin; }; }; context gotoexample2 { s => { end: goto gotoexample|s|begin; }; };
Jumps
context incoming { s => { NoOp(Handle the call here); }; 18665551212 => jump s; }; context home { 399 => jump s@incoming; };
Desenvolvimento de URA
Cdigo da URA em AEL Cdigo Cliente do Web Service Cdigo Cliente do Banco de Dados Oracle
Desenvolvimento de URA
Asterisk /etc/asterisk/func_odbc.conf [AgentLogin] dsn=ironvox read=select IdUsuario from IronvoxUser where IdUsuario='${SQL_ESC(${ARG1})}' prefix=IRONVOX [TaskView] dsn=ironvox read=select idIronvoxTaskView, NumOS, TaskToExec, TaskDone, TaskDHinicial from IronvoxTaskView where NumOS='${SQL_ESC(${ARG1})}' prefix=IRONVOX [TaskInclude] dsn=ironvox write=insert into IronvoxTaskView (NumOS, TaskToExec, TaskDHinicial) values ('${SQL_ESC(${VAL1})}', '${SQL_ESC(${VAL2})}', '${SQL_ESC(${VAL3})}') prefix=IRONVOX [TaskUpdate] dsn=ironvox write=UPDATE IronvoxTaskView SET TaskDone='${SQL_ESC(${VAL1})}' WHERE idIronvoxTaskView='${SQL_ESC(${ARG1})}' prefix=IRONVOX
Desenvolvimento de URA
Asterisk /etc/asterisk/func_odbc.conf [Audit] dsn=ironvox write=INSERT into UraAudit (datahora,idContatos,posicaoura,descricao) values ('${SQL_ESC(${VAL1})}','${SQL_ESC(${VAL2})}','${SQL_ESC(${VAL3})}','${SQL_ESC( ${VAL4})}') prefix=IRONVOX [CloseOS] dsn=ironvox write=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
Infra-estrutura
Servidor Meio de comunicao (R2, ISDN, SIP Trunk) Rede Interna
Cabeamento de rede Switch Telefone IP Soft Phone FXS
Telefonia
Quantidade de agentes
Calculadora de Erlang C
Design de cenrios Sistema requer gravao de ligaes 2 E1S ISDN com 70% de taxa de ocupao Operao requer escuta de ligaes O projeto prev soluo com alta disponibilidade O cliente um Call Center hibrido Rede interna possui switches gerenciveis e fazem QoS
Switch gerencivel 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 escalvel at 4 E1 DAC gerencia as filas, os ramais SIP e grava as ligaes 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
Implementado o DAC Antes de comearmos a instalar o DAC precisamos acertar as seguintes configuraes de Banco de Dados.
Criando tabelas no MySQL Configurando o UnixODBC
/etc/odbc.ini /etc/asterisk/res_odbc.conf
};
Implementado o DAC
Plano de discagem
Enviando a chamada para um Agente
Descrio do processo
1252095064|1252095039.6310|Ouvidoria|mcspereira|CONNECT|16|1252095048.6311 1252095155|1252095039.6310|Ouvidoria|mcspereira|COMPLETECALLER|16|91|1 1252095294|1252094906.6301|Ouvidoria|lbortolini|COMPLETEAGENT|51|327|1 1252095303|NONE|Ouvidoria|lbortolini|PAUSE| 1252095303|NONE|Publico|lbortolini|PAUSE| 1252095411|1252095401.6318|Ouvidoria|NONE|ENTERQUEUE||3135613816 1252095419|1252095401.6318|Ouvidoria|mcspereira|CONNECT|8|1252095411.6319 1252095668|NONE|Ouvidoria|lbortolini|UNPAUSE| 1252095668|NONE|Publico|lbortolini|UNPAUSE| 1252095717|1252095401.6318|Ouvidoria|mcspereira|COMPLETECALLER|8|298|1 1252096784|1252096774.6340|Ouvidoria|NONE|ENTERQUEUE||5132094847 1252096790|1252096774.6340|Ouvidoria|mcspereira|CONNECT|6|1252096784.6341 1252096860|1252096850.6345|Ouvidoria|NONE|ENTERQUEUE||4232225291 1252096867|1252096850.6345|Ouvidoria|lbortolini|CONNECT|7|1252096860.6346 1252096926|1252096774.6340|Ouvidoria|mcspereira|COMPLETECALLER|6|136|1 1252096945|1252096935.6350|Ouvidoria|NONE|ENTERQUEUE||3732761147 1252096950|1252096935.6350|Ouvidoria|mcspereira|CONNECT|5|1252096945.6351 1252097059|1252096935.6350|Ouvidoria|mcspereira|COMPLETEAGENT|5|109|1 1252097204|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|1 1252097410|1252097400.6364|Ouvidoria|NONE|ENTERQUEUE||3732761147 1252097419|1252097400.6364|Ouvidoria|lbortolini|CONNECT|9|1252097410.6365 1252097567|1252097564.6369|Publico|Local/518@DAC/n|ADDMEMBER|
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
/etc/ha.d/ha.cf
debugfile /var/log/ha-debug logfile /var/log/ha-log logfacility local0 keepalive 2 deadtime 5 initdead 20 udpport 694 ucast eth0 172.16.0.13 # Quando for o dac01, colocar 172.16.0.12 auto_failback off # Quando for o dac01, colocar remove off e coloca on node gw01.xpto.com.br node gw02. xpto.com.br
/etc/ha.d/haresources
dac01.xpto.com.br IPaddr::172.16.0.10/24/eth0 asterisk
/etc/asterisk/sip.conf
bindaddr=172.16.0.10
Restart no mysql
service mysqld restart
Restart no mysqk
service mysqld restart
Reiniciar o MySQL no DAC01 e no DAC02 como o comando: service mysqld restart DAC01
Rodar o seguinte comando no mysql:
start slave;
Vicidial
www.vicidial.org
Elastix
www.elastix.org
E agora...
???? PERGUNTAS ????
Empresa
IAXCOMM Informtica Uma empresa 100% brasileira que atua no mercado de redes corporativas e projetos de telecomunicaes. Tem sua sede em Petrpolis, interior do Rio de Janeiro. Endereo: Rua Marechal Deodoro, 209 Sala 101 Centro - Petrpolis - RJ Telefones: (21) 3514-6100 (11) 3508-8777 Contato:
Rodrigo Ricardo Passos Email: rodrigopassos@iaxcomm.com.br