Bom dia Bruno!<br><br>Seguinte, algo que acredito que é uma boa prática (tanto por organização quanto por segurança) sempre separar tudo em contextos diferentes. Por exemplo, eu sempre crio contextos separados para saída de celular local ([7-9]XXXXXXX), para saída de fixo local ([1-6]XXXXXXX), interurbano e por aí vai. Se você utiliza AEL2, tem bastante coisa para melhorar o código e a segurança também. Uma coisa que eu gosto de fazer também é criar uma pasta chamada &quot;/etc/asterisk/extensions/&quot; e dentro dela criar os arquivos extensions (.conf ou .ael). Eu acredito que fica mais organizado. Normalmente eu crio um arquivo separado para ramais internos, outro para rotas entrantes, para rotas saintes, para facilidades, para macros, etc...<br>
<br>Eu também crio &quot;tabelas de restrições&quot; (uso esse nome porque é como é chamado nos PBX&#39;s) para os ramais somente com o que eles precisam. Por exemplo:<br><br>[restrito] ;Realiza ligações locais somente<br>
include =&gt; ramais<br>include =&gt; localFixo<br>include =&gt; localMovel<br>...<br>...<br><br>E por aí vai! Eu nunca aponto um ramal direto para o contexto com o Dial(). Além de, na minha opinião, ficar bem mais organizado.<br>
<br>Outro detalhe também é evitar repetir o código, eu crio macros e contexto separados para cada coisinha, cada detalhe. Por exemplo, eu tenho como para usar o MixMonitor() antes que qualquer Dial() entrante ou sainte. Eu criei uma macro só com o MixMonitor() e um return; (eu utilizo AEL). Daí você me pergunta: &quot;Você é idiota?&quot;. Não, só que eu chamo essa macro pelo umas 30 vezes no meu plano de numeração. Se um dia eu precisar mudar o nome do arquivo, caminho, etc... É só mudar na macro que afeta tudo. A mesma coisa com a extension &quot;h&quot;, eu sempre chamo uma macro só com o Hangup() e um return;. Um bom exemplo é que esses dias precisei implementar uma facilidade em um Asterisk onde seria preciso na extension &quot;h&quot; checar uma informação. Eu já tinha meio caminho andado por todos os contextos chamarem a mesma macro na extension &quot;h&quot;. Ao meu ver, facilita bastante as coisas.<br>
<br>Como citei sobre AEL2, ele possui o abstract por exemplo (nunca vi para o .conf). Tornar um contexto em abstract, impede a utilização do Goto() para esse contexto, só pode ser usado pelo &quot;include&quot;. Eu gosto de AEL por ser bem mais prático, organizado e rápido de fazer. Sem contar com o aelparse que facilita bastante.<br>
<br>Acredito esses detalhes sejam boas práticas. Eu nunca vi um documento do genero, mas no voip-info [1] tem um artigo sobre AEL2 que mostra sobre boas práticas [2] em AEL.<br><br>Uma dica para quem quer conhecer AEL. Faça um backup dos seus confs e execute o comando &quot;conf2ael&quot; e veja seu novo extensions no arquivo &quot;aelout.ael&quot;. Fica a dica (Vale a pena!). :D<br>
<br>[1] <a href="http://www.voip-info.org/wiki/view/Asterisk+AEL2">http://www.voip-info.org/wiki/view/Asterisk+AEL2</a><br>[2] <a href="http://www.voip-info.org/wiki/view/AEL+Example+Snippets">http://www.voip-info.org/wiki/view/AEL+Example+Snippets</a><br>
<br><br>Ats,<br>Rodrigo Lang<br><br clear="all"><br>-- <br>Rodrigo Recipes!<br>Last post: <a href="http://rodrigorecipes.blogspot.com/2010/05/dundi-pt2.html">DUNDi! pt.2</a><br>Tenha <a href="http://pt.wikipedia.org/wiki/Netiqueta">Netiqueta!</a><br>