Asterisk® SCF™ - Dialplan modular

Este é apenas um sumário de um Dialplan no Asterisk® SCF™ implementado a alguns anos, espero que você ache ele tão útil quanto eu achei.

A necessidade surgiu quando administrava em Londrina/PR uma rede, com quatro servidores Asterisk® SCF™, referente a Matriz e Filiais interconectadas e integrada a um pequeno Call Center (interno para SAC), o problema era manter quatro Dialplan separados, o que acabou sendo um esforço cansativo. Este conceito é um FORK de uma ideia de um profissional (Amit Mehta) de Sydney/Australian via e-mail.

Os objetivos deste Dialplan foi o seguinte:
  • Modularize todas as tarefas rotineiras que são executadas no plano de discagem.
  • Redução substancialmente da quantidade geral e a repetição de código no Dialplan.
  • Reduçao da sobrecarga de gerenciamento do Dialplan.
  • Tornar a depuração do Dialplan fácil para entendimento e o mais importante, legível.
  • Otimizar o uso de variáveis ​​globais e de canal para reduzir a quantidade e os locais de futuras alterações no Dialplan.
  • Atualizar o Dialplan da sintaxe do Asterisk® SCF™ v1.4 para Asterisk® SCF™ v11.
    • Ex.: Converter todas as Macros e Sub-Rotinas.
    • Incorporar o uso de Sub-Rotinas com a capacidade de passar variáveis ​​através do comando "Gosub".
Muito semelhante à versão padrão da extensions.conf no Asterisk® SCF™ v11, com algumas pequenas personalizações para as variáveis passadas para ele. Tecnicamente, não é isso que estou chamando de "modular" (que na verdade é uma Sub-Rotina); este é apenas um exemplo do contexto stdexten que alguns podem achar útil.

No meu cenário, sob nenhuma circunstância haveria motivo para alterar o contexto do correio de voz; portanto, os argumentos passados são: Os dispositivos para tocar, o período de tempo limite (por quanto tempo tocar o ramal) e a caixa de correio de voz de destino. Se nenhum dos segundo e terceiro argumentos forem passados, ele assumirá um período de tempo limite de 25 milissegundos e a extensão passada no argumento um como caixa de correio de voz.

Aqui está o contexto stdexten:
[stdexten]
; Standard extension subroutine:
; ${EXTEN} - Extension ; ${ext}
; ${ARG1} - Device(s) to ring ; ${dst}
; ${ARG2} - Dial Timeout ; ${tmt} 25 seconds
; ${ARG3} - Specify voicemail box to use ; ${mbx}
; Syntax: Gosub(context,extension,priority(${ARG1},${ARG2},${ARG3}))
; Use: Gosub(stdexten,${EXTEN} or specify extension,stdexten(SIP/4000&SIP/4002,25,4000))
exten => _X.,1001(stdexten),NoOp(Dialing standard extension)
exten => _X.,n,Set(LOCAL(ext)=${EXTEN})
exten => _X.,n,Set(LOCAL(dst)=${ARG1})
exten => _X.,n,Set(LOCAL(tmt)=${IF($[${ISNULL(${ARG2})} = 1]?25:${ARG2})})
exten => _X.,n,Set(LOCAL(mbx)=${IF($[${ISNULL(${ARG3})} = 1]?${ext}:${ARG3})})
exten => _X.,n,Dial(${dst},${tmt})
exten => _X.,n,Goto(stdexten-${DIALSTATUS},1)

exten => stdexten-NOANSWER,1,Voicemail(${mbx},u)
exten => stdexten-NOANSWER,n,Return()

exten => stdexten-BUSY,1,Voicemail(${mbx},b)
exten => stdexten-BUSY,n,Return()

exten => _stde[x]te[n]-.,1,Goto(stdexten-NOANSWER,1)

exten => a,1,VoicemailMain(${mbx})
exten => a,n,Return()
Aqui está um exemplo simples de uma chamada interna para o stdexten que também incorpora o uso de outro módulo do Dialplan, o "sub-GetSourceCID", para procurar primeiro o identificador de chamadas de origem no banco de dados MySQL do Asterisk® SCF™:

exten => _40XX,1,Gosub(sub-GetSourceCID,${EXTEN},1)
exten => _40XX,n,Gosub(stdexten,${EXTEN},stdexten(SIP/${EXTEN}))
exten => _40XX,n,Hangup()
Bom seria isto, em um futuro post, vou mostrar como migrei este contexto para AEL, e posteriormente para LUA.

Agradecimento ao amigo Amit Mehta.

Nenhum comentário

Tecnologia do Blogger.