quarta-feira, 29 de junho de 2011

Jappix - cliente web para o Openfire


De tempos em tempos sempre aparece alguém na lista Openfire-BR perguntando sobre clientes XMPP web.

Muitos tentam utilizar o SparkWeb e o Tigase Web Messenger que na minha opinião são os mais conhecidos, mas acabam tendo sempre resultados insatisfatórios.

Só que além desses clientes, outro que merece destaque é o Jappix. Desenvolvido em PHP, o Jappix parece ser uma boa alternativa para quem quer disponibilizar um cliente Web de fácil instalação e com uma boa gama de recursos. 

Um dos seus grandes diferenciais é o mini-chat, com uma interface similar a do chat do Facebook, e que pode ser facilmente adicionada a qualquer outro site existente. Além disso ele também possui uma interface mobile para uso nos navegadores dos dispositivos móveis.

Se você achou tudo isso interessante e deseja testar o Jappix, saiba que a boa notícia é que Dele Olajide da comunidade Ignite Realtime, transformou a ferramenta em um plugin para o Openfire, utilizando o Quercus (implementação Java da linguagem PHP).


Testei o plugin, que tem versões para Openfire 3.7.0 e também para 3.6.4 e gostei da performance e da interface (ainda não pude testar o mini-chat). É importante deixar bem claro que não foi feita qualquer alteração no código original e que bugs e solicitação de novas features devem ser encaminhadas aos desenvolvedores do Jappix.

Faça download do plugin agora, leia o post oficial do plugin com as instruções de instalação e teste você mesmo.


UPDATE 08/03/13: Dica do Daniel Gaspary na lista Openfire-BR: o plugin está sendo mantido e atualizado. Link do projeto: http://code.google.com/p/openfire-jappix/

Fim dos releases de manutenção do Asterisk 1.4 e 1.6.2


Foram lançados hoje os últimos releases de manutenção das versões 1.4 e 1.6.2 do Asterisk.

As versões 1.4.42 e 1.6.2.19 trazem a correção de várias questões reportadas pela comunidade e sua instalação é recomendada.

Apesar de ser o release final de manutenção o suporte a atualizações de segurança será mantido para ambas versões até o dia 21 de abril de 2012, como é possível ver no calendário de versões.

Colaboração em listas de e-mail e comunidades FLOSS - o caso OFMonitoringEraser

Fico muito feliz quando vejo que as iniciativas FLOSS dão frutos positivos. 

Quando criei a lista Openfire-BR há alguns anos não imaginava que ela fosse chegar onde chegou. Com mais de 550 membros, a lista virou referência para a ferramenta e também exemplo do espírito do Software Livre/Open Source.

Além das costumeiras dicas e trocas de experiências, a lista também gera contribuições da comunidade na forma de ferramentas.

Um exemplo simples: ontem surgiu novamente na lista uma discussão sobre como apagar as conversas armazenadas no banco de dados (obtidas com o uso do plugin Monitoring Service). 

Após as dicas tradicionais, sugeri, meio de que brincadeira, que seria interessante alguém criar o OFMonitoringEraser, uma interface web onde o administrador do Openfire informasse o nome do usuário e a ferramenta se encarregasse de deletar as mensagens auditadas deste no DB.

Pois bem, menos de 1 hora depois surge a seguinte mensagem na lista:
"Prezados Colegas,
Estou disponibilizando a função escrita em PHP para fazer a exclusão dos registros conforme nosso amigo Marcelo Zola deseja. Basta alterar as credenciais de acesso ao banco de dados e enviar para servidor HTTP. O mesmo foi escrito para o banco MySQL, mais é plenamente possível utilizar qualquer outro banco já que PHP é muito versátil só necessário alterar uma linha. Segue abaixo endereço para download do mesmo.
http://www.cohabbd.com.br/scripts/ofmonitoringeraser.zip
Se me sobrar um tempo talvez eu possa o desenvolver melhor e também fazer uma versão .jar para importação no openfire."
O script é bastante simples e pode ser melhorado (como o próprio desenvolvedor comentou), então se alguém mais se interessar em fazê-lo (poderia ser informado qual período deve ser deletado, os campos do período poderiam ser obtidos diretamente do DB e por aí vai) fiquem à vontade. De qualquer forma creio que a contribuição inicial já deverá ajudar muitos administradores do Openfire que passam por esse dilema.

