Posts Tagged ‘php’

pub: Asterisk novo e remoção do php

Monday, January 25th, 2010

Mais uma atualização no pub/. Atualizei o asterisk para o 1.4.29 e removi o php já que a versão que vem no slackware 13.0+ contém as flags que eu queria. =)

Slackbuild: PHP

Sunday, August 2nd, 2009

Mais um slackbuild para o pub/. Este é o segundo script de construção de pacotes customizado por mim distruibuido aqui. Trata-se do slackbuild oficial do Slackware para PHP 5.2.10 modificado para incluir suporte a PostgreSQL. A lista de modificações é:

  • Suporte a PostgreSQL, também via PDO.
  • Compilado para i686.
  • Make com 3 jobs e não 7 (sou pobre).

É isso :) . Para download pub/slackware/packages/ ou pub/slackware/sources/php/.

Capturas por grupo no Asterisk

Saturday, July 11th, 2009

AsteriskUm dos problemas que enfrentamos em sistemas com Asterisk é a captura por grupo. Elas não funcionam quando se tem tecnologias diferentes em ramais e/ou se usa driver de canais de terceiros. Administrar isso se torna uma tarefa monstruosa e épica caso seu sistema seja muito grande, já que apesar de macros e modelos nos arquivos de configuração de tecnologias você precisa administrar vários deles, tarefa esta que se torna especialmente dolorosa em sistemas integrados com ramais espelhados em banco de dados.

Uma solução que eu implementei com sucesso até agora é a implementação manual de um sistema de capturas usando um script AGI e a app Pickup presente por padrão no Asterisk.

A aplicação Pickup efetua capturas de ligações recebendo como parâmetro uma extensão em um contexto. Esse tipo de captura não me ajuda em nada na maioria das vezes mas a app Pickup tem uma boa carta na manga: o contexto PICKUPMARK.

Quando o contexto passado como parâmetro para a aplicação é PICKUPMARK a aplicação vai procurar ligações que contenham a variável de canal definida como o conteúdo do exten.  Ex: Pickup(desenvolvimento@PICKUPMARK) irá procurar ligações que contenham a variável PICKUPMARK definida como ‘desenvolvimento’.

Para marcar e  capturar é necessário encontrar o real realizador da chamada e resolver seu grupo, para isso eu uso um script AGI que faz a identificação do grupo de captura baseado no callerid do originador da chamada.

;Configuração para extensão de captura
exten => _*8,1,AGI(resolv_pickup_group.php,${CALLERID(num)})
exten => _*8,n,Pickup(${PICKUPGROUP}@PICKUPMARK)
exten => _*8,n,Hangup

O funcionamento desse AGI é muito simples, o que ele faz é uma consulta no banco de dados onde estão configurados meus ramais e retornar o grupo de captura referente ao ramal passado como parâmetro.

Usa-se o mesmo script para definir o grupo da ligação quando uma ligação é efetuada para o ramal, não esqueça de executar isso antes de cada dial para o ramal que se deseja ter essa feature ativa.

;Configuração para extensão de captura
exten => _X.,1,AGI(resolv_pickup_group.php,${CALLERID(num)})
exten => _X.,n,Set(__PICKUPMARK=${PICKUPGROUP})
exten => _X.,n,Dial(${EXTEN},60,twk)
exten => _X.,n,Hangup

Perceba o pulo do gato: ao atribuir a variável eu estou usando dois _ (underlines) antes do nome da variável para determinar herença infinita na variável. Assim não é necessário defini-la como variável global e sem isso a captura não funciona quando se tem ligações concorrentes.