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.