Obrigado ao Adrielso Pinto Teodoro, membro da lista, que dedicou seu tempo e demonstrou o verdadeiro espírito FLOSS, compartilhando seu trabalho com a comunidade.

Parabéns !!!

terça-feira, 28 de junho de 2011

Instantbird - versão 1.0 é lançada


Lembram do Instantbird, sobre o qual eu já havia postado em 2007? Pois é, hoje, após anos de desenvolvimento, foi lançada a versão 1.0.


Inicialmente o Instantbird parece ser somente mais um cliente de IM, mas ele merece uma atenção especial por utilizar tecnologias de softwares já consagrados, como o Pidgin (libpurple) e Mozilla Firefox, permitindo o uso de múltiplas redes de mensagem instantânea e abrindo espaço para o desenvolvimento de Add-ons que podem enriquecer ainda mais o cliente (veja os Add-ons já disponíveis). 
Além disso, um sistema de Tags para os contatos (ao invés dos tradicionais grupos) e também uma timeline diferenciada para o Twitter chamam a atenção nessa primeira versão do software.
Leia as notas de lançamento aqui.

segunda-feira, 27 de junho de 2011

Enviando SMS interativamente (Asterisk + XMPP + Digivoice ou Khomp)


Ainda falando sobre Asterisk e XMPP e seus usos (veja mais neste post) uma ideia que tive no final de semana e coloquei hoje em testes foi o envio interativo de SMS utilizando para isso um Asterisk integrado com XMPP (e uma placa Digivoice GSM ou uma placa/EBS Khomp GSM).

Objetivo

Enviar SMS de forma interativa utilizando um servidor Asterisk conectado a um servidor XMPP.

Requisitos

Servidor Asterisk integrado com um servidor XMPP (Openfire, ejabberd, Prosody, etc...) e com o Google Talk. Saiba como realizar esta integração aqui.

O procedimento

Novamente o contexto proposto é muito simples e atende somente um ramal (já que envia a mensagem para um usuário específico) ficando aberto para melhorias via  AEL ou AGI de forma a estender o recurso para todos usuários de seu domínio XMPP e todos seus ramais.

O contexto funciona da seguinte maneira: o usuário disca para o número *767* (*SMS*) e recebe uma mensagem em seu cliente XMPP solicitando o destino do SMS. Após informar o número o usuário recebe uma nova mensagem solicitando que seja informado o conteúdo do SMS. Assim que informar o conteúdo o Asterisk envia o SMS para o destino.
[sendsms]

exten => *767*,1,Answer() ;Atende a chamada
same => n,Set(CANAL=${CUT(CHANNEL,,1)}) ;Armazena o canal
same => n,NoOp(Envio de SMS de ${CANAL}) ;Mensagem do Asterisk
same => n,NoOp(Mandando mensagem para ${JABBERDEST}@jabberpriv.propus.com.br) ;Mensagem do Asterisk
same => n,JabberSend(propuspriv,${JABBERDEST}@jabberpriv.propus.com.br,Envio de SMS - Informe a número de destino) ;Solicita o número do destinatário do SMS
same => n,Set(OPCAODEST=${JABBER_RECEIVE(propuspriv,${JABBERDEST}@jabberpriv.propus.com.br,30)}) ;Recebe o número do destinatário do SMS
same => n,JabberSend(propuspriv,${JABBERDEST}@jabberpriv.propus.com.br,Envio de SMS - Digite a mensagem) ;Solicita o conteúdo do SMS
same => n,Set(OPCAOMSG=${JABBER_RECEIVE(propuspriv,${JABBERDEST}@jabberpriv.propus.com.br,30)}) ;Recebe o conteúdo do SMS
same => n,JabberSend(propuspriv,${JABBERDEST}@jabberpriv.propus.com.br,Enviando a mensagem "${OPCAOMSG}" para ${OPCAODEST}) ;Mensagem para o usuário
same => n,DgSendSMS(g1,${OPCAODEST},${OPCAOMSG}) ;Envia o SMS (g1 = grupo de canais GSM)
same => n,HangUp
Finalizando

Novamente um recurso muito útil e facilmente implementável. E como no post anterior, melhorias no contexto são muito bem vindas. Fique à vontade para contribuir !!!

;-)

UPDATE 28/12/12: para enviar o SMS usando uma placa/EBS da Khomp altere a seguinte linha:

same => n,DgSendSMS(g1,${OPCAODEST},${OPCAOMSG}) ;Envia o SMS (g1 = grupo de canais GSM)

para:

same => n,KSendSMS(recurso,${OPCAODEST},${OPCAOMSG}) ;Envia o SMS

onde recurso pode ser tanto a placa (b0, b1) com um canal específico (b0c2, por exemplo).

sábado, 25 de junho de 2011

Discando interativamente para contas Google Talk (Asterisk + XMPP)


Objetivo

Possibilitar a realização de chamadas de voz para contas Google Talk de forma interativa utilizando um servidor Asterisk conectado a um servidor XMPP.

Requisitos

Servidor Asterisk integrado com um servidor XMPP (Openfire, ejabberd, Prosody, etc...) e com o Google Talk. Saiba como realizar esta integração aqui.

O procedimento

O contexto aqui proposto é bastante simples e atende somente um ramal (já que envia a mensagem para um usuário específico). Você pode aprimorá-lo utilizando AEL ou AGI possibilitando assim estender o recurso para todos usuários de seu domínio XMPP.

O contexto funciona da seguinte maneira: o usuário disca para o número *48255* (*GTALK*) e recebe uma mensagem em seu cliente XMPP solicitando o destino da chamada. Após informar o endereço Google Talk do destinatário o Asterisk realiza a "discagem" e o usuário de imediato já passa a escutar o tom de chamada, como em qualquer outra ligação realizada.

O contexto:
[togtalk]
exten => *48255*,1,Answer() ; atende a chamada
same => n,Set(CANAL=${CUT(CHANNEL,,1)}) ; Armazena o canal que efetuou a chamada
same => n,NoOp(Discando Gtalk de ${CANAL}) ; Mensagens no asterisk
same => n,NoOp(Mandando mensagem para marcelo@xmpp.dominio.com.br) ; Mensagens no Asterisk
same => n,JabberSend(xmpp,marcelo@xmpp.dominio.com.br,Discando Google Talk - Informe a conta de destino) ; Envia msg para o usuário solicitando o endereço GTalk do destinatário
same => n,Set(OPCAO=${JABBER_RECEIVE(xmpp,marcelo@xmpp.dominio.com.br,30)}) ; Aguarda 30 segundos pela resposta do usuário
same => n,JabberSend(xmpp,marcelo@xmpp.dominio.com.br,Discando para ${OPCAO}) ; Envia msg para o usuário informando para onde irá discar
same => n,Dial(gtalk/asterisk-gtalk/${OPCAO}) ; Realiza a chamada
same => n,HangUp
Finalizando

Como podemos observar trata-se de um recurso muito útil e de fácil implementação. 

Caso você desenvolva um contexto mais elaborado não deixe de compartilhá-lo através dos comentários.

:-)

UPDATE 30/05/2012

Segue exemplo de configuração do jabber.conf:

[asterisk-gtalk]
type=client
serverhost=talk.google.com
username=myuser@gmail.com/Talk
secret=mysecret
port=5222
usetls=yes
usesasl=yes
statusmessage="Asterisk Server"
timeout=100

phpLDAPadmin - removendo os avisos nas telas de criação e edição

Uma coisa que acho muito inconveniente nas últimas versões do phpLDAPadmin são os avisos exibidos nas telas de criação e edição.


Esse avisos são gerados quando você usa um template que define um objectClass que seu servidor LDAP não reconhece, pois não tem o respectivo schema instalado.

No entanto, remover tais avisos é uma tarefa bastante simples. Basta editar o arquivo config.php e alterar a opção  hide_template_warning para true:
$config->custom->appearance['hide_template_warning'] = true;
Essa opção, disponível apartir da versão 1.2.0.3 acaba com os avisos indesejados:


quinta-feira, 23 de junho de 2011

fisl 12 - É na próxima semana!!!


E o fisl 12 é na próxima semana!!!

Além das presenças clássicas (como Maddog, Chris Hofmann, Simon Phipps, entre outros), o fisl terá também a presença de muitos palestrantes que estarão participando do evento pela primeira vez.

Destaque (na minha opinião) para as palestras sobre Android (muitas ministradas pelos desenvolvedores do Google) e para as presenças de Jeremy Allison (Samba) e de Tobias Oetiker (RRDTool, MRTG e SmokePing).

Veja a grade de programação do evento aqui.

segunda-feira, 20 de junho de 2011

Atualização do layout do site

Como vocês podem perceber o layout do site foi alterado.

Ainda não fiz quaisquer personalizações no modelo, mas me parece mais clean e moderno do que a versão anterior.

E aí ? Ficou melhor ou pior ? Alguma sugestão ?

:-)

terça-feira, 14 de junho de 2011

Openfire 3.6.4 - servidor e plugins compatíveis


Instalei um Openfire 3.6.4 e após configurá-lo percebi que vários plugins já não estavam mais disponíveis para essa versão pois haviam sido atualizados para a versão 3.7.0.

Baixei os plugins de outras instalações existentes e resolvi deixá-los disponíveis para quem ainda possa precisar dos mesmos. Seguem os links abaixo:
Espero que seja útil!

domingo, 12 de junho de 2011

Problemas com Iaxmodem e Khomp

Ainda falando de Asterisk e serviço de "fax virtual", outro problema que enfrentei recentemente foi relacionado ao software iaxmodem.

Após configurar o serviço corretamente pude observar o seguinte: a ligação era recebida, o iaxmodem atendia a mesma, disponibilizava o "sinal de fax", mas o fax não conseguia ser entregue. Até pensei em configurar o Free Fax for Asterisk para o recebimento (já que o envio não apresentava problemas), mas como o mesmo era limitado em apenas um canal simultâneo (é possível adquirir licenças adicionais, é claro) acabei desistindo da ideia.

Foi então que o Marlon Dutra me lembrou de um detalhe: esse era um problema já conhecido no uso do iaxmodem com as placas da Khomp. Para solucionar tal problema a própria Khomp havia disponibilizado um patch para o software.

Apliquei tal patch e o serviço ficou perfeito. Mas, como a Khomp removeu o patch da sua área de downloads, resolvi disponibilizar os fontes do iaxmodem 1.2.0 já devidamente patcheados aqui.

Problemas com Hylafax no Ubuntu 10.04

Deparei-me dia desses com um problema que me deu muita dor de cabeça e que acabou tomando muito do meu tempo com pesquisas e testes até conseguir solucioná-lo.

A tarefa era simples: precisava instalar um Hylafax em um servidor Ubuntu 10.04 para juntamente com o Iaxmodem e o Asterisk disponibilizar um serviço de "fax virtual" para um cliente.

Após a instalação e configuração dos pacotes os problemas começaram: apesar dos faxes serem recebidos com sucesso, "aparentemente" todos apresentavam problemas de conexão e o arquivo não continha muito mais do que a folha de rosto e algumas linhas da página enviada.

Após vários testes e brainstorms, acabei percebendo que a versão do Hylafax que vem com o Ubuntu 10.04 (Hylafax 6.0.3) estava bugada, motivo pelo qual estava tendo tantos problemas.

Fax recebido com o Hylafax 6.0.3 (pacote do Ubuntu 10.04)

Resolvi então testar uma versão mais atual do software e percebi que a versão 6.0.5 disponibilizada pelo Ubuntu 11.04 tinha as mesmas dependências da versão anterior.

Baixei os arquivos .deb da nova versão e instalei-os manualmente. Voilá, o serviço de fax ficou perfeito.

Fax recebido com o Hylafax 6.0.5 (pacote do Ubuntu 11.04)

Ainda não reportei o bug mas pretendo fazê-lo nos próximos dias. Assim, enquanto não sai a correção oficial, espero que este post possa ajudar outras pessoas que estejam passando pelo mesmo problema que tive.

domingo, 15 de maio de 2011

Openfire e os registros SRV do DNS


Com a nova versão do Openfire (3.7.0) lançada em março passado percebi uma mudança na integração dos servidores (s2s, A.K.A. federation) e gostaria de compartilhar uma dica que pode ajudar os demais administradores desse excelente servidor XMPP.

Para garantir que não hajam dificuldades na conexão entre servidores é recomendada a existência de registros SRV conforme o exemplo abaixo (tais registros devem existir para todos os domínios que serão conectados).

Imaginando que o domínio da empresa seja minhaempresa.com.br e que o domínio jabber seja xmpp.minhaempresa.com.br é recomendada a criação dos seguintes registros:
  • _jabber._tcp.xmpp.minhaempresa.com.br
  • _jabber._tcp.minhaempresa.com.br
  • _xmpp-server._tcp.xmpp.minhaempresa.com.br
  • _xmpp-server._tcp.minhaempresa.com.br
Todos os registros devem apontar para seu o domínio jabber, como pode ser observado:
marcelo@hellboy:~$ dig srv _xmpp-server._tcp.minhaempresa.com.br

; <<>> DiG 9.7.3 <<>> srv _xmpp-server._tcp.minhaempresa.com.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11368
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;_xmpp-server._tcp.minhaempresa.com.br. IN SRV

;; ANSWER SECTION:
_xmpp-server._tcp.minhaempresa.com.br. 86297 IN SRV 0 1 5269 xmpp.minhaempresa.com.br.

;; Query time: 16 msec
;; SERVER: 200.175.5.139#53(200.175.5.139)
;; WHEN: Sun May 15 00:24:00 2011
;; MSG SIZE rcvd: 89

Descobri essa situação ao migrar um cliente que utilizava uma versão mais antiga de Openfire para a última versão. Enquanto não foram criados os registros SRV dos servidores federados não foi possível ativar a conexão s2s entre os mesmos.

quarta-feira, 23 de fevereiro de 2011

GVT VOX IP com Asterisk (dicas)

Configurar o GVT VOX IP no Asterisk é tão simples quanto adicionar um novo peer SIP no seu servidor. Mas apesar de toda simplicidade seguem algumas dicas que podem ser muito úteis para que o serviço funcione de forma adequada.

Problema 1: ligações eventualmente são encerradas de forma abrupta

Para resolver essa questão, segundo a equipe técnica da GVT, "era preciso que o Asterisk, após o Trying, respondesse 180 Ringing ou 183 Session Progress. Sem isso a central não repassava a informação as operadoras que originaram a chamada temporizando assim a ligação."

Para ativar tais sinalizações abra o arquivo sip.conf e adicione/ajuste os seguintes parâmetros:
progressinband=yes
prematuremedia=no

Desde que tais parâmetros foram setados não houve mais ocorrências do problema, o que é um bom sinal. Como isso ocorria de forma aleatória, se o problema persistir eu atualizarei esse post com a informação.

Problema 2: chamadas que ficam mudas ao serem atendidas

Uma situação muito estranha do GVT VOX IP é que algumas ligações geradas fazem com que o usuário seja "direcionado" para o Music on hold (mesmo com a opção de forçar o ring ativada - parâmetro r do comando Dial) o que faz com que o mesmo acredite ter discado para seu próprio PBXIP. Tais ligações quando atendidas ficam mudas.

A solução desse problema foi dada pelo Anderson Eckhardt na lista AsteriskBrasil.

Segue a explicação do Anderson sobre o problema:
"Sobre a música em espera, também estou passando por isso com diversas versões do Asterisk(1.4/1.6/1.8), até o momento não tenho solução, e forçar o ring me agrada! No entanto observei que este fato ocorre somente com números portados. Se analisar os pacotes nestas chamadas, com alguma ferramenta de rede wireshark/tcpdump, vai notar o erro nas informações/portas SDP(parâmetro acima), e também podemos ver q existe um outro tipo de consulta/tráfego para estes casos, sendo neste momento que a chamada entra em espera, e por isso a música..."

Para resolver essa situação foi necessário editar o arquivo sip.conf e adicionar o seguinte parâmetro a configuração do SIP da GVT:
ignoresdpversion=yes

Tal configuração não solucionou a questão do Music on hold, mas possibilitou que as ligações funcionassem corretamente (agora quando as mesmas são atendidas não ficam mais mudas). Ainda é aguardada a posição/solução oficial da GVT sobre esse problema, e quando a mesma for enviada será publicada neste post.

Tem mais ?

Por enquanto é isso que posso relatar...

Na minha opinião é uma falha grave da GVT não repassar essas informações quando o serviço é instalado, já que encontrei várias pessoas reclamando dos mesmos problemas. No entanto, como o VOX IP é relativamente novo e normalmente a GVT presta um excelente serviço acho que vale dar um voto de confiança para a operadora.

Se você conhecer outras dicas relacionadas ao GVT Vox IP não deixe de compartilhá-las nos comentários do post.



terça-feira, 25 de janeiro de 2011

Clientes SIP que merecem ser testados

Sempre posto no blog falando de clientes XMPP. Para variar um pouco resolvi redigir esse post indicando dois cliente SIP que, na minha opinião, merecem ser testados. Ambos são projetos Open Source que implementam uma gama de recursos bastante interessante.


Um deles é o Blink que tem um visual bem bacana e parece ser bastante estável. Com bons recursos de áudio, a versão para MacOSX (que é bem mais completa que a versão para Linux, baseada em Qt) implementa Desktop Sharing, SMS, chat entre outra coisas. Leia mais sobre os recursos do Blink aqui.


O outro software é o SIP Communicator, que ainda está em estágio alpha, mesmo depois de mais de 2 anos de desenvolvimento. A vantagem do SIP Communicator é que além de ser um simples cliente SIP, ele também é um cliente XMPP e IM genérico (ICQ, MSN, etc...) com recursos de vídeo e com futuro suporte ao Jingle Nodes. A desvantagem clara é que o mesmo, por ser uma versão alpha, não deve ser usado em ambientes de produção. Isso não chega a ser um grande problema, já que a versão 1.0 deve ser lançada ainda no primeiro semestre de 2011. Veja o roadmap aqui.

Por estar mais ligado à comunidade e por adicionar mais recursos de comunicação, o SIP Communicator para mim é a melhor escolha, mas isso é algo que deve ser julgado por cada usuário. Saiba mais sobre os recursos do SIP Communicator aqui.



Bom, mas para testar os softwares indicados você precisa de uma conta SIP. Caso você não possua uma, recomendo que acesse o site sip2sip. O sip2sip é mantido pela AG Projects (desenvolvedora do Blink) e lá você poderá criar sua conta sip gratuita para usar nos clientes acima.

Divirta-se!

Leia também:

Asterisk - controle de horário de atendimento

Existe uma situação relacionada a telefonia que me incomoda bastante: você liga para uma empresa e o telefone chama sem parar até a ligação cair. Às vezes (e isso já aconteceu comigo) você acaba sendo atendido pelo vigia, que lhe informa que o expediente já terminou. Na minha opinião (considerando-se o porte da empresa, é claro) isso transmite uma sensação de amadorismo e descaso com o cliente.

Nessas horas eu sempre me pergunto: custava colocar uma mensagem informando o horário de funcionamento?

Temos sempre de lembrar que muitas empresas (principalmente as menores) ainda utilizam pequenas centrais telefônicas que dificultam (ou em alguns casos impossibilitam) que essa mensagem seja disponibilizada, mas se você utiliza o Asterisk isso pode ser configurado facilmente.

Para implementar o controle de horário no Asterisk vamos utilizar a aplicação GotoIfTime.

Com o GotoIfTime é possível realizar controles de fluxo no plano de discagem com base no horário atual (é SEMPRE MUITO IMPORTANTE manter o relógio de seu servidor atualizado - saiba mais sobre NTP).

Segue um exemplo que redireciona as chamadas de entrada com base no horário:

/etc/asterisk/extensions.conf

[from-pstn]
; contexto de chamadas recebidas da pstn

; inclui o contexto de controle de horário
include => horario

[horario]
; contexto de controle de horário

; Se a ligação foi recebida das 9 às 14:59 horas de segunda a sexta-feira
; segue para o contexto de ramais
exten => _XXXX,1,GotoIfTime(9:00-14:59|mon-fri|*|*?ramais,${EXTEN},1)

; Se a ligação foi recebida das 15 às 18 horas de segunda a sexta-feira
; segue para o contexto de fax
exten => _XXXX,1,GotoIfTime(15:00-18:00|mon-fri|*|*?ramais,${EXTEN},1)

; Nas ligações recebidas nos demais horários é executada a mensagem
; de horário de atendimento e a chamada é desligada
exten => _XXXX,n,Answer
exten => _XXXX,n,Wait(1)
exten => _XXXX,n,Playback(horario_de_atendimento)
exten => _XXXX,n,HungUp

[ramais]
; contexto de discagem para os ramais

exten => _XXXX,1,Answer
exten => _XXXX,n,Wait(1)
exten => _XXXX,n,Dial(SIP/${EXTEN},30)

[fax]
; contexto de discagem para o fax

exten => _XXXX,1,Answer
exten => _XXXX,n,Wait(1)
exten => _XXXX,n,Dial(DAHDI/g2/${EXTEN},30)

A aplicação, como pode-se perceber, abre um grande leque de possibilidades permitindo um controle minuscioso de horário para o tratamento das chamadas.

Adapte-a para seu ambiente e você certamente agregará muito valor a sua telefonia IP.

Asterisk - controlando o número máximo de chamadas recebidas por ramal


Apesar de não existir limite de número de chamadas simultâneas num ramal SIP (o que é eventualmente controlado pelo cliente em uso), se você precisa desse tipo de restrição é possível implementá-la diretamente no Asterisk.

Para isso podemos fazer uso de duas funções disponíveis no plano de discagem (que substituem o antigo parâmetro call-limit da configuração sip): GROUP e GROUP_COUNT. A função GROUP adiciona um canal em um grupo, enquanto a função GROUP_COUNT conta o número de canais de um grupo.

Abaixo um pequeno exemplo de como fazer com que os ramais SIP recebam somente uma chamada por vez (sem limites de chamadas originadas).

/etc/asterisk/extensions.conf
[ramais]
; contexto de recebimento de chamadas no ramais

exten => _XXXX,1,NoOp

; adiciona o ramal no grupo ramalXXXX
exten => _XXXX,n,Set(GROUP()=ramal${EXTEN})

; verifica o número de chamadas simultâneas no grupo ramalXXXX
exten => _XXXX,n,Set(SIMULTCALL=${GROUP_COUNT(ramal${EXTEN})})

exten => _XXXX,n,NoOp(Ligacoes em curso ramal ${EXTEN}: ${SIMULTCALL})

; verifica se o número de chamadas é 1 (a própria chamada)
; se for igual a 1 efetua a discagem, caso contrário nega o recebimento
exten => _XXXX,n,GotoIf($["${SIMULTCALL}" = "1"]?call:nocall)

; seção usada quando a chamada não pode ser realizada (ramal em uso)
exten => _XXXX,n(nocall),NoOp(Limite Excedido - ramal ${EXTEN})
exten => _XXXX,n(nocall),HungUp

; seção usada para realização da chamada
exten => _XXXX,n(call),NoOp(Ligacao OK - ramal ${EXTEN})
exten => _XXXX,n(call),Dial(SIP/${EXTEN},30,twxr)


[outgoing]
; contexto das ligações para a pstn

exten => _X.,1,NoOp
exten => _X.,n,Noop(CALLERID: ${CALLERID(all)})

; adiciona o ramal no grupo ramalXXXX
; apesar de não haver limite de chamadas originadas é preciso computar
; essa ligação, pois caso o ramal esteja em uso por ter originado uma ligação
; é preciso bloquear o recebimento de uma nova chamada neste
exten => _X.,n,Set(GROUP()=ramal${CALLERID(number)})

exten => _X.,n,Set(SIMULTCALL=${GROUP_COUNT(ramal${CALLERID(number)})})
exten => _X.,n,NoOp(Ligacoes em curso ramal: ${SIMULTCALL})

; Disca para a pstn
exten => _X.,n,Dial(DAHDI/g1/${EXTEN},60,TWXr)
exten => _X.,n,HungUp

Como pode-se perceber, o recurso pode ser facilmente implementado. O código acima é um modelo que pode ser facilmente aprimorado com o uso de voicemail ou de uma mensagem previamente gravada em caso de rejeição da chamada. Tudo de acordo com a necessidade específica de seu ambiente.

ATENÇÃO (17/02/2011): o recurso acima apresenta um problema: chamadas transferidas continuam sendo consideradas chamadas em andamento e só são removidas do grupo após a ligação original (já transferida) ser finalizada. Estou estudando como contornar a situação.

sexta-feira, 14 de janeiro de 2011

Propus inicia 2011 ampliando equipe de profissionais

Com o objetivo de manter a qualidade do atendimento dispensado aos clientes e suprir as demandas resultantes de novos negócios, a Propus lançou processo seletivo para contratação de profissionais e estagiários.

Os candidatos devem se inscrever diretamente no portal da empresa, preenchendo o cadastro e enviando currículo.

As oportunidades são das áreas de administração de redes de servidores Linux e de desenvolvimento de software Python/Django.

Acesse www.propus.com.br/vagas e cadastre seu currículo.