<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=iso-8859-1"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
span.EstiloDeEmail17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 3.0cm 70.85pt 3.0cm;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1114517961;
        mso-list-type:hybrid;
        mso-list-template-ids:1513883480 68550657 68550659 68550661 68550657 68550659 68550661 68550657 68550659 68550661;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=PT-BR link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>Pessoal<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Acabei a primeira parte de minha integração Asterisk/Aplicação.<o:p></o:p></p><p class=MsoNormal>Perguntei a um tempo atrás o caminho e já cheguei no primeiro hotel.. <span style='font-family:Wingdings'>J</span><o:p></o:p></p><p class=MsoNormal>Mas vamos lá... Documentação extremamente superficial.<o:p></o:p></p><p class=MsoNormal>Funcionando está, mas não consegui ainda entender algumas informações que eu estou recebendo.<o:p></o:p></p><p class=MsoNormal>Aconselho aos que usam fila, pois tem alguns dados bem interessantes, mesmo que não façam uso de AMI ou sejam desenvolvedores.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Estou utilizando AJAM (AMI Web).<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Solicitação de status da fila:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:green'>&lt;response type='object' id='unknown'&gt;&lt;generic response='Success' message='Queue status will follow' /&gt;&lt;/response&gt;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US>Beleza! Sucesso na carga. </span>Recebi 3 eventos diferentes: QueueParams (Dados da fila), QueueMember (Membros da fila) e QueueEntry (Ligações na fila e ainda não atendidas).<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:green'>&lt;generic event='QueueParams' queue='50' max='0' strategy='ringall' calls='1' holdtime='11' talktime='122' completed='23' abandoned='6' servicelevel='60' servicelevelperf='95.7' weight='0' /&gt;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'>Estes são os dados da fila:<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Queue=&#8217;50&#8217; &#8211; Numero da fila &#8211; O número que disco para entrar na fila<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Max=&#8217;0&#8217; &#8211; Quantidade máxima de pessoas que podem ficar na fila &#8211; Está ilimitada.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Strategy=&#8217;ringall&#8217; &#8211; Estratégia... Sem problema... Bem documentado isso.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Calls=&#8217;1&#8217; &#8211; Ligações na fila e ainda não atendidas. Me parece perfeito. Testado e não encontrei problemas.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>HoldTime=&#8217;11&#8217; &#8211; Aqui começa meu problema... Pelo que entendi são 11 segundos &#8220;em média&#8221; que uma pessoa espera. Fiz o diversos testes com diversos tempos altos e o valor não altera. Esta média é de quantas ligações? Todas as feitas até hoje? Não é, pois o valor já mudou sem muita lógica... Me iluminem aqui...<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>TalkTime=&#8217;122&#8217; &#8211; Este é irmão do HoldTime pelo que eu entendi. É a média não explicada do tempo de ligação, ou seja, 00:02:02 de média do telefone falando. Também preciso de ajuda.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Completed=&#8217;23&#8217; &#8211; Outro... Este não tem nada a ver com os dois de cima. É a quantidade de ligações que foram atendidas. Mas quando que iniciou? Alguém para me ajudar aqui?<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Abandoned=&#8217;6&#8217; &#8211; Abandonadas pelo cliente antes de serem atendidas. Tem tudo a ver com o completed. Mas a mesma pergunta. Abandonadas na última hora? No último dia? Ajuda aqui também.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>ServiceLevel=&#8217;60&#8217; &#8211; Haaaa.... Este é o cara? Não. Eu achava que era ele, mas não é. No Elastix está escrito assim: &#8220;Used for service level statistics (calls answered within service level time frame)&#8221;. Como está 60 segundos, não vou nem tentar explicar os números de cima. Pensando e pesquisando, acho que entendi.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>ServiceLevelPerf=&#8217;95.7&#8217; &#8211; Este número e o nome das tags me levaram a entender uma coisa legal... Este não é o TMA e sim o percentual de ligações atendidas em 60 segundos. É isso mesmo?<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Weight=&#8217;0&#8217; &#8211; Pelo que entendi é o peso desta fila em relação a outros &#8220;canais&#8221;, ou seja, quanto maior o número, sua prioridade será maior para atendimento. Alguém poderia me explicar o que seria este &#8220;canal&#8221;? Não entendo como duas filas se cruzariam.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:green'>&lt;response type='object' id='unknown'&gt;&lt;generic event='QueueMember' queue='50' name='Fixo' location='Local/10@from-queue/n' membership='dynamic' penalty='0' callstaken='11' lastcall='1338677447' status='2' paused='0' /&gt;&lt;/response&gt;<o:p></o:p></span></p><p class=MsoNormal style='text-autospace:none'>Estes são os dados dos membros da fila:<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Queue=&#8217;50&#8217; &#8211; Mesmo do de cima. Usado para vincular um ao outro.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Name=&#8217;Fixo&#8217; &#8211; Nome do ramal (Extensão) informado na criação do mesmo.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Location=&#8217;Local/10@from-queue/n&#8217; &#8211; Nome interno do ramal. Coisa do Arterisk. Usei ele depois para duas coisas, sendo uma na gambiarra e outra correta. Digo mais abaixo e se alguém quiser explicar melhor, seja com link, agradeço.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Membership=&#8217;dynamic&#8217; &#8211; Se o ramal é estático ou dinâmico. Um dinâmico entra na fila com &#8216;&lt;Numero da fila&gt;*&#8217;, que neste caso seria &#8216;50*&#8217; e sai com &#8216;50**&#8217;. Pelo que eu entendi um estático faz parte da fila e pronto e um dinâmico pode entrar e sair. Porém a mensagem diz que meu ramal estático saiu da fila com &#8216;50**&#8217; e na verdade não saiu. Uso Elastix e entendo que é falta de carinho com o código de quem o fez.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Penalty=&#8217;0&#8217; &#8211; O nome é estranho, mas eu entendi que quanto maior, menor a prioridade de tocar. Por exemplo um estagiário. Se tem alguém com Penalty menor, a ligação é enviada para ele antes. Só quando não tem ninguém menor disponível é que o estagiário atende. Entendo que dependa da estratégia, mas não sei qual. Seria bom saber.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>CallsTaken=&#8217;11&#8217; &#8211; Ligações atendidas por este membro. Entendo que ele atendeu 11 ligações. Porém a soma dos membros não é igual ao completed da parte de cima. Muito estranho isso... Alguém poderia me explicar?<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>LastCall=&#8217;1338677447&#8217; &#8211; No primeiro momento me pareceu ser o número do telefone de quem fez a última ligação, mas não é. Me parece ser o &#8220;UniqueID&#8221;, sem o &#8220;.&#8221; e os 3 números no final. Não me pareceu útil mesmo e não tenho certeza se é isso mesmo. Alguém me confirma?<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Status=&#8217;2&#8217; &#8211; Diz se o ramal está ocupado, tocando, em uso, etc. Peguei a tabela completa no código fonte do Asterisk. Sem problemas.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'>Paused=&#8217;0&#8217; &#8211; Se o ramal está em pausa. Em pausa, ele não faz parte da fila. Seria igual a um membro dinâmico pressionar &#8216;50**&#8217; e sair, mas neste caso ele permanece na fila e você consegue visualizar.<o:p></o:p></p><p class=MsoNormal style='text-autospace:none'><o:p>&nbsp;</o:p></p><p class=MsoNormal style='text-autospace:none'><span lang=EN-US style='font-size:10.0pt;font-family:"Courier New";color:green'>&lt;response type='object' id='unknown'&gt;&lt;generic event='QueueEntry' queue='50' position='1' channel='SIP/10-000000a6' uniqueid='1338791132.268' calleridnum='10' calleridname='Pedido:Fixo' connectedlinenum='unknown' connectedlinename='unknown' wait='10' /&gt;&lt;/response&gt;<o:p></o:p></span></p><p class=MsoNormal>Estes estão na fila ainda sem atendimento:<o:p></o:p></p><p class=MsoNormal>Queue=&#8217;50&#8217; &#8211; Mesma coisa. Eles estão na fila &#8216;50&#8217; neste caso. O mesmo dos de cima.<o:p></o:p></p><p class=MsoNormal>Position=&#8217;1&#8217; &#8211; Posição na fila. Perfeito e entendido. Este é o próximo a ser atendido. Atendido este, o &#8216;2&#8217; vira &#8216;1&#8217; e os demais descem.<o:p></o:p></p><p class=MsoNormal>Channel=&#8217;SIP/10-000000a6&#8217; &#8211; O canal que a ligação está passando para chegar a fila. Coisas de Asterisk. Entendo que seja este canal que está relacionado ao Weight.<o:p></o:p></p><p class=MsoNormal>UniqueID='1338791132.268' &#8211; Identificação única deste canal. Eu conseguiria achar esta ligação entre outras por este número. É isso mesmo?<o:p></o:p></p><p class=MsoNormal>CallerIDNum=&#8217;10&#8217; &#8211; Este é o cara que eu procurava... O número de telefone do ligador.<o:p></o:p></p><p class=MsoNormal>CallerIDName=&#8217;Fixo&#8217; &#8211; Este é o nome do ligador. Nos EUA e outros países, a operadora envia o numero do telefone e o nome da pessoa. Aqui no Brasil, o sistema inovador e proprietário envia somente o número do telefone. De qualquer forma, tem como colocar um nome aqui por AGI ou outras formas até mais fáceis. No Elastix (FreePBX) chama-se &#8220;CallerID Lookup Sources&#8221;.<o:p></o:p></p><p class=MsoNormal>ConnectedLineNum=&#8217;unknown&#8217; &#8211; Ramal de quem atendeu.<o:p></o:p></p><p class=MsoNormal>ConnectedLineName=&#8217;unknown&#8217; &#8211; Nome do ramal de quem atendeu. O mesmo que o Name do members acima.<o:p></o:p></p><p class=MsoNormal>Wait=&#8217;10&#8217; &#8211; Tempo de espera na fila: 10 segundos.<o:p></o:p></p><p class=MsoNormal><span style='font-size:10.0pt;font-family:"Courier New";color:green'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal>Isso foi o que eu descobri e não descobri. Ajuda outros o que eu descobri e me ajudem a entender o que eu não entendi. Detalhado, vou editar e colocar no Wiki, mas preciso da ajuda de vocês.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Problemas: Não estou usando evento. Os eventos são disparados quando alguma coisa acontece e se nada acontecer, não recebo nada. Isso eu entendi.<o:p></o:p></p><p class=MsoNormal>Mas não estou usando por uns motivos técnicos. Meu servidor com a aplicação está &#8220;nas nuvens&#8221; e na DMZ. Meu servidor Asterisk está protegido com um Firewall e não é acessível da &#8220;rua&#8221;. Desta forma, estou com um serviço interno rodando, pegando os dados do Arterisk e replicando para o outro servidor &#8220;nas nuvens&#8221; por um protocolo proprietário e mesmo invadido, não ajuda muito a ninguém. Não se tem controle de nada.<o:p></o:p></p><p class=MsoNormal>E este mesmo programa já é usado para trafegar dados e se fosse usar eventos, teria que duplicar o canal de comunicação ou fazer uma coisa bem mais complexa. Segui sem o evento.<o:p></o:p></p><p class=MsoNormal>Vou explicar o que eu já tenho: Pausar e Despausar membros. Funciona perfeitamente. Tenho todos os dados nesta resposta. Preciso do Location citado aqui, que lá chama-se Interface (Isso é horrível, pois o cada hora o nome muda), o Queue e se é para Pausar ou Despausar. Perfeito!<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Mas como nem tudo na vida são flores... Eu preciso do CallerID de quem liga DEPOIS que o membro da fila atendeu. Isso não rola. A informação fica por 1 segundo e depois some... É preenchido o ConnectedLineNum e o ConnectedLineName, se mantém por 1 segundo e depois some e eu preciso disso. O que eu fiz?<o:p></o:p></p><p class=MsoNormal>Recupei pelo Status, que retona todas as ligações em andamento. Mas não tem como vincular uma coisa na outra, ou seja, o ramal do membro com a ligação. Eu teria que carregar outros dados, como os ramais para poder vincular e não estava a fim. Não sei onde. Seria procurar uma agulha em um palheiro. Então fiz o seguinte:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Retirei o &#8220;/n&#8221; do final do Location e armazenei em uma variável.<o:p></o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Comparei se o começo do Channel do Status é igual a variável que eu criei.<o:p></o:p></p><p class=MsoListParagraph><o:p>&nbsp;</o:p></p><p class=MsoListParagraph>Isso me retorna duas linhas. Aparentemente uma do telefone do ligador para a fila e outro da fila para o ramal. Pelo menos foi o que me pareceu.<o:p></o:p></p><p class=MsoListParagraph><o:p>&nbsp;</o:p></p><p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-family:Symbol'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]>Então eu fico com a linha que tem &#8216;ChannelState=6&#8217; e &#8216;Extension=s&#8217;. Não sei o que estes dois significam, mas funcionou.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Se alguém tiver uma forma melhor de fazer isso ou mais correta, me informe. Seria de boa ajuda.<o:p></o:p></p><p class=MsoNormal>Conto com a ajuda de todos.<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Um abraço<o:p></o:p></p><p class=MsoNormal>Ribeiro<o:p></o:p></p></div></body></html>