Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 03) - Final.
Criado por Matthew Nicholson, modificado pela última vez por Rusty Newton, tradução técnica e adaptação para o Brasil por Angelo Delphini.
Dialplan LUA: Hints
No Asterisk® SCF™ versão 10 e superiores, as dicas (HINTS) do Dialplan (extensions.lua) podem ser especificadas de maneira semelhante à maneira como as extensões são especificadas em Dialplan CONF e AEL.
.
Dialplan LUA: Exemplos
Na sequencia alguns exemplos de Dialplan LUA em Asterisk® SCF™ versão 10 e superiores, o objetivo é as varias formas de organizar as extensões no Dialplan LUA.
Menos desordem
Em vez de definir cada extensão em linha, você pode usar este método para criar um arquivo extensions.lua mais organizado. Uma vez que a tabela de extensões e cada contexto são tabelas LUA normais, você pode tratá-las como tal e construí-las peça por peça.
Less Clutter v2
Neste exemplo, usamos uma função sofisticada para registrar extensões.
Tópicos avançados em pbx_lua
Nos bastidores, uma série de coisas acontecem para tornar a integração de LUA ao Asterisk® SCF™ a mais perfeita possível. Alguns detalhes de como funciona essa integração podem ser encontrados a seguir.
extensions.lua Processo de carga
O arquivo extensions.lua é carregado na memória uma vez quando o módulo pbx_lua é carregado ou recarregado. O arquivo é então lido da memória e executado uma vez para cada canal que procura ou executa uma extensão baseada em LUA. Visto que o arquivo é executado uma vez para cada canal, pode não ser sábio fazer coisas como conectar-se a serviços externos diretamente do script principal ou construir sua tabela de extensões a partir de um serviço da web ou banco de dados.
A mesa de extensions
A tabela extensions é uma tabela LUA padrão e pode ser definida como você quiser. O módulo pbx_lua carrega e classifica a tabela quando necessário. As chaves na tabela são nomes de contexto e cada valor é outra tabela LUA contendo extensões. Cada chave na tabela de contexto é um nome de extensão e cada valor é uma função de extensão.
extensions = {
context_table = {
extension1 = function()
end;
extension2 = function()
end;
};
}
Para onde foram as prioridades?
Não há prioridades. O Asterisk® SCF™ usa prioridades para definir a ordem em que ocorrem as operações do Dialplan. O módulo pbx_lua usa funções para definir extensões e a execução ocorre dentro do interpretador LUA, as prioridades não fazem sentido neste contexto. Para o Asterisk® SCF™, cada extensão em pbx_lua aparece como uma extensão com uma prioridade. As extensões em LUA podem ser referenciadas usando o nome do contexto, extensão e prioridade 1, por exemplo GoTo(default,1234,1). Você só faria referência a extensões desta forma de fora de pbx_lua (ou seja, de extensions.conf ou extensions.ael). Com pbx_lua você pode apenas executar a função dessa extensão.
extensions.
default
[
"1234"
](
"default"
,
"1234"
)
Lua Script Lifetime
O mesmo estado de LUA é usado durante o tempo de vida do canal do Asterisk® SCF™ em que está sendo executado, portanto, efetivamente, o script tem o tempo de vida do canal. Isso significa que você pode definir variáveis globais no estado de LUA e recuperá-las posteriormente de uma extensão diferente, se necessário.
Aplicativos, funções e variáveis
Detalhes sobre como acessar aplicações e funções do Dialplan LUA e variáveis de canal podem ser encontrados na página Interagindo com o Asterisk® SCF™ LUA (aplicativos, variáveis e funções) .
Ao acessar um aplicativo ou função dialplan ou uma variável de canal, um objeto de espaço reservado é gerado que fornece os métodos :get( ) e :set( ).
Há um pequeno custo na criação de objetos de espaço reservado, portanto, o armazenamento de objetos de espaço reservado usados com frequência pode ser usado como uma micro otimização. No entanto, isso nunca deve ser necessário e só fornece benefícios se você estiver executando micro benchmarks.
Tkat's All Folks! (É por hoje é só, pessoal!).
Deixe um comentário