exten => 0XXXXXXXX,n,Dial(${GVT}${EXTEN:1})
A variável exten recebe novamente os mesmos números, esta é a logica do Asterisk, este contexto funcionará se um ramal associado a ele discar de 0 e 8 dígitos, então ele executará. No segundo passo é apresentado o n, que significa próximo, em versões anteriores a 1.4 era necessário digitar em cada linha as prioridades 1,2,3,4 e assim sucessivamente. Agora você diz aonde vai iniciar e o resto ele faz automático, muito útil, no caso de adicionar ou remover alguma linha, basta adicionar e pronto, o n e automático, antes teria que checar todas as prioridades.
Variável Dial, que significa discar, mas discar o que? Isto, (${GVT}${EXTEN:1}), esta variável ${GVT} é uma variável definida pelo programador do Asterisk na sessão global, estaria assim GVT=zap/r2 por exemplo, o canal que executa ligações para gvt discará por este canal, a variável EXTEN, cujo é 0XXXXXXXX, os :1(EXTEN:1), é para formatar como o número sairá pelo canal, a rede de telefonia pública, tratando de uma ligação local, é necessário que saia somente o número "limpo", sem o zero, então o :1 elimina o primeiro dígito, você pode utilizar :2, :4, o que for necessário, depende de sua regra.
Exemplo de contexto para DDD
Vamos passar para mais algumas funções e exemplos de regras:
[DDD]
exten => _00XX[2-6]XXXXXXX,1,Noop(==> DDD telefone fixo)
exten => _00XX[2-6]XXXXXXX,n,ChansAvail(${GVT})
exten => _00XX[2-6]XXXXXXX,n,GotoIf($["${AVAILSTATUS}" = "34" ] ?2)
exten => _00XX[2-6]XXXXXXX,n,Dial(${GVT}0${OP-GVT}${EXTEN:2}||Tt)
exten => _00XX[2-6]XXXXXXX,n,Hangup
exten => _00XX[2-6]XXXXXXX,102,Noop(==> Transbordo)
exten => _00XX[2-6]XXXXXXX,n,ChansAvail(${GVT})
exten => _00XX[2-6]XXXXXXX,n,Dial(${TRANSIT}0${OP-TRANSIT}${EXTEN:2}||Tt)
exten => _00XX[2-6]XXXXXXX,n,Hangup
Vamos a explicação:
[DDD] = nome do contexto, para ligações DDD
exten => _00XX[2-6]XXXXXXX,1,Noop(==> DDD telefone fixo), quando for discado 00+ DDD + dígito de 2 a 6, dígitos que abrangem números de telefonia fixa, contexto não ligará para celulares, mais sete dígitos, pois já foi escolhido um de 2 a 6, a primeira prioridade, aparecerá a mensagem.
exten => _00XX[2-6]XXXXXXX,n,ChansAvail(${GVT}) = Avaliará o canal que está sendo ligado pela GVT.
exten => _00XX[2-6]XXXXXXX,n,GotoIf($["${AVAILSTATUS}" = "34" ] ?102) = função GotoIf, muito utilizada para transbordo, faz o seguinte, verifica se a variável availstatus, que é bem parecida com o próprio nome, possui a função de avaliar o canal, se possuir o código 34, este código é um código ISUP, código padrão mundial de telefonia, podem pesquisar na web pelo mesmo. O código 34 significa todos canais ocupados, então ele não poderá ligar pela gvt se tais tiverem ocupados, assim ele executara a prioridade 102, que será mostrada adiante, aonde começará o transbordo, se não for 34, por ter canal disponível para discar, então passará ao próximo passo.
exten => _00XX[2-6]XXXXXXX,n,Dial(${GVT}0${OP-GVT}${EXTEN:2}||Tt) = efetua a ligação usando o canal GVT, aqui está a diferença por ser um DDD, cujo de um telefone convencional deveríamos discar, 0(código da operadora) + (DDD) + (número), este 0 após op-gvt ficará nesta posição 00 0 (aqui) XX, necessário, pois se discando 0 e mais número liga local, então discando 00 +número liga DDD, o exten:2 corta os dois primeiros números, portando a ligação sairá 0 ${OP-GVT}, definida na seção globals, variável recebe o número da operadora gvt+ XX, DDD de algum lugar do pais, e o número.
exten => _00XX[2-6]XXXXXXX,n,Hangup= hangup encerra a ligação(desliga).
Funções com transbordo:
exten => _00XX[2-6]XXXXXXX,102,Noop(==> Transbordo)
exten => _00XX[2-6]XXXXXXX,n,ChansAvail(${EMBRATEL})
exten => _00XX[2-6]XXXXXXX,n,Dial(${EMBRATEL}0${OP-EMBRATEL}${EXTEN:2}||Tt)
exten => _00XX[2-6]XXXXXXX,n,Hangup
Note que após o número que a variável exten recebe temos 102, o número que estava no GotoIf, se estiver ocupado, faz isto a prioridade 102, após cair nela executará o passo abaixo com os números N, no exemplo discaria pela Embratel, se a gvt estivesse ocupada, quem cria a regra deve associar a custos e tarifas, ver qual é mais em conta.
Este foi meu primeiro artigo, não sou muito bom escrevendo, pretendo aprimorar mais isto, espero que gostem. Em breve posto mais algum material sobre Asterisk, só havia visto artigos aqui no VOL ensinando a criar ramais, instalação do Asterisk, mas nada explicando estas variáveis, passando uma visão melhor do extensions.conf.
Fica aí o artigo e um obrigado ao VOL, por onde venho apreendendo muito sobre
Linux.