tag:blogger.com,1999:blog-53515702916810625642024-03-14T01:18:38.350-03:00A.B.Delphini™Toda vez que um homem supera os reveses, torna-se mentalmente e espiritualmente mais forte!Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.comBlogger183125tag:blogger.com,1999:blog-5351570291681062564.post-79022146870177537622023-12-20T12:30:00.002-03:002023-12-20T12:30:47.091-03:00Desenvolvimento de Aplicações VoIP com Asterisk® SCF™<div style="text-align: left;"><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7PaiGzViOFLO8qogYMqtS7XcMiWLoKcLRFzu8LpMas8ALxkdIATO63Yt5wZPjVgLpi9WeXVW4s_HFCYjCpw2N9EZH1XdRGkI90lT11uJOrGtfzFl9wHfkmShuHlyq-hmzktNTzF-Yag2vP0mO41joQKmqRdmmssBjbvqBYxoornstjGSNsAQFRxOJijE/s1024/voip_pbx.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7PaiGzViOFLO8qogYMqtS7XcMiWLoKcLRFzu8LpMas8ALxkdIATO63Yt5wZPjVgLpi9WeXVW4s_HFCYjCpw2N9EZH1XdRGkI90lT11uJOrGtfzFl9wHfkmShuHlyq-hmzktNTzF-Yag2vP0mO41joQKmqRdmmssBjbvqBYxoornstjGSNsAQFRxOJijE/s16000/voip_pbx.jpg" /></a></div><p></p></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">O desenvolvimento de aplicações de voz é um conceito muito amplo que engloba o desenvolvimento básico de centrais telefônicas (Softswitch PBX IP), programação IVR (Robôs de Cobrança, e Pesquisa), programação de ambientes de rede orientados a protocolos VoIP, gerenciamento de pacotes, desenvolvimento de codecs, criptografia, programação de chatbot e uma longa lista. etc... </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"> </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">Apesar disso, e focando neste artigo no desenvolvimento básico, vamos falar sobre as três formas mais comuns de desenvolver soluções, utilizando ferramentas conhecidas por todos: Asterisk® SCF™, Kamailio</span></span><span style="font-size: medium;"><span style="font-family: arial;">®</span></span><span style="font-size: medium;"><span style="font-family: arial;"> e WebRTC</span></span><span style="font-size: medium;"><span style="font-family: arial;">®</span></span><span style="font-size: medium;"><span style="font-family: arial;">. </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"> </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">Em artigos futuros falaremos de outras técnicas e ferramentas não tão conhecidas, mas que nos oferecerão soluções diferentes daquelas que podem ser realizadas com uma dessas ferramentas.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"> </span></span></div><h3 style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><b>Asterisk® SCF™</b> <br /></span></span></h3><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">O Asterisk® SCF™ nasceu como um software de central telefônica (Softswitch PBX IP), concebido desde o início como uma ferramenta de software para atuar como PABX: (central telefônica) e com opções incluídas em seu código tão básicas como música em espera, caixa postal de voz (correio de voz), transferência de chamadas, gravação de chamadas, filas e agentes, reprodução de narração, IVR, etc. Porém, quem deseja um PABX padrão e instala um Asterisk® SCF™ pela primeira vez certamente encontrará grandes frustrações: </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><br /></span></span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial; font-size: medium;">Assim que instalado, é necessária uma grande configuração para ter um sistema telefônico que atenda minimamente ao que é exigido em um PABX padrão. </span></li></ul><ul><li><span style="font-size: medium;"><span style="font-family: arial;">Requer conhecimentos básicos que <b><span style="color: red;">não são básicos</span></b> para quem é leigo na área e não sabe como funcionam protocolos, codecs, dialplan, etc. para configurá-lo de forma minimamente decente.</span></span></li></ul> </div><ul style="text-align: left;"><li><span style="font-size: medium;"><span style="font-family: arial;">Não inclui ferramenta que facilite a configuração bem como a manutenção, devendo optar por soluções de prateleiras, como FreePBX, Issabel ou soluções comerciais, que não é </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™, e sim são soluções embarcadas em </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-size: medium;"><span style="font-family: arial;">.</span></span></li></ul><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Dito isto, o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> deixou de ser “software PABX” e passou a ser uma ferramenta de criação de aplicações de Voz (o que logicamente inclui a criação de sistemas PABX). Hoje ele é considerado um Framework! </span><span style="font-family: arial; font-size: medium;">(Asterisk Scalable Communications Framework).</span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #4d5156; display: inline !important; float: none; font-family: arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><span> </span></span><span style="font-family: arial; font-size: medium;">Graças a isso, o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> hoje é mais conhecido entre os desenvolvedores que precisam criar sua própria solução customizada do que entre as empresas que precisam de um PBX como está. E é por esta razão que o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> pode ser considerado uma das melhores ferramentas para o desenvolvimento de soluções VoIP customizadas, já que inclui diversos meios e canais com os quais podemos desenvolver praticamente qualquer solução que necessitamos. </span><br /><br /><span style="font-family: arial; font-size: medium;">Já falamos sem parar sobre as "interfaces" que o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> possui:</span></div> <div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial; font-size: medium;"><b>CLI (Command Line Interface)</b>, que é a forma mais básica de acessar o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> a partir do terminal do console e nos permite executar comandos simplesmente digitando o que queremos.</span></li></ul></div><div style="text-align: justify;"><ul><li><span style="font-size: medium;"><span style="font-family: arial;"><b>AGI (Asterisk Gateway Interface)</b>, uma pseudo linguagem que nos permite externalizar ações executadas a partir do próprio </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-size: medium;"><span style="font-family: arial;">. Desta forma o Asterisk “executa” uma aplicação externa a si mesmo, permitindo-lhe acessar recursos que, de outra forma, não seriam possíveis já que o próprio </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™ </span></span><span style="font-size: medium;"><span style="font-family: arial;">não possui suporte. </span></span></li></ul></div><ul style="text-align: justify;"><li><span style="font-family: arial; font-size: medium;"><b>AMI (Asterisk Manager Interface)</b>, uma porta TCP à qual podemos nos conectar para enviar comandos e receber eventos sobre tudo o que acontece no </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;">, graças a um protocolo muito simples para quem sabe programar.</span></li></ul><ul style="text-align: justify;"><li><span style="font-family: arial; font-size: medium;"><b>ARI (Asterisk REST Interface)</b>, uma interface REST que permite que tanto o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> quanto uma aplicação interajam com canais, chamadas, usuários, pontes, etc. de forma assíncrona e utilizando uma conexão WebSocket para a comunicação de pedidos e dados via JSON.</span></li></ul><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">Estas são as interfaces que o </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-size: medium;"><span style="font-family: arial;"> possui para desenvolver qualquer solução que seja necessária. Cada um deles tem exemplos realmente muito simples, mas também verdadeiramente avançados, pois qualquer um deles permite uma grande quantidade de possibilidades e flexibilidade para nos ajudar a criar qualquer coisa. Apesar de todo o potencial que estas interfaces têm, existem limitações em cada uma delas. Há necessidades que a AGI não consegue satisfazer e devemos recorrer à AMI. Existem soluções que o AMI é difícil e é melhor recorrer ao ARI e há necessidades que podemos poupar muito tempo e esforço se simplesmente utilizarmos o CLI.</span></span><br /></div><div> <div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Um ótimo livro que recomendo para </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™, é </span></span><a href="https://www.amazon.com.br/Guia-Configuracao-Para-Asterisk-Pbx/dp/1499576854" target="_blank"><span style="font-family: arial; font-size: medium;">Guia de Configuracao Para O Asterisk Pbx: Como Construir Um Pabx Com Software Livre</span></a><span style="font-size: medium;"><span style="font-family: arial;">, do Flavio E. Goncalves.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><span class="a-size-extra-large celwidget" data-cel-widget="productTitle" data-csa-c-id="d8ojzm-htz5pw-o4lze9-ozboti" id="productTitle" style="box-sizing: border-box; line-height: 36px !important; text-rendering: optimizelegibility;"><span></span></span></span></span></div><div style="text-align: justify;"><h3 style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><b>Kamailio®</b></span></span></h3></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Porém, existem necessidades e projetos para os quais o </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> não é a ferramenta ideal. O </span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-family: arial; font-size: medium;"> sempre pode ajudar, mas chega um momento em que é preciso olhar mais longe e ver que outras soluções podem ser utilizadas. </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Para dar um exemplo rápido e fácil de entender, podemos dar uma olhada no projeto <a href="https://github.com/sipcapture/homer/tree/homer5" target="_blank">HOMER</a>.</span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><b>HOMER</b> é uma ferramenta bem conhecida de todos, e cuja função se baseia na recolha, classificação e gestão do tráfego SIP, permitindo-nos manter um controle perfeito de tudo o que acontece num ou mais servidores. Como você faz isso? Você precisa de uma ferramenta que possa capturar o tráfego SIP e enviá-lo para um sistema que possa classificá-lo e executar código para cada pacote que chegar. Que ferramenta faz isso? </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™</span></span><span style="font-size: medium;"><span style="font-family: arial;">? Poderia... mas neste caso, um </span></span><span style="font-size: medium;"><span style="font-family: arial;">Asterisk® SCF™ </span></span><span style="font-size: medium;"><span style="font-family: arial;">lidando com um grande volume de chamadas SIP poderia exigir grandes recursos, então a solução que escolheram para a versão <b>HOMER 5</b> foi: <a href="https://www.kamailio.org/w/" target="_blank">Kamailio</a></span></span><a href="https://www.kamailio.org/w/" target="_blank"><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></a><span style="font-size: medium;"><span style="font-family: arial;"><a href="https://www.kamailio.org/w/" target="_blank"></a>. <span><br /></span></span></span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><b>Kamailio®</b> é um servidor SIP PROXY/SIP REGISTER/etc. que é responsável por receber pacotes SIP e processá-los um por um. Sendo uma ferramenta voltada para isso, é muito, muito eficiente, pois não precisa lidar com áudio RTP, nem fazer gravações, nem ouvir tons DTMF, nem lidar com transferências, nem nada, simplesmente se concentra em processar cada </span></span><span style="font-size: medium;"><span style="font-family: arial;">pacote</span></span><span style="font-size: medium;"><span style="font-family: arial;"> SIP que chega. Por esse motivo, o </span></span><span style="font-size: medium;"><span style="font-family: arial;">Kamailio®</span></span><span style="font-size: medium;"><span style="font-family: arial;"> é uma ferramenta supereficiente de processamento de pacotes SIP e a ferramenta selecionada pelo <b>HOMER 5</b> para esta tarefa.</span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"> </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">A ideia é fantástica se em nosso desenvolvimento precisarmos processar pacotes SIP (analisar os campos De, Para, Contato, PAI, etc.) já que podemos usar o arquivo de configuração para programar o que queremos fazer com qualquer pacote SIP que chegar. <br /></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"> </span></span><br /><span style="font-size: medium;"><span style="font-family: arial;"></span></span></div></div><div style="text-align: left;"><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Então para ficar fera em Kamailio, recomendo o livro Daniel-Constantin Mierla e Elena-Ramona Modroiu, da <a href="https://www.asipto.com/sw/" target="_blank">ASIPTO</a>. <a href="https://www.asipto.com/index.php/kamailio-admin-book/" target="_blank">Kamailio Admin Book - SIP Routing with Kamailio</a>.</span><br /></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><h3 style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><b>WebRTC®</b></span></span></h3><span style="font-family: arial; font-size: medium;">No entanto, estamos nos concentrando no desenvolvimento de aplicações de voz baseadas em SIP, mas e se o nosso projeto estiver acima deste requisito? E se quisermos desenvolver um projeto mas não tivermos que fazê-lo com extensões SIP? Nesse caso, outra solução que deve ser estudada é uma biblioteca muito famosa chamada <b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-size: medium;"><span style="font-family: arial;"></span></span><span style="font-family: arial; font-size: medium;">. </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Embora tenhamos falado longamente sobre </span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-family: arial; font-size: medium;">, você precisa saber o que é para compreender totalmente seu escopo. </span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-family: arial; font-size: medium;"> é normalmente associado a vários termos: Modern Web Browser e/ou Web Softphone. </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-family: arial; font-size: medium;"> é muito mais que isso... embora pareça uma descrição da Wikipédia, </span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-family: arial; font-size: medium;"> é uma biblioteca de ferramentas que nos permitirá desenvolver todo tipo de aplicações que envolvam qualquer tipo de "mídia" em tempo real (que pode ser áudio , vídeo ou também texto, arquivos, captura de tela, etc.) usando um navegador da web.</span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">Porém, o </span></span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-size: medium;"><span style="font-family: arial;"> nos permite criar aplicações que envolvam voz, áudio ou qualquer outro tipo de dados em tempo real conectando-nos a um servidor através de <b>WebSockets</b>, o que nos permite interagir com qualquer aplicação remota que possa se conectar via <b>WebSocket</b>, o que elimina a necessidade de usa-lo "entre" navegadores da web e abre possibilidades com praticamente qualquer outro dispositivo, desde ferramentas IoT, robôs, automação residencial, segurança e muito mais. </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"> </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;">Portanto, e embora tenha consciência de que a curva de aprendizagem do </span></span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®</span></span></b><span style="font-size: medium;"><span style="font-family: arial;"> não é fácil, que requer muitos conhecimentos prévios e bastante conhecimentos, e digo até avançados em Javascript, vale a pena, pois as possibilidades são verdadeiramente ilimitadas e são precisamente estas que nos abrirão as portas (e estão abrindo agora mesmo) com os novos projetos que estão surgindo hoje e que vão facilitar a vida nos próximos anos. </span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><span><br /></span></span></span></div><div style="text-align: justify;"><span style="font-size: medium;"><span style="font-family: arial;"><span>Um site que recomendo se quer aprender sobre </span></span></span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">® </span></span></b><span style="font-size: medium;"><span style="font-family: arial;">é o da <a href="https://telecom.altanai.com/webrtc/" target="_blank">ALTANAI</a>. Altanai Bisht é Mestre em Ciencia da Computação e é Doutora em Telecomunicações. Ela escreveu um livro sobre </span></span><span style="font-family: arial; font-size: medium;"><b>WebRTC</b></span><b><span style="font-size: medium;"><span style="font-family: arial;">®, </span></span></b><span style="font-size: medium;"><span style="font-family: arial;">super recomendo.</span></span><b><span style="font-size: medium;"><span style="font-family: arial;"> </span></span></b><a href="https://www.packtpub.com/product/webrtc-integrators-guide/9781783981267" target="_blank"><span style="font-size: medium;"><span style="font-family: arial;">O livro é WebRTC Integrato's Guide pela <packt>.</span></span><b><span style="font-size: medium;"><span style="font-family: arial;"><br /></span></span></b></a></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;"> </span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Fonte: <a href="https://www.sinologic.net" target="_blank">Sinologic</a></span></div><div style="text-align: justify;"><span style="font-family: arial; font-size: medium;">Adaptação: Angelo Delphini.<br /></span></div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-73600971200227588362023-12-18T11:43:00.002-03:002023-12-18T11:50:42.763-03:00AEAP: O protocolo de aplicativos externos do Asterisk® SCF™<p> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiogQJwbcfq6PN6zKVyQifCuwMFYKGuMzFF0EU4KU38uw7Dv9sz34-ON0QCtwA0vkC4SdVAkPlA0BFYxwnxRFszRcnCLSotWwRu6fisFMOinHTit_LkWjIu-rBWUHxxVumUbNPDuU4YTsWBIEXxmwh-jqOhVIp_Feuiz0z4oBP9IMQtqLQ5JA9jDpSHsDg/s1024/AEAP.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiogQJwbcfq6PN6zKVyQifCuwMFYKGuMzFF0EU4KU38uw7Dv9sz34-ON0QCtwA0vkC4SdVAkPlA0BFYxwnxRFszRcnCLSotWwRu6fisFMOinHTit_LkWjIu-rBWUHxxVumUbNPDuU4YTsWBIEXxmwh-jqOhVIp_Feuiz0z4oBP9IMQtqLQ5JA9jDpSHsDg/s16000/AEAP.png" /></a></p><p></p><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">A equipe de desenvolvimento do </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Asterisk® SCF™</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> acaba de anunciar que você está listado no <b>AEAP</b> (</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>Asterisk External Application Protocol</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">), um protocolo que levou mais de um ano sendo desenvolvido e que por fim viu a luz a partir das versões do Asterisk® SCF™ 18.12.0</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">e Asterisk® SCF™ 19.4.0 e que nos permitirá conectar com aplicativos externos para enviar áudio e dados e obter resultados sobre eles.</span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Um exemplo básico que é usado como demonstração para entender como funciona o <b>AEAP</b> é um módulo para converter VOZ em TEXTO (fala para texto) e que utiliza a API do Google para fazer a conversão, mas podemos usar outros motores e criar nosso</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">próprio conector graças a este protocolo.</span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">O protocolo <b>AEAP</b> nos permite criar um “subsistema” para criar aplicações nativas Asterisk® SCF™ que receberão dados de entrada e gerarão dados de resposta.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Para fazer esses "subsistemas" você tem que saber como funciona a arquitetura Asterisk® SCF™ e utilizar os módulos </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>res_aeap.h</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> e </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>res_aeap_message.h</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> de onde geraremos um novo "motor" para o qual poderemos enviar os dados e que retornará o resultado que ele retorna para nós.</span></span></div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span></div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;">Como exemplo de uso, eles criaram um "subsistema para fazer reconhecimento de fala para texto" e o incorporaram ao Asterisk® SCF™ no módulo </span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: red; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><b>res_speech_aeap.c</b></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;">, que irá gerar um novo mecanismo de reconhecimento que podemos usar com o Asterisk® SCF™ </span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: red; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><b>SpeechCreate</b></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> com os comandos, padrão, </span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: red; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><b>SpeechStart</b></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> e </span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: red; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><b>SpeechDestroy</b></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> para enviar o áudio e fazer com que o mecanismo retorne o resultado:</span></div><p></p><div style="text-align: left;"><span style="background-color: white;">exten => 550,1,NoOp() </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,Answer() </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,SpeechCreate(my-speech-to-text) </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,SpeechStart() </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,SpeechBackground(hello-world) </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,Verbose(0,${SPEECH_TEXT(0)}) </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,SpeechDestroy() </span></div><div style="text-align: left;"><span style="background-color: white;"> same => n,Hangup()</span></div><div style="text-align: left;"><span style="background-color: white;"> </span></div><div style="text-align: justify;"><span style="background-color: white; font-size: medium;"><span style="font-family: arial;">Este "<b>my-speech-to-text</b>" é um motor "customizado" que criamos graças a um servidor <b><span style="color: red;">websocket</span></b> que recebe o áudio e o envia para a API de reconhecimento do Google para que retorne a variável <b>${SPEECH_TEXT}</b>. resultado de o reconhecimento, mas com alguma habilidade, pode ser adaptado para que, em vez do Google, utilizemos outros sistemas diferentes, e mesmo que o resultado, em vez de retornar o texto, retorne outras informações (identificação da pessoa que fala, humor, idade aproximada da pessoa, etc. para dar um exemplo). </span><br /><br /><span style="font-family: arial;">Esse "my-speech-to-text" está configurado no arquivo de configuração '<b><span style="color: red;">aeap.conf</span></b>' que teria algo assim:</span></span></div><div style="text-align: left;"><span style="background-color: white;">[my-speech-to-text] </span></div><div style="text-align: left;"><span style="background-color: white;">type=client </span></div><div style="text-align: left;"><span style="background-color: white;">codecs=!all,ulaw </span></div><div style="text-align: left;"><span style="background-color: white;">url=ws://127.0.0.1:9099 </span></div><div style="text-align: left;"><span style="background-color: white;">protocol=speech_to_text </span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">e na porta 9099 teríamos um servidor websocket que receberia o áudio e geraria as variáveis de resultado.</span></span><span class="jCAhz" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Nesta URL você pode encontrar o servidor websocket que eles usam como exemplo:</span></span><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">URL: <<a href="https://github.com/asterisk/aeap-speech-to-text" target="_blank">https://github.com/asterisk/aeap-speech-to-text</a>> </span></span></p><div style="text-align: justify;"><span face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">Este sistema não é algo voltado para o usuário final do Asterisk® SCF™, talvez exija conhecimentos um pouco mais avançados, mas os resultados são verdadeiramente interessantes e promissores.</span><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: left;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: left;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: arial; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Mas informações:</span></span></div><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">URL1: <<a href="https://www.asterisk.org/asterisk-external-application-protocol-an-intro/" target="_blank">https://www.asterisk.org/asterisk-external-application-protocol-an-intro/</a>>;</span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">URL2: <<a href="https://www.asterisk.org/asterisk-external-application-protocol-speech-to-text-engine/" target="_blank">https://www.asterisk.org/asterisk-external-application-protocol-speech-to-text-engine/</a>>;</span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">URL3: <<a href="https://github.com/asterisk/aeap-speech-to-text" target="_blank">https://github.com/asterisk/aeap-speech-to-text</a>>. </span></span></p><div style="text-align: left;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: medium; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent; font-family: arial;">Fonte: </span></span></div><p><span style="background-color: white;"><b><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Site <a href="https://www.sinologic.net" target="_blank">Sinologic<br /></a></span></span></b></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p><p><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-tap-highlight-color: transparent; -webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-42421375386914035442023-10-30T12:39:00.004-03:002023-10-30T12:39:25.099-03:00Mean Opinion Score - MOS (POLQA vs PESQ)<p style="text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUDdgCEnMaAD4QsETUajF9__AW8I2Q9b15FYGUVEtOiwFc1q19nvYLj6J58ElGO5ikx8d57X3unXGhg7w-ediqUVSwvrY_Goyy95c1UYWl-zDo8OFeaO29_uM1uhXH2qB6RIsy1z7hSYYy-5gOfx2RnWwtMRboja0fcIPkR8Iy7CQ9I5q_6zwywiuyFE/s1280/figure_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmUDdgCEnMaAD4QsETUajF9__AW8I2Q9b15FYGUVEtOiwFc1q19nvYLj6J58ElGO5ikx8d57X3unXGhg7w-ediqUVSwvrY_Goyy95c1UYWl-zDo8OFeaO29_uM1uhXH2qB6RIsy1z7hSYYy-5gOfx2RnWwtMRboja0fcIPkR8Iy7CQ9I5q_6zwywiuyFE/w400-h225/figure_2.jpg" width="400" /> </a></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">O MOS é um teste utilizado há anos para medir a qualidade das redes telefônicas.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Este teste foi realizado em determinadas condições ambientais onde as pessoas participantes da “experiência” foram solicitadas a expressar a sua opinião sobre a qualidade do áudio recebido ao longo da chamada.</span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Dito isso, q</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">uando trabalhamos com VoIP, temos consciência de que estamos trabalhando com uma tecnologia digital, composta por um fluxo de dados dedicado à sinalização, e outro fluxo de dados dedicado a mídias, ou seja: áudio, vídeo, arquivos, etc.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Tudo é digital, então o ruído eletromagnético que normalmente afeta as informações transmitidas por linhas analógicas não nos afeta neste caso, e também é IP, de forma que em cada dispositivo inteligente, roteadores, switches, etc., existem ferramentas de verificação de dados .que verificam que o que entra por uma porta sai por outra exatamente igual e no menor tempo possível.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Porém, há motivos pelos quais, durante uma conversa, temos interesse em conhecer a qualidade do áudio para descobrir erros, problemas e resolvê-los.</span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">80% das vezes, os erros de áudio geralmente são devidos a problemas de qualidade de serviço ou largura de banda insuficiente.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Geralmente isso é resolvido configurando QoS no roteador, separando as redes VoIP e de dados para que “as atualizações do Windows não consumam a largura de banda de uma chamada”.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">5% das vezes geralmente é devido a problemas com fones de ouvido de baixa qualidade (microfones muito próximos da boca, o que causa volume excessivo e ruídos de movimento da boca que são captados pelo microfone).</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Imagine que você está trabalhando, faz uma ligação e o som está entrecortado... por que isso acontece?</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Como pode ser resolvido?</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Certamente diremos que é por falta de largura de banda, ou algum gargalo, mas e se não for isso?</span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Precisamos medir a qualidade de uma chamada para garantir que as conversas tenham a qualidade mínima exigida.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Esta medição deve ser objetiva e verificável, por isso temos que nos aprofundar em um novo tema.</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Para medir a qualidade de uma chamada temos que conhecer alguns conceitos-chave no mundo das comunicações VoIP:</span></span></span></p><ul style="text-align: left;"><li style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">Latência:</span></b> É o atraso desde o microssegundo em que o som chega ao microfone do nosso telefone, até sair pelo alto-falante do aparelho do receptor.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Esta latência costuma ser inferior a 100ms e quando é superior (<200ms.) percebe-se que há uma certa espera entre um turno de fala e outro, mas ainda assim permite uma conversa mais ou menos fluida.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Quando esse tempo aumenta (ao usar redes de alta latência, como links de satélite), é muito mais difícil estabelecer uma conversa normal e você tem que falar em turnos declarados para evitar pisar uns nos outros com respostas a frases antigas.</span></span></span></li><li style="text-align: justify;"><span style="color: red;"><b><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">j</span></span></span></b></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><span style="color: red;"><b>itter:</b></span> Se a latência for sempre a mesma, você pode manter uma conversa simplesmente esperando um segundo entre o final da frase e o início da próxima.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Mas se a latência variar a cada segundo, manter uma conversa será extremamente difícil.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Ainda mais quando isso causa perda de pacotes porque há novos pacotes que chegam antes dos mais antigos.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">É como dizer: - “<b>Vou comprar pão</b>” e esse “<b>pão</b>” chega antes de “<b>comprar</b>”, para que o sistema receptor elimine “<b>comprar</b>” e você ouviria “<b>Vou… pão</b>”.</span></span></span></li><li style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">Pacotes perdidos:</span></b> Por vários motivos, um pacote pode desaparecer: muito tempo para ser transmitido (cada pacote tem um <b><span style="color: red;">TTL -time to live </span></b>- que se for excedido o pacote é eliminado porque é obsoleto e inútil), ruído no sinal digital que provoca alterações e incentiva o descarte da referida embalagem por ter sofrido alterações durante a viagem, etc.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Isto causa problemas de áudio semelhantes ao que foi mencionado anteriormente: micro-cortes de áudio de cerca de 20~30 milissegundos, tempo suficiente para que um corte de áudio seja perceptível se estivermos ouvindo música, mas quase imperceptível se estivermos em uma conversa com paradas, pausas entre palavra e palavra, ou se tivermos consciência de que o nosso interlocutor não tem uma boa ligação.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Existem codecs que permitem “<b>completar automaticamente</b>” o áudio que falta, dando aquela sensação de áudio “<b>metálico</b>” ou “<b>robótico</b>” que todos nós certamente já experimentamos.</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></li><li style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">Largura de banda:</span></b> Se a largura de banda for insuficiente, os pacotes demorarão para chegar ao destinatário, o que implica que há latência, ou que os pacotes são perdidos, então teremos uma conversa com atraso e micro-cortes.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Dependendo do codec utilizado, precisaremos de mais ou menos largura de banda, portanto para conexões limitadas é recomendado o uso de codecs especiais como GSM, G729, iLBC, Speex, etc.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">em vez do G711, G722, G726, etc.</span></span> </span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><br /></span></span></span></li></ul><h3 style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Valores de medição</span></span></span></h3><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Os conceitos básicos de qualidade de áudio já foram explicados, mas claro, não é interessante tratar valores específicos para analisar todo o áudio de uma conversa, pois podem ocorrer problemas em 1 segundo da conversa, porem ser perfeito no restante da mesma chamada. </span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">Assim, analisando os valores específicos ao longo da conversa, podemos obter medidas mais práticas e interessantes:</span></span></span></p><ul style="text-align: left;"><li style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">Classe de Serviço (CoS):</span></b> Mede a porcentagem de pacotes que chegam nas duas extremidades durante toda a conversa.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">O ideal é que cheguem 100% dos pacotes (CoS = 100%) mas se tivermos valores semelhantes não é drama (>95%).</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></li><li style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">Mean Opinion Score (MOS):</span></b> É uma das medidas mais utilizadas para saber a qualidade de uma conversa.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Ele mede os valores de pacotes perdidos, jitter e latência e gera um valor médio que varia entre 1 e 5. Um valor abaixo de 3,5 é considerado problemático enquanto um valor acima de 4,5 é considerado uma chamada normal e de boa qualidade.</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></li><li style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">Fator R:</span></b> É uma medida semelhante ao MOS, utilizada como recomendação da UIT e baseada nos mesmos fatores que pontuam a qualidade entre 0 e 100 como pode ser visto na tabela a seguir:</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></li></ul><p><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nYzChXgFLl1FuC-LNR98piL66TDc81KiAW2ScTE4m7j1RJhFmQ3LiCM1C6aS816dd48yv4OtYcecj2kEGTQWgCwNIA-nJsURFu3Kj-y_-s9X4al7DyvCL9-ztNreLiys4x6uMSyVLKiPtZcAkAozsWPK2WZlm8BLcT54_DWUuBB_flCQ4-F84wP_PXw/s491/medida-similar-al-MOS.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="315" data-original-width="491" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1nYzChXgFLl1FuC-LNR98piL66TDc81KiAW2ScTE4m7j1RJhFmQ3LiCM1C6aS816dd48yv4OtYcecj2kEGTQWgCwNIA-nJsURFu3Kj-y_-s9X4al7DyvCL9-ztNreLiys4x6uMSyVLKiPtZcAkAozsWPK2WZlm8BLcT54_DWUuBB_flCQ4-F84wP_PXw/w400-h256/medida-similar-al-MOS.gif" width="400" /></a></div><p></p><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">POLQA</span></b> (Perceptual Objective Listening Quality Analysis) e <b><span style="color: red;">PESQ </span></b>(Perceptual Evaluation of Speech Quality) são dois algoritmos de avaliação da qualidade de voz em telecomunicações, que permitem a geração de um escore MOS objetivo, uma métrica típica em chamadas telefônicas.</span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">PESQ</span></b> é um algoritmo que mede a qualidade do sinal de voz após compressão, roteamento e processamento do sinal.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Fornece uma pontuação de qualidade de voz em uma escala de 0 a 5, sendo que 5 representa a melhor qualidade possível.</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> <br /></span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Por outro lado, o <b><span style="color: red;">POLQA</span></b> é uma evolução do <b><span style="color: red;">PESQ</span></b> que utiliza um modelo auditivo mais avançado para avaliar a qualidade da voz.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">O <b><span style="color: red;">POLQA</span></b> é capaz de avaliar a qualidade de voz em uma ampla variedade de codecs e condições de rede e fornece uma pontuação de qualidade de voz em uma escala de 0 a 4,5.</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> <br /></span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Ambos os algoritmos simulam o processo perceptivo humano usando técnicas de processamento de sinal.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">O <b><span style="color: red;">POLQA</span></b> usa uma técnica de processamento de sinal chamada “Análise de Pulso Cepstral de Longo Prazo” (<b>LTPC</b>).</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Esta técnica utiliza um modelo matemático para simular o processo perceptivo humano, dividindo o sinal de fala em segmentos curtos e analisando cada segmento em busca de distorções e outros artefatos.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Por outro lado, o <b><span style="color: red;">PESQ</span></b> utiliza uma técnica de processamento de sinais chamada “Phase and Amplitude Difference Analysis” (Perceptual Evaluation of Speech Quality, em inglês), que também utiliza um modelo matemático para simular o processo perceptivo humano.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Esta técnica mede a diferença entre o sinal de voz original e o sinal de voz recebido e utiliza um algoritmo de processamento de sinal para estimar a percepção subjetiva da qualidade de voz pelos ouvintes de teste.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Notavelmente, o <b><span style="color: red;">PESQ-LQ</span></b> é uma variante do <b><span style="color: red;">PESQ</span></b> que leva em consideração as características específicas dos sistemas VoIP de baixa qualidade, como a presença de ruído de fundo, distorção e perda de pacotes, e fornece medições de qualidade de voz mais precisas nesses sistemas.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Em resumo, <b><span style="color: red;">POLQA</span></b> e <b><span style="color: red;">PESQ</span></b> são algoritmos de processamento de sinais que simulam o processo perceptual humano para avaliar a qualidade de voz em telecomunicações, e utilizam diferentes técnicas de processamento de sinais para fazê-lo.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb"><b><span style="color: red;">POLQA</span></b> é uma evolução do <b><span style="color: red;">PESQ</span></b> que utiliza uma técnica mais avançada para avaliar a qualidade de voz sob uma ampla variedade de codecs e condições de rede.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Atualmente apenas as soluções comerciais incluem <b><span style="color: red;">POLQA</span></b> (<b>PEXQ</b>, <b>VQuad</b> e <b>OPTICOM</b>), uma vez que o algoritmo <b><span style="color: red;">POLQA</span></b> é propriedade da <b>União Internacional de Telecomunicações</b> (<b>UIT</b>) e está protegido por direitos de autor.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">As ferramentas comerciais de medição de qualidade de voz que utilizam <b><span style="color: red;">POLQA</span></b> obtiveram licenças para usar o algoritmo e estão sujeitas a restrições de uso e distribuição.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">No entanto, existem algumas <b>ferramentas de medição de qualidade de voz de código aberto</b> que utilizam outros algoritmos para medir a qualidade de voz em sistemas de comunicação VoIP, como <b>PESQ</b> e <b>PESQ-LQ</b> (Perceptual Evaluation of Speech Quality).</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Ferramentas como <b>OpenMOS</b>, <b>VQmon/EP</b> ou implantação de um sistema <b>STOQ</b> (Speech Transmission Quality Overhead), podem ser uma alternativa viável para medição de qualidade de voz em sistemas VoIP se você não tiver acesso a uma ferramenta comercial que utilize <b>POLQA</b>.</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> <br /></span></span></span></div><div style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></div><div><h3 style="text-align: left;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Outras ferramentas de análise e medição</span></span></span></h3><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Existem ferramentas que analisam o tráfego e mostram, não só o “traço SIP” da conversa, mas também os valores de medição da sua qualidade, dados detalhados da chamada (pacotes perdidos, tempos de resposta, latência, jitter, etc… )</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">Havia um muito bom, embora comercial, chamado VQManager.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Infelizmente, tal como acontece com o software comercial, o software é descontinuado, abandonado e desaparece em vez de ser lançado.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">Felizmente, existem mais ferramentas que analisam esta informação e oferecem resultados muito interessantes:</span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> <br /></span></span></span></p><ul style="text-align: left;"><li>Homer SIP Capture: <a href="http://sipcapture.org/" target="_blank">http://sipcapture.org/</a> (Opensource)</li><li> VoIPMonitor: <a href="http://www.voipmonitor.org/" target="_blank">http://www.voipmonitor.org/</a> (Opensource)</li><li> Recqual: <a href="https://sourceforge.net/projects/recqual/" target="_blank">https://sourceforge.net/projects/recqual/</a> (Opensource)</li><li> AQua: <a href="http://sevana.biz/products/aqua/" target="_blank">http://sevana.biz/products/aqua/</a></li><li> Niqa: <a href="http://sevana.biz/products/niqa/" target="_blank">http://sevana.biz/products/niqa/</a></li><li> VoIPSpear: <a href="https://www.voipspear.com/" target="_blank">https://www.voipspear.com/</a></li><li> CommView: <a href="http://www.tamos.com/products/commview/ " target="_blank">http://www.tamos.com/products/commview/<span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> <br /></span></span></span></a></li></ul><p><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Em resumo:</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">PESQ e POLQA são modelos objetivos de avaliação MOS usados principalmente para avaliar a qualidade de voz em redes de telefonia e voz sobre IP, respectivamente, comparando fisicamente ondas de áudio com versões degradadas do mesmo áudio.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">É importante ressaltar que PESQ e POLQA também são considerados medidas subjetivas de qualidade de voz, pois dependem das avaliações subjetivas dos usuários, enquanto o Modelo E (Recomendação ITU-T G.107) é um modelo de avaliação objetivo. O MOS usado para prever a qualidade de voz em redes telefônicas é uma medida objetiva baseada em métricas de rede como latência, perda de pacotes e jitter, entre outras.</span></span></span></p><p style="text-align: left;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></p><p><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Fonte: </span></span></span><a href="https://www.sinologic.net/blog/2016-06/como-medir-la-calidad-de-una-llamada.html" target="_blank">https://www.sinologic.net/blog/2016-06/como-medir-la-calidad-de-una-llamada.html</a></p></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-68176576160080207782023-10-30T11:51:00.004-03:002023-10-30T11:51:44.075-03:00UPDATE/RE-INVITE e SDP em SIP<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRP7xETLE_T4RGZcWKsC_vB7ceOMRDlF6MNvTXG9A8iHYgOU28O6y7yAx8aX_P_GLHfcaZiOCI8LpMtGe9BGFrDxdH14ugTt1-byHzZaJPM-ttoub2_8GaaGwtmgqZDfY8pbhiRtk8ilIoMw8faGNeuTlsgeFZyo8HIsLzFySQU_oPurM9s0VxBQZmbjU/s503/sip-e1667986004376.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="230" data-original-width="503" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRP7xETLE_T4RGZcWKsC_vB7ceOMRDlF6MNvTXG9A8iHYgOU28O6y7yAx8aX_P_GLHfcaZiOCI8LpMtGe9BGFrDxdH14ugTt1-byHzZaJPM-ttoub2_8GaaGwtmgqZDfY8pbhiRtk8ilIoMw8faGNeuTlsgeFZyo8HIsLzFySQU_oPurM9s0VxBQZmbjU/s16000/sip-e1667986004376.png" /></a></div><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span><p></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Normalmente quando uma sessão SIP é estabelecida, alguns "timers" são estabelecidos para saber quem e em que horário irá atualizar a sessão, normalmente o <b><span style="color: red;">UAS</span></b> (User Agent Server) ou <b><span style="color: red;">UAC</span></b> (User Agent Client) é estabelecido como o atualizador da sessão e este é confirmado na resposta <b><span style="color: red;">200 OK </span></b>do estabelecimento da sessão.</span></span></span></p><p style="text-align: justify;"><strong>SESSION-EXPIRES: 600;refresher=uac</strong></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Neste caso a sessão expira após 600 segundos e o responsável por atualizar a sessão é o <b><span style="color: red;">UAC</span></b> (cliente, que inicia a chamada)</span></span><span class="jCAhz"><span class="ryNqvb">.
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">Esta atualização de sessão geralmente é feita com <b><span style="color: red;">UPDATE</span></b> ou <b><span style="color: red;">RE-INVITE</span></b>, a diferença entre usar esses 2 métodos é que o <b><span style="color: red;">UPDATE</span></b> deve ser respondido imediatamente.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">No caso do <b><span style="color: red;">UPDATE</span></b> podemos identificá-lo facilmente já que o método muda, mas no caso do <b><span style="color: red;">RE-INVITE</span></b>, no nível SIP vemos apenas um <b><span style="color: red;">INVITE</span></b> e podemos identificá-lo, já que o <b><span style="color: red;">RE-INVITE</span></b> tem o mesmo <b><span style="color: red;">FROM</span></b> e <b><span style="color: red;">CALL-ID</span></b>:</span></span></span></p><p style="text-align: justify;"><strong></strong></p><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><strong><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLXU1er3l46rmf1f1fd55RSeNc0MhoQbgHF9P2dYzdh6py9hnpHZP2T4FKrCxvqBq4H57K7_aQZaLcMT9-Z8h5cH3IUDF-P0U2uI47rwPZ-GgAbXshABj4RY0Tpqm0tkL11NYyF5n7XLjU-1iBBJkZ9p3gWd-RHJq4uODVLhZ5OqyLxsENF0_9oewotnE/s1024/image-1024x281.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="281" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLXU1er3l46rmf1f1fd55RSeNc0MhoQbgHF9P2dYzdh6py9hnpHZP2T4FKrCxvqBq4H57K7_aQZaLcMT9-Z8h5cH3IUDF-P0U2uI47rwPZ-GgAbXshABj4RY0Tpqm0tkL11NYyF5n7XLjU-1iBBJkZ9p3gWd-RHJq4uODVLhZ5OqyLxsENF0_9oewotnE/s16000/image-1024x281.png" /></a></strong></div><p></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Nesta atualização (ambos os casos), podemos ter alteração de média ou não, caso a média não seja alterada, o mesmo <b><span style="color: red;">ID </span></b>de sessão deve ser mantido no <b><span style="color: red;">SDP</span></b>, em caso de alteração de média, o<b><span style="color: red;"> ID</span></b> de sessão deve ser aumentado em 1:</span></span></span></p><p style="text-align: justify;"><strong>Owner/Creator, Session Id (o): – 4117888791 2277746976 IN IP4 3.3.3.3</strong><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">mudar para:</span></span></span></p><p style="text-align: justify;"><strong>Owner/Creator, Session Id (o): – 4117888791 2277746977 IN IP4 3.3.3.3</strong></p><p style="text-align: justify;"><strong></strong></p><div class="separator" style="clear: both; text-align: center;"><strong><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYEnsPVGYrg6vr4HiPkfAx5NCLSE8vN-F4CrmY6h2QfDgszaQhm6JFpxYBbyfjqqlS4k0kywl0LDJboQkZ7z54fE-c-IyeC1W4fz1NKlLqv_KD8-BVr2i_iNhC9Eg_ehkrKpwpyFGta1gGPIcEY2Asz7yWVyptMqVrew1DKFJIIRcUQhVmIB8H5GhN-DI/s1024/image-1-1024x49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="49" data-original-width="1024" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYEnsPVGYrg6vr4HiPkfAx5NCLSE8vN-F4CrmY6h2QfDgszaQhm6JFpxYBbyfjqqlS4k0kywl0LDJboQkZ7z54fE-c-IyeC1W4fz1NKlLqv_KD8-BVr2i_iNhC9Eg_ehkrKpwpyFGta1gGPIcEY2Asz7yWVyptMqVrew1DKFJIIRcUQhVmIB8H5GhN-DI/s16000/image-1-1024x49.png" /></a></strong></div><p></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Neste caso a média é alterada e, portanto, aumentada em 1.</span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Fontes:</span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">URL-01: <a href="https://datatracker.ietf.org/doc/rfc3725/" target="_blank">https://datatracker.ietf.org/doc/rfc3725/</a></span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">URL-02: <a href="https://datatracker.ietf.org/doc/html/rfc6141" target="_blank">https://datatracker.ietf.org/doc/html/rfc6141 </a></span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p><p style="text-align: justify;"><strong> </strong></p><p style="text-align: justify;"><strong> </strong></p><p style="text-align: justify;"><strong> </strong></p><p style="text-align: justify;"><strong> </strong></p><p style="text-align: justify;"><strong> </strong><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> <br /></span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p><p style="text-align: justify;"><strong><br /></strong><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-75694730690502225252023-09-15T14:02:00.004-03:002023-09-15T14:37:57.311-03:00Configurando o CODEC Opus para Asterisk® SCF™<p style="text-align: left;"> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-0L8fwtQGRXE/XyrtUXgr06I/AAAAAAAAEXA/xbqpcAn12201GBmkQnz3nyGxh6NEshuAgCNcBGAsYHQ/s280/opus-logo.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="280" src="https://1.bp.blogspot.com/-0L8fwtQGRXE/XyrtUXgr06I/AAAAAAAAEXA/xbqpcAn12201GBmkQnz3nyGxh6NEshuAgCNcBGAsYHQ/s16000/opus-logo.png" /></a></div><p style="text-align: left;"></p><div style="text-align: justify;"><span style="font-family: inherit;">Devido o crescente movimento de uso do WebRTC, a utilização do CODEC Opus para Asterisk® SCF™ se faz necessário e, expõe algumas opções de configuração que permitem manipular o codificador para sua configuração específica. Essas opções podem ser definidas em <span style="color: red;"><b>codecs.conf</b></span>. Eles são úteis para personalizar um tipo de formato que pode então ser especificado na linha “<span style="color: red;"><b>allow</b></span>” de um terminal. O codificador usa todas as opções a seguir, direta ou indiretamente. Algumas das opções especificam parâmetros de formato no <b><span style="color: red;">SDP</span></b>, mas também influenciam a codificação. Outras opções oferecem dicas ao codificador sobre que tipo de dados processar ou em que tipo de modo operar. A maioria, se não todas as opções, oferece um compromisso entre qualidade e eficiência, por isso é bom saber o que cada uma faz antes de mudar. um valor. As seguintes opções podem ser configuradas no Asterisk® SCF™</span><span style="font-family: inherit;">:</span></div><div style="text-align: justify;"><span style="font-family: inherit;"> </span></div><div style="text-align: justify;"><h2><span style="font-family: inherit;">CBR </span></h2><span style="font-family: inherit;">Quando definido como “<span style="color: red;"><b>yes</b></span>”, o codificador usa uma <b>taxa de bits constante</b> em oposição a uma <b>taxa de bits variável</b>. Uma taxa de bits variável geralmente é melhor, pois ajusta a taxa automaticamente, permitindo áudio de qualidade potencialmente mais alta em taxas mais baixas. Por causa disso, você normalmente desejará deixar esse valor definido como “<span style="color: red;"><b>no</b></span>”, que é o padrão. No entanto, alguns dispositivos e configurações podem <b>exigir taxas de bits constantes</b>. </span></div><div style="text-align: justify;"><span style="font-family: inherit;"> </span></div><div style="text-align: justify;"><span style="font-family: inherit;">Definir este valor como “<span style="color: red;"><b>yes</b></span>” também define o parâmetro “<b><span style="color: red;">cbr</span></b>” igual a “<b><span style="color: red;">1</span></b>” no <b>SDP</b>.</span></div><div style="text-align: justify;"></div><div style="text-align: justify;"><h2>BITRATE </h2></div><div style="text-align: justify;"></div><div style="text-align: justify;"><span style="font-family: inherit;">A especificação deste valor define um limite aproximado de taxa de bits no codificador. Os seguintes valores são permitidos: </span></div><div style="text-align: justify;"><ul><li><span style="font-family: inherit;"><b><span style="color: red;">auto</span></b> – permite que o codificador controle a taxa de bits. <b>Este é o padrão</b>. </span></li><li><span style="font-family: inherit;"><b><span style="color: red;">max</span></b> – O codificador usa a quantidade máxima que pode. <b>500</b> - <b>512000</b> – Qualquer valor entre e incluindo esses dois números. Quando designado, este valor também define o parâmetro “<b><span style="color: red;">maxaveragebitrate</span></b>” no <b>SDP</b>. </span></li></ul><span style="font-family: inherit;">Embora não seja o único fator, a <b><span style="color: red;">taxa de bits afeta diretamente a qualidade do áudio</span></b>. Diminuir a taxa de bits diminui a <b>qualidade do áudio</b>, enquanto aumentá-la <b>aumenta a qualidade</b>. Dito isto, o áudio contendo apenas fala geralmente pode ser codificado em uma <b>taxa de bits muito mais baixa</b> do que o áudio contendo música, sem uma degradação perceptível na qualidade. </span></div><div style="text-align: justify;"><span style="font-family: inherit;"> </span></div><div style="text-align: justify;"><span style="font-family: inherit;">Dependendo do(s) tipo(s) de endpoint(s) que você está usando, esta opção pode precisar ser definida para que o codificador codifique o áudio em uma taxa de bits que possa ser manipulada pelo endpoint. Por exemplo, se um endpoint só puder lidar com uma taxa de bits média máxima de <b><span style="color: red;">16.000</span></b>, então isso precisará ser definido como <b><span style="color: red;">16.000</span></b> ou menos, para atuar com sistema de WebPhones, a taxa de bits média máxima de 8.000 é perfeita.</span></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"><h2>DTX</h2></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Se “</span></span><span style="background-color: white; font-family: inherit;"><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">yes</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">”, então a transmissão descontínua está habilitada.</span></span><span style="-webkit-text-stroke-width: 0px; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Isto significa que o codificador tentará reduzir a taxa de bits quando o silêncio for detectado.</span></span><span style="-webkit-text-stroke-width: 0px; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Quando definido, também define o parâmetro “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>usedtx</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” igual a “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>1</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” no <b>SDP</b>.</span></span><span style="-webkit-text-stroke-width: 0px; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">O valor padrão para “dtx” é “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>no</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">”.</span></span></span></div><div style="text-align: justify;"><span style="background-color: white;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-text-stroke-width: 0px; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span></span></div><h2 style="text-align: left;">MAX_PLAYBACK_RATE</h2><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Isso define o parâmetro “</span></span><span style="font-family: inherit;"><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">maxplaybackrate</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” do <b>SDP</b> e também <b>limita a largura de banda no codificador</b>.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Qualquer valor igual ou entre </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>8.000</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> e </span></span><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">48.000</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> é permitido.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">O seguinte mostra um mapeamento de larguras de banda com base em um valor especificado:</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span><table style="-webkit-text-stroke-width: 0px; background-color: white; border-collapse: collapse; border-spacing: 0px; border: medium; box-sizing: border-box; color: #333333; font-family: Karla, sans-serif; font-size: 0.9em; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-block-end: 15px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-transform: none; white-space: normal; width: 759.984px; word-spacing: 0px;"><tbody style="box-sizing: border-box;"><tr style="background-color: #eff0f2; box-sizing: border-box;"><td style="background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">8000</td><td style="background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">Banda Estreita</td></tr><tr style="box-sizing: border-box;"><td style="border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">8001 – 16000</td><td style="border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">Banda Média</td></tr><tr style="background-color: #eff0f2; box-sizing: border-box;"><td style="background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">16001 – 24000</td><td style="background-color: rgba(128, 128, 128, 0.07); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">Banda Larga</td></tr><tr style="box-sizing: border-box;"><td style="border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">24001 – 32000</td><td style="border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">Banda Super Larga</td></tr><tr style="background-color: #eff0f2; box-sizing: border-box;"><td style="background-color: rgba(128, 128, 128, 0.1); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">32001 – 48000</td><td style="background-color: rgba(128, 128, 128, 0.1); border: medium; box-sizing: border-box; line-height: 1.5; padding: 15px; vertical-align: top;">Banda Completa</td></tr></tbody></table></div><div style="text-align: justify;"><span style="font-family: inherit;">Está opção tem um valor padrão de 48.000, o que é óbvio não é o recomendado para nossas soluções no Brasil. <b>O recomendado é de 8.000</b>. <br /></span></div><div style="text-align: justify;"></div><div style="text-align: justify;"><h2>PACKET_LOSS</h2></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Isso estipula a porcentagem esperada de perda de pacotes (<b>0 a 100</b>) no codificador.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">O <b>Opus</b> tem alguns truques na manga quando se trata de perda de pacotes, como correção de erros de encaminhamento em banda (<b>FEC</b>).</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Falaremos um pouco mais sobre <b>FEC</b> posteriormente, mas para que o codificador inclua os dados FEC, esta opção precisa ser definida com um valor apropriado.</span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">
</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>Aumentar a porcentagem</b> significa melhor <b>proteção contra perdas</b>.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">No entanto, deve-se ressaltar que </span></span><span style="font-family: inherit;"><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">o ajuste deste valor pode afetar a qualidade</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Para manter a taxa média de bits e ao mesmo tempo incluir informações de perda de pacotes, o <b>Opus</b> pode diminuir a taxa do áudio atual que está sendo codificado.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">A configuração padrão para isso é </span></span><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">ZERO</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Se você estiver tendo problemas de áudio devido à perda de pacotes, tente ajustar esse valor para ver se isso ajuda.</span></span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" face="Roboto, RobotoDraft, Helvetica, Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span></div><div style="text-align: justify;"><h2><span style="background-color: white;">APPLICATION</span></h2></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Isso dá uma dica sobre que tipo de dados serão codificados, para que os dados possam ser codificados da maneira mais eficiente possível no que diz respeito ao uso.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Os seguintes valores são permitidos:</span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">
</span></span><ul><li><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>voip</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> – O codificador espera voz ou dados de fala.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Esta é a configuração padrão.</span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></li><li><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">audio</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> – O codificador não faz nenhuma suposição especial sobre os dados.</span></span></li><li><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">low_delay</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> – Os dados são codificados com o menor atraso de codificação possível.</span></span></li></ul></div><div style="text-align: justify;"><h2><span style="background-color: white;">SIGNAL<br /></span></h2></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Semelhante à configuração de “aplicativo”, isso também oferece uma dica ao codificador sobre que tipo de dados está sendo codificado e seleciona o tipo de modo que o codificador prefere.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Os seguintes valores são permitidos:</span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">
</span></span><ul><li><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span><span style="font-family: inherit;"><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">auto</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> – permite que o codificador escolha.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Esta é a configuração padrão.</span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></span></li><li><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b><span style="background-color: white;">voice</span></b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> – O codificador prefere operar em modos mais propícios aos dados de fala.</span></span></li><li><span style="font-family: inherit;"><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">music</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">– O codificador tende a operar em um modo mais aceitável para outro áudio.</span></span></span></li></ul></div><div style="text-align: justify;"><h2>COMPLEXITY</h2></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">A </span></span><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">complexidade computacional do Opus</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> pode variar dependendo de vários fatores.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Normalmente, <b>quanto maior a qualidade de áudio</b> para a qual o codec está configurado, maior a complexidade e, portanto, </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>potencialmente maior a utilização da CPU</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Isto pode ser um pouco mitigado por outras configurações, por exemplo, a codificação de voz é menos complexa que a música.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">A modificação da configuração de complexidade afeta diretamente a utilização da CPU.</span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">
</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Os valores permitidos variam de </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>0</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> (zero) a </span></span><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">10</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">. Um valor zero representa quantidades menores de tempo de CPU usado, enquanto um valor de dez é o maior tempo concedido.</span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"></span></span></div><div style="text-align: justify;"><h2>FEC</h2><h2></h2></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Quando definido como “</span></span><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">yes</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">”, isso informa ao codificador para adicionar dados de correção de erro direto (<b>Forward Error Correction - FEC</b>) em banda aos quadros <b>Opus</b> codificados.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Os quadros contendo informações <b>FEC</b> permitem que os decodificadores reconstruam um quadro anteriormente perdido.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Definir este valor não significa que o codificador adiciona <b>FEC</b> automaticamente aos quadros de saída.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Outras condições também devem ser atendidas no codificador antes que ele adicione as informações.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Por exemplo, deve estar operando no modo correto.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Além disso, ajustar a porcentagem de “</span></span><b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">packet_loss</span></span></b><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” para um valor esperado apropriado deve acionar a adição de <b>FEC</b> assim que o limite de perda interna for atingido.</span></span><span class="jCAhz" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">
</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Definir este valor como “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>yes</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” também define o parâmetro “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>useinbandfec</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” igual a “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>1</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">” no </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>SDP</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Esta opção tem como padrão o valor “</span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: red; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"><b>no</b></span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">”.</span></span><span style="background-color: white; font-family: inherit;"> </span></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;"></span></div><div style="text-align: justify;"><h2><span style="background-color: white; font-family: inherit;">O que mais ?</span></h2></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;"></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Atualmente, todas essas opções de configuração são suportadas.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Há também uma página wiki que lista todas as opções mais recentes junto com alguns exemplos.</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Não deixe de conferir!</span></span><span style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; display: inline; float: none; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"> </span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">Se ou quando novas configurações forem disponibilizadas, essa página </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">será </span></span><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;">atualizada.</span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span class="jCAhz ChMk0b" style="-webkit-text-stroke-width: 0px; background-color: white; color: #3c4043; cursor: pointer; font-family: inherit; font-size: 18px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; word-spacing: 0px;"><span class="ryNqvb" style="-webkit-tap-highlight-color: transparent;"> </span></span></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;">Devido, alterações sobre o sistema operacional CentOS, e uma vez que ainda não estamos bem a vontade com o Rock Linux, aqui vai o procedimento para o Debian 10 e 11.</span></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;"> </span></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;">E pensando que esteja utilizando o Asterisk 13.35.0: <br /></span></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;"></span></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;"> </span><br /><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">apt-get install -y libopus-dev opus-tools</span></pre></div><div style="text-align: justify;"><span style="background-color: white; font-family: inherit;"> </span><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">cd /opt/</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">wget http://downloads.digium.com/pub/telephony/codec_opus/asterisk-13.0/x86-64/codec_opus-13.0_current-x86_64.tar.gz </span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">tar -zxvf codec_opus-13.0_current-x86_64.tar.gz
rm -rf codec_opus-13.0_current-x86_64.tar.gz
cp -av codec_opus-13.0_1.3.0-x86_64/*.so /usr/lib/asterisk/modules/
cp -av codec_opus-13.0_1.3.0-x86_64/*.xml /var/lib/asterisk/documentation/thirdparty/ </span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;"> vim /etc/asterisk/modules.conf</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">load = codec_opus<br />load = res_format_attr_opus.so<br />load = res_crypto<br />load = res_http_websocket<br />load = res_pjsip_transport_websocket<br />load = res_srtp<br />load = format_ogg_opus.so</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">vim /etc/asterisk/rtp.conf</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">[general]<br />rtpstart=10000 ;; ajuste para sua realidade <br />rtpend=10099 ;; ajuste para sua realidade<br />rtpchecksums=no<br />dtmftimeout=3000<br />rtcpinterval=5000<br />strictrtp=yes<br />probation=4<br />srtpreplayprotection=yes<br />icesupport=yes ;; importante<br />strictrtp=no ;; importante<br />stunaddr=stun.l.google.com:19302 ;; importante<br />stun_software_attribute=yes<br />dtls_mtu=1200</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">vim codecs.conf</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">[speex]<br />quality => 3<br />complexity => 2<br />enhancement => true<br />vad => true<br />vbr => true<br />abr => 0<br />vbr_quality => 4<br />dtx => false<br />preprocess => false<br />pp_vad => false<br />pp_agc => false<br />pp_agc_level => 8000<br />pp_denoise => false<br />pp_dereverb => false<br />pp_dereverb_decay => 0.4<br />pp_dereverb_level => 0.3<br /><br />[plc]<br />genericplc => true<br />genericplc_on_equal_codecs => false<br /><br />[silk8]<br />type=silk<br />samprate=8000<br />fec=true<br />packetloss_percentage=10<br />maxbitrate=10000<br /><br />[silk12]<br />type=silk<br />samprate=12000<br />maxbitrate=12000<br />fec=true<br />packetloss_percentage=10;<br /><br />[silk16]<br />type=silk<br />samprate=16000<br />maxbitrate=20000<br />fec=true<br />packetloss_percentage=10;<br /><br />[silk24]<br />type=silk<br />samprate=24000<br />maxbitrate=30000<br />fec=true<br />packetloss_percentage=10;</span><br /><br /><span style="font-family: courier;">[opus]<br />type=opus<br />packet_loss=5<br />complexity=10<br />max_bandwidth=narrow<br />signal=auto<br />application=voip<br />max_playback_rate=8000<br />bitrate=auto<br />cbr=1<br />fec=1<br />dtx=0</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">vim /etc/asterisk/sip.conf</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">[general]<br />callcounter=yes ; Habilita estado dos endpoints SIP.<br />rtcachefriends=yes<br />udpbindaddr=0.0.0.0:5060<br />disallow=all<br />allow=opus<br />allow=ulaw<br />allow=alaw<br />allow=gsm</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;">rasterisk -vvvvgci</span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier;"><span style="font-size: x-small;">*CLI> module show like opus<br />Module Description Use Count Status Support Level<br />codec_opus.so OPUS Coder/Decoder 0 Running extended<br />format_ogg_opus.so OGG/Opus audio 0 Running core<br />res_format_attr_opus.so Opus Format Attribute Module 1 Running core<br />3 modules loaded<br />*CLI></span></span></pre><pre class="code" style="-webkit-text-stroke-width: 0px; background-color: whitesmoke; border-radius: 4px; border: 1px solid rgb(204, 204, 204); box-sizing: border-box; color: #333333; display: block; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 13px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1.42857; margin: 0px 0px 10px; orphans: 2; overflow-wrap: break-word; overflow: auto; padding: 9.5px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-break: break-all; word-spacing: 0px;"><span style="font-family: courier; font-size: x-small;">*CLI> core show translation paths opus <br />--- Translation paths SRC Codec "opus" sample rate 48000 ---<br />opus:48000 To codec2:8000 : No Translation Path<br />opus:48000 To g723:8000 : No Translation Path<br />opus:48000 To ulaw:8000 : (opus@48000)->(slin@48000)->(slin@8000)->(ulaw@8000)<br />opus:48000 To alaw:8000 : No Translation Path<br />opus:48000 To gsm:8000 : (opus@48000)->(slin@48000)->(slin@8000)->(gsm@8000)<br />opus:48000 To g726:8000 : No Translation Path<br />opus:48000 To g726aal2:8000 : No Translation Path<br />opus:48000 To adpcm:8000 : No Translation Path<br />opus:48000 To slin:8000 : (opus@48000)->(slin@48000)->(slin@8000)<br />opus:48000 To slin:12000 : (opus@48000)->(slin@48000)->(slin@12000)<br />opus:48000 To slin:16000 : (opus@48000)->(slin@48000)->(slin@16000)<br />opus:48000 To slin:24000 : (opus@48000)->(slin@48000)->(slin@24000)<br />opus:48000 To slin:32000 : (opus@48000)->(slin@48000)->(slin@32000)<br />opus:48000 To slin:44100 : (opus@48000)->(slin@48000)->(slin@44100)<br />opus:48000 To slin:48000 : (opus@48000)->(slin@48000)<br />opus:48000 To slin:96000 : (opus@48000)->(slin@48000)->(slin@96000)<br />opus:48000 To slin:192000 : (opus@48000)->(slin@48000)->(slin@192000)<br />opus:48000 To lpc10:8000 : No Translation Path<br />opus:48000 To g729:8000 : No Translation Path<br />opus:48000 To speex:8000 : No Translation Path<br />opus:48000 To speex:16000 : No Translation Path<br />opus:48000 To speex:32000 : No Translation Path<br />opus:48000 To ilbc:8000 : No Translation Path<br />opus:48000 To g722:16000 : (opus@48000)->(slin@48000)->(slin@16000)->(g722@16000)<br />opus:48000 To siren7:16000 : No Translation Path<br />opus:48000 To siren14:32000 : No Translation Path<br />opus:48000 To testlaw:8000 : (opus@48000)->(slin@48000)->(slin@8000)->(testlaw@8000)<br />opus:48000 To g719:48000 : No Translation Path<br />opus:48000 To none:8000 : No Translation Path<br />opus:48000 To silk:8000 : No Translation Path<br />opus:48000 To silk:12000 : No Translation Path<br />opus:48000 To silk:16000 : No Translation Path<br />opus:48000 To silk:24000 : No Translation Path <br />*CLI> </span> </pre></div><div style="text-align: justify;"> </div><div style="text-align: justify;">Um ponto muito importante é que você deve utilizar o CODEC Opus de acordo com sua versão, e existe incompatibilidade de versão entre servidores Asterisk, fique atento. </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Qualquer dúvida, estou a disposição no e-mail <b>professor.delphini#outlook.com</b>. Não acredite que vou responder de pronto, mas vou responder, e caso tenha pressa, pode me encontrar na comunidade oficial da Fundação Asterisk Libre no Telegram, segue o convite: <a href="https://t.me/asterisk_br" target="_blank"><b><span style="color: red;">https://t.me/asterisk_br</span></b></a> </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Uma vez na comunidade, pode questionar, pois tem na mesma uma gama muito grande de profissionais sempre com o <b>espírito de liberdade</b>!<br /></div><div style="text-align: justify;"> </div><div style="text-align: justify;"></div><div style="text-align: justify;">Recomendo que veja:</div><div style="text-align: justify;">URL: <a href="https://jmvalin.ca/opus/opus-1.2/" target="_blank">https://jmvalin.ca/opus/opus-1.2/</a></div><div style="text-align: justify;">URL: <a href="http://downloads.digium.com/pub/telephony/codec_opus/" target="_blank">http://downloads.digium.com/pub/telephony/codec_opus/</a><br /></div><div style="text-align: justify;"> </div><div style="text-align: justify;">Fonte: <a href="https://docs.asterisk.org/Configuration/Codec-Opus/" target="_blank"> https://docs.asterisk.org/Configuration/Codec-Opus/</a><br /></div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div><div style="text-align: justify;"> </div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-44155058804152622712023-08-10T16:09:00.002-03:002023-08-10T16:09:37.534-03:00Asterisk® SCF™, qualidade de chamadas e MES (Media Experience Score)<p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlmkGbZiM_N2T49v1RU3oZLDAy2K7EytXW-ksqDDrbqmynoaKq6PJCtihf9CK9pahnWOss_fYzFo2dI7uLVRsWMkr8WczuyKYNfEfE6CNyRW_CkOmjuQifEYixK-s8DvPMV05sT5pmQb2GpbH3Urrr3W1ApHRgccD1nZCuyNpEtijWfjbjwmC6arp7JQ/s1200/como-usar-a-placa-grafica-nvidia-para-melhorar-a-qualidade-das-chamadas-www.maistecnologia.com.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="630" data-original-width="1200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlmkGbZiM_N2T49v1RU3oZLDAy2K7EytXW-ksqDDrbqmynoaKq6PJCtihf9CK9pahnWOss_fYzFo2dI7uLVRsWMkr8WczuyKYNfEfE6CNyRW_CkOmjuQifEYixK-s8DvPMV05sT5pmQb2GpbH3Urrr3W1ApHRgccD1nZCuyNpEtijWfjbjwmC6arp7JQ/s16000/como-usar-a-placa-grafica-nvidia-para-melhorar-a-qualidade-das-chamadas-www.maistecnologia.com.jpg" /></a></div><br /><p></p><p style="text-align: justify;"> Medir a qualidade da chamada sempre foi bastante complicado e talvez o método mais conhecido/utilizado seja o <b><span style="color: red;">MOS</span></b> (Mean Opinion Score). Embora algoritmos sejam usados para calcular o <span style="color: red;"><b>MOS</b></span>, esse sistema nasceu com base na percepção do áudio que os usuários de um determinado sistema de VoIP, ou algum circuito de áudio têm e seu julgamento expresso sobre a experiência usando esse mesmo sistema. </p><p style="text-align: left;"></p><p style="text-align: left;">Para fugir desse conceito e considerando que o novo índice é baseado em cálculos <b><span style="color: red;">puramente matemáticos</span></b>, nasceu recentemente o <span style="color: red;"><b>MES </b></span>(Media Experience Score), sistema que permite medir a qualidade de áudio do canal <b><span style="color: red;">PJSIP</span></b> (chan_pjsip.so). O cálculo é baseado em <b>três valores</b> que podem ser extrapolados a partir da vazão média: </p><ul style="text-align: left;"><li style="text-align: left;"><b>RTT</b> (tempo de ida e volta de um pacote de áudio); </li><li style="text-align: left;"><b>Jitter</b>, que é um indicador de como o fluxo médio se comporta;</li><li style="text-align: left;">A <b>perda de pacotes</b> que afeta a qualidade do fluxo médio.</li></ul><p style="text-align: justify;">Usando esses <b>três valores</b>, é obtido um <b>Fator de Qualificação que vai de 0 a 100</b>, onde <b><span style="color: red;">0</span></b> equivale a qualidade de áudio ruim e <b><span style="color: red;">100</span></b> a qualidade de áudio ideal.</p><p style="text-align: justify;">O valor inicial desse <b><span style="color: red;">Fator R</span></b> foi definido em <b><span style="color: red;">93,2</span></b> e uma fórmula é aplicada a esse valor para obter um valor final. Contribui para a formação desse valor final: </p><ul style="text-align: left;"><li><b>RTT médio</b>;</li><li><b>Jitter médio</b>;</li><li><b>Atraso do codec de áudio</b> (pacotes perdidos).</li></ul><p style="text-align: justify;">O valor obtido, como já foi dito, pode estar entre 0 e 100 e a partir deste valor pode-se obter um índice entre <b><span style="color: red;">1</span></b> e <b><span style="color: red;">4,5</span></b>, se necessário, tipo <b><span style="color: red;">MOS</span></b>, utilizando a seguinte fórmula: </p><p style="text-align: justify;">No Asterisk® SCF™ podemos obter toda uma série de valores relacionados ao <b><span style="color: red;">MES</span></b> através da função <span style="color: red;"><b>CHANNEL ${CHANNEL(rtcp,<stat>)}</b></span>, onde ao invés de <b>stat</b> você pode colocar: </p><ul style="text-align: left;"><li>all_month;</li><li>txmes;</li><li>rxmeses;</li><li>remote_maxmonth;</li><li>remote_minmes;</li><li>remote_normdevmes;</li><li>remote_stdevmes;</li><li>local_maxmonth;</li><li>local_minmeses;</li><li>local_normdevmes;</li><li>local_stdevmes. </li></ul><p style="text-align: justify;">Com <b>LOCAL</b> entendemos o fluxo de mídia que chega ao Asterisk® SCF™ e com <b>REMOTO</b> o fluxo de mídia que sai do Asterisk® SCF™. Eu testei em duas chamadas: </p><ul style="text-align: left;"><li style="text-align: justify;">uma entre ramais;</li><li style="text-align: justify;">e uma saída usando um tronco SIP. </li></ul><p>Em ambos os casos, a qualidade era muito boa. Se quiséssemos expressar o valor com o índice de <b>1</b> a <b>4,5</b>, tomando, por exemplo, o valor do <b><span style="color: red;">MESlocalMAX</span></b> da primeira chamada, que seria (arredondamento): </p><p>Opinião = 1 + (0,035 x 85,4) + (85,4 x (85,4 – 60) x (100 – 85,4) * 0,0000007) = 4,01</p><p>Por Andrea Sannucci</p><p>Fonte: <a href="https://sip5060.net/" target="_blank">Planet SIP</a> <br /></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-64235239367528906342023-07-24T15:44:00.004-03:002023-07-24T15:54:07.885-03:00Yeti Switch - SOFTSWITCH PARA HUMANOS!! Parte 01.<h3 style="text-align: left;"><b style="font-family: arial;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8VFgxBK1wl5NYTMAA_OBrdDPadEFb18cO6EPlr3IwO7gzj5QLXWUbTyxUDniVS1cfJD5rI6wqQOyJnR1BF2CzKAIU-LXazJ348-mqhTRY3jkXnQG96jUDj-CET73mj5cfjZKuvIK3mqTDBNemRGSnI4K1StjJJikILwLH9Y_bP2IirgC90vbTGMDr2c/s950/yeti-softswitch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="470" data-original-width="950" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgd8VFgxBK1wl5NYTMAA_OBrdDPadEFb18cO6EPlr3IwO7gzj5QLXWUbTyxUDniVS1cfJD5rI6wqQOyJnR1BF2CzKAIU-LXazJ348-mqhTRY3jkXnQG96jUDj-CET73mj5cfjZKuvIK3mqTDBNemRGSnI4K1StjJJikILwLH9Y_bP2IirgC90vbTGMDr2c/s16000/yeti-softswitch.png" /></a></div></b></h3><h2 style="text-align: left;"><b style="color: #2b00fe; font-family: arial;">Versão 1.12</b></h2><p style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">O sistema operacional suportado é Debian GNU/Linux 11, a única arquitetura suportada é amd64.</span></span></span></p><h2 style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b" style="color: #2b00fe;"><span class="ryNqvb"><b>Configuração de repositórios</b></span></span><span class="jCAhz" style="color: #2b00fe;"><span class="ryNqvb"> </span></span></span></h2><p style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">A maioria dos servidores pode usar o mesmo conjunto de repositórios:</span></span></span></p><pre><span class="n">deb</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">ftp</span><span class="o">.</span><span class="n">debian</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">debian</span><span class="o">/</span> <span class="n">bullseye</span> <span class="n">main</span> <span class="n">contrib</span> <span class="n">non</span><span class="o">-</span><span class="n">free</span>
<span class="n">deb</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">ftp</span><span class="o">.</span><span class="n">debian</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">debian</span><span class="o">/</span> <span class="n">bullseye</span><span class="o">-</span><span class="n">updates</span> <span class="n">main</span>
<span class="n">deb</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">security</span><span class="o">.</span><span class="n">debian</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">debian</span><span class="o">-</span><span class="n">security</span> <span class="n">bullseye</span><span class="o">-</span><span class="n">security</span> <span class="n">main</span>
<span class="n">deb</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">pkg</span><span class="o">.</span><span class="n">yeti</span><span class="o">-</span><span class="n">switch</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">debian</span><span class="o">/</span><span class="n">bullseye</span> <span class="mf">1.12</span> <span class="n">main</span>
<span class="n">deb</span> <span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="n">apt</span><span class="o">.</span><span class="n">postgresql</span><span class="o">.</span><span class="n">org</span><span class="o">/</span><span class="n">pub</span><span class="o">/</span><span class="n">repos</span><span class="o">/</span><span class="n">apt</span><span class="o">/</span> <span class="n">bullseye</span><span class="o">-</span><span class="n">pgdg</span> <span class="n">main</span></pre><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b" style="font-family: arial;"><span class="ryNqvb">Os repositórios do sistema podem ser alterados editando o arquivo: /etc/apt/sources.list.</span></span><span style="font-family: arial;"> <span class="jCAhz ChMk0b"><span class="ryNqvb">Como usamos nosso próprio repositório de pacotes, você deve adicionar nossa chave a um arquivo confiável.</span></span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></p><pre><span class="gp"># apt install -y vim wget gnupg net-tools</span></pre><pre><span class="gp"># </span>wget<span class="w"> </span>http://pkg.yeti-switch.org/key.gpg<span class="w"> </span>-O<span class="w"> </span>-<span class="w"> </span><span class="p">|</span><span class="w"> </span>apt-key<span class="w"> </span>add<span class="w"> </span>-</pre><pre><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">A chave do repositório PGDG também deve ser adicionada à lista confiável</span></span></span>:</span></pre><pre><span class="gp"># </span>wget<span class="w"> </span>https://www.postgresql.org/media/keys/ACCC4CF8.asc<span class="w"> </span>-O<span class="w"> </span>-<span class="w"> </span><span class="p">|</span><span class="w"> </span>apt-key<span class="w"> </span>add<span class="w"> </span>-</pre><h2 style="text-align: left;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="color: #2b00fe; font-size: small;">Roteando a instalação do banco de dados</span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">NOTA: </span></span></span><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Recomendamos colocar o banco de dados de roteamento no mesmo host com interface WEB de gerenciamento para melhor desempenho e capacidade de resposta da interface web.</span></span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="font-size: small;"> </span></span></span></span></p><h2 style="text-align: left;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="color: #2b00fe; font-size: small;">Versões suportadas</span></span></span></span></h2><pre><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">A única versão do PostgreSQL suportada é a 13.</span></span></span></span></pre><h2 style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Instalação de pacotes</span></span></span><span style="color: #2b00fe; font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></span></h2><pre><span class="gp"># </span>apt<span class="w"> </span>update<span class="w"> </span><span class="o"> </span></pre><pre><span class="o"># </span>apt<span class="w"> </span>install<span class="w"> </span>postgresql-13<span class="w"> </span>postgresql-contrib-13<span class="w"> </span>postgresql-13-prefix<span class="w"> </span>postgresql-13-pgq3<span class="w"> </span> </pre><pre># apt install postgresql-13-pgq-ext<span class="w"> </span>postgresql-13-yeti<span class="w"> </span>postgresql-13-pllua<span class="w"> </span>pgqd</pre><h2 style="text-align: left;"><span class="HwtZe" lang="pt" style="color: #2b00fe;"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="font-size: small;">Criação dos bancos de dados</span></span></span></span><span style="color: #2b00fe; font-size: small;"><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></span></h2><p style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Criar banco de dados de roteamento</span></span></span><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></span></p><pre><span class="gp"># </span>su<span class="w"> </span>-<span class="w"> </span>postgres
<span class="gp">$ </span>psql</pre><pre><span class="gp">postgres=#</span><span class="w"> </span><span class="k">create</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">yeti</span><span class="w"> </span><span class="k">encrypted</span><span class="w"> </span><span class="k">password</span><span class="w"> </span><span class="s1">'algumasenha'</span><span class="w"> </span><span class="n">superuser</span><span class="p">;</span>
<span class="go">CREATE ROLE</span>
<span class="gp">postgres=#</span><span class="w"> </span><span class="k">create</span><span class="w"> </span><span class="k">database</span><span class="w"> </span><span class="n">yeti</span><span class="w"> </span><span class="k">owner</span><span class="w"> </span><span class="n">yeti</span><span class="p">;</span>
<span class="go">CREATE DATABASE</span>
<span class="gp">postgres=#</span><span class="w"> </span><span class="kp">\q</span> </pre><pre>postgres@yeti:~$ exit </pre><p style="text-align: justify;"><span style="font-family: arial; font-size: small;"><span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">NOTA: </span></span></span></span></span><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Recomenda-se escolher nomes de bancos de dados, nomes de usuários e senhas diferentes dos especificados neste manual por motivos de segurança.</span></span></span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="font-size: small;">Para grandes instalações, é recomendável colocar o banco de dados CDR em um servidor dedicado.</span></span></span></span></p><h2 style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="color: #2b00fe;">Verificações</span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Verifique se os bancos de dados foram criados com sucesso e estão acessíveis:</span></span></span><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></p><p style="text-align: justify;"></p><pre><span class="n">root</span><span class="nd">@yeti</span><span class="p">:</span><span class="o">/</span><span class="c1"># psql -h 127.0.0.1 -U yeti -d yeti</span>
<span class="n">Password</span> <span class="k">for</span> <span class="n">user</span> <span class="n">yeti</span><span class="p">:</span> <span class="n">psql</span> <span class="p">(</span><span class="mf">9.4.5</span><span class="p">)</span> <span class="n">SSL</span> <span class="n">connection</span>
<span class="p">(</span><span class="n">cipher</span><span class="p">:</span> <span class="n">DHE</span><span class="o">-</span><span class="n">RSA</span><span class="o">-</span><span class="n">AES256</span><span class="o">-</span><span class="n">GCM</span><span class="o">-</span><span class="n">SHA384</span><span class="p">,</span> <span class="n">bits</span><span class="p">:</span> <span class="mi">256</span><span class="p">)</span>
<span class="n">Type</span> <span class="s2">"help"</span> <span class="k">for</span> <span class="n">help</span><span class="o">.</span>
<span class="n">yeti</span><span class="o">=</span><span class="c1"># \q</span>
<span class="n">root</span><span class="nd">@yeti</span><span class="p">:</span><span class="o">/</span><span class="c1">#</span></pre><p style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Não se esqueça de fazer alterações em <span style="color: red;"><b>/etc/postgresql/13/main/pg_hba.conf</b></span> e aplicá-las se você planeja acessar esses bancos de dados de outros hosts e/ou configurar a replicação do banco de dados</span></span></span><span class="c1" style="font-family: arial;">.</span></span></p><h2 style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="color: #2b00fe;">Instalação de bancos de dados CDR</span></span></span><span style="font-family: arial;"><span class="c1"> </span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span style="font-family: arial;"><span class="c1"></span></span></span><span class="HwtZe" lang="pt"><span style="font-size: small;"><span class="jCAhz ChMk0b" style="font-family: arial;"><span class="ryNqvb">O sistema requer dois bancos de dados: um para roteamento e outro para CDRs.</span></span><span style="font-family: arial;"> <span class="jCAhz ChMk0b"><span class="ryNqvb">A configuração de diferentes instâncias do PostgreSQL é altamente recomendada para possibilitar a replicação.</span></span></span></span></span></p><h2 style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Instalação de pacotes</span></span></span><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Bancos de dados CDRs requerem um conjunto de pacotes semelhante ao banco de dados de roteamento</span></span></span><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">.</span></span></span></span></span></p><pre><span class="gp"></span># apt<span class="w"> </span>update<span class="w"> </span></pre><pre><span class="w">#</span><span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>postgresql-13<span class="w"> </span>postgresql-contrib-13<span class="w"> </span>postgresql-13-prefix<span class="w"> </span>postgresql-13-pgq3<span class="w"> </span></pre><pre><span class="w"># apt install </span>postgresql-13-pgq-ext<span class="w"> </span>postgresql-13-yeti<span class="w"> </span>postgresql-13-pllua<span class="w"> </span>pgqd</pre><p style="text-align: justify;"><span style="font-family: arial; font-size: small;"><span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">NOTA: </span></span></span></span></span><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">É importante instalar o Postgresql do repositório PGDG.</span></span> <span class="jCAhz ChMk0b"><span class="ryNqvb">Consulte a configuração dos repositórios para obter detalhes.</span></span></span><span style="font-family: arial;"><span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></span></span></p><h3 style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="color: #2b00fe; font-size: small;">Criação dos bancos de dados</span></span></span></span></h3><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Criar banco de dados cdr (</span></span></span><span style="font-family: arial;"><span>Call Detail Record).</span></span></span></p><pre><span class="gp"># </span>su<span class="w"> </span>-<span class="w"> </span>postgres
<span class="gp">$ </span>psql</pre><pre><span class="gp">postgres=#</span><span class="w"> </span><span class="k">create</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">cdr</span><span class="w"> </span><span class="k">encrypted</span><span class="w"> </span><span class="k">password</span><span class="w"> </span><span class="s1">'</span><span class="s1">algumasenha</span><span class="s1">'</span><span class="w"> </span><span class="n">superuser</span><span class="p">;</span>
<span class="go">CREATE ROLE</span>
<span class="gp">postgres=#</span><span class="w"> </span><span class="k">create</span><span class="w"> </span><span class="k">database</span><span class="w"> </span><span class="n">cdr</span><span class="w"> </span><span class="k">owner</span><span class="w"> </span><span class="n">cdr</span><span class="p">;</span>
<span class="go">CREATE DATABASE</span>
<span class="gp">postgres=#</span><span class="w"> </span><span class="kp">\q</span> </pre><pre>postgres@yeti:~$ exit</pre><p style="text-align: justify;"><span style="font-family: arial;"><span style="font-size: small;">NOTA: <span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb">Recomenda-se escolher nomes de bancos de dados, nomes de usuários e senhas diferentes dos especificados neste manual por motivos de segurança.</span></span></span> </span></span></p><p style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"><span style="font-size: small;">Para grandes instalações, é recomendável colocar o banco de dados CDR em um servidor dedicado.</span></span></span></span></p><h3 style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="color: #2b00fe; font-size: small;">Código PGQd</span></span></span></span></h3><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Após a inicialização do banco de dados CDR, você deve executar <b>pgq ticker daemon</b> (<b><span style="color: red;">pgqd</span></b>) no servidor com banco de dados CDR.</span></span><span class="jCAhz"><span class="ryNqvb">
</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">Edite o arquivo de configuração <b><span style="color: red;">/etc/pgqd.ini</span></b></span></span></span><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> e realize as modificações a seguir:<br /></span></span></span></span></p><pre><span class="k">[pgqd]</span>
<span class="na">base_connstr</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">host=127.0.0.1 port=5432 dbname=cdr user=cdr password=algumasenha</span>
<span class="na">initial_database</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">cdr</span>
<span class="na">database_list</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">cdr</span>
<span class="na">pidfile</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">/var/run/postgresql/pgqd.pid</span></pre><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Então você deve iniciar o ticker:</span></span></span><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></span></p><pre><span class="gp"># </span>service<span class="w"> </span>pgqd<span class="w"> </span>start</pre><pre># servide pgqd status</pre><pre><span style="color: #04ff00;"><b>●</b></span> pgqd.service - PgQ maintenance daemon<br /> Loaded: loaded (/lib/systemd/system/pgqd.service; enabled; vendor preset: enabled)<br /> Active: <span style="color: #04ff00;"><b>active</b></span> <span style="color: #04ff00;"><b>(running)</b></span> since Mon 2023-07-24 14:07:52 -03; 47min ago<br /> Main PID: 6949 (pgqd)<br /> Tasks: 1 (limit: 2323)<br /> Memory: 1.1M<br /> CPU: 46ms<br /> CGroup: /system.slice/pgqd.service<br /> └─6949 /usr/bin/pgqd /etc/pgqd.ini<br /> </pre><h2 style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Verificações</span></span></span><span style="color: #2b00fe; font-family: arial;"> </span></span></h2><p style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="font-size: small;">Verifique se os bancos de dados foram criados com sucesso e estão acessíveis:</span></span></span></span></p><pre><span class="n">root</span><span class="o">@</span><span class="n">yeti-cdr</span><span class="p">:</span><span class="o">/#</span><span class="w"> </span><span class="n">psql</span><span class="w"> </span><span class="o">-</span><span class="n">h</span><span class="w"> </span><span class="mf">127.0.0.1</span><span class="w"> </span><span class="o">-</span><span class="n">U</span><span class="w"> </span><span class="n">cdr</span><span class="w"> </span><span class="o">-</span><span class="n">d</span><span class="w"> </span><span class="n">cdr</span>
<span class="k">Password</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="k">user</span><span class="w"> </span><span class="n">cdr</span><span class="p">:</span><span class="w"> </span><span class="n">psql</span><span class="w"> </span><span class="p">(</span><span class="mf">9.4.5</span><span class="p">)</span><span class="w"> </span><span class="n">SSL</span><span class="w"> </span><span class="k">connection</span>
<span class="p">(</span><span class="n">cipher</span><span class="p">:</span><span class="w"> </span><span class="n">DHE</span><span class="o">-</span><span class="n">RSA</span><span class="o">-</span><span class="n">AES256</span><span class="o">-</span><span class="n">GCM</span><span class="o">-</span><span class="n">SHA384</span><span class="p">,</span><span class="w"> </span><span class="n">bits</span><span class="p">:</span><span class="w"> </span><span class="mf">256</span><span class="p">)</span>
<span class="k">Type</span><span class="w"> </span><span class="s s-Name">"help"</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">help</span><span class="mf">.</span>
<span class="gp">cdr=#</span><span class="w"> </span><span class="kp">\q</span>
<span class="n">root</span><span class="o">@</span><span class="n">yeti-cdr</span><span class="p">:</span><span class="o">/#</span></pre><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Não se esqueça de fazer alterações em <b><span style="color: red;">/etc/postgresql/13/main/pg_hba.conf</span></b> e aplicá-las se você planeja acessar esses bancos de dados de outros hosts e/ou configurar a replicação do banco de dados</span></span></span></span><span class="o">.</span></p><h2 style="text-align: justify;"><span style="color: #2b00fe; font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">instalação da interface WEB</span></span></span></span><span class="o" style="color: #2b00fe;"> <br /></span></h2><p style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Requisitos do servidor:</span></span><span class="jCAhz"><span class="ryNqvb"> </span></span></span></span></p><ul style="text-align: left;"><li style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz"><span class="ryNqvb">A</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">rquitetura amd64</span></span><span class="jCAhz"><span class="ryNqvb">;</span></span></span></span></li><li style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Distribuição Debian 11 Bullseye;</span></span></span></span></li><li style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">P</span></span><span class="jCAhz ChMk0b"><span class="ryNqvb">elo menos 4 GB de RAM</span></span></span><span class="o" style="font-family: arial;">. <br /></span></span></li></ul><h2 style="text-align: justify;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="color: #2b00fe; font-size: small;">Instalação de pacotes</span></span></span></span></h2><pre><span class="gp"># </span>apt<span class="w"> </span>update<span class="w"> </span><span class="o">&&</span><span class="w"> </span>apt<span class="w"> </span>install<span class="w"> </span>yeti-web<span class="w"> </span>nginx
<span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="font-size: small;"> </span></span></span></span></pre><h2 style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Configuração de conexão de bancos de dados</span></span></span><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Para configurar os parâmetros de conexão de bancos de dados, crie o arquivo <b><span style="color: red;">/opt/yeti-web/config/database.yml</span></b> com o seguinte conteúdo:</span></span></span><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></p><pre><span class="nt">production</span><span class="p">:</span>
<span class="w"> </span><span class="nt">primary</span><span class="p">:</span>
<span class="w"> </span><span class="nt">adapter</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">postgresql</span>
<span class="w"> </span><span class="nt">encoding</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">unicode</span>
<span class="w"> </span><span class="nt">database</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">yeti</span>
<span class="w"> </span><span class="nt">username</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">yeti</span>
<span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">algumasenha</span>
<span class="w"> </span><span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1</span>
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5432</span>
<span class="w"> </span><span class="nt">schema_search_path</span><span class="p">:</span><span class="w"> </span><span class="s">'gui,</span><span class="nv"> </span><span class="s">public,</span><span class="nv"> </span><span class="s">switch,</span><span class="nv"> </span><span class="s">billing,</span><span class="nv"> </span><span class="s">class4,</span><span class="nv"> </span><span class="s">runtime_stats,</span><span class="nv"> </span><span class="s">sys,</span><span class="nv"> </span><span class="s">logs,</span><span class="nv"> </span><span class="s">data_import'</span>
<span class="w"> </span><span class="nt">min_messages</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">notice</span>
<span class="w"> </span><span class="nt">pool</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5</span>
<span class="w"> </span><span class="nt">cdr</span><span class="p">:</span>
<span class="w"> </span><span class="nt">adapter</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">postgresql</span>
<span class="w"> </span><span class="nt">encoding</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">unicode</span>
<span class="w"> </span><span class="nt">database</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">cdr</span>
<span class="w"> </span><span class="nt">username</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">yeti</span>
<span class="w"> </span><span class="nt">password</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">algumasenha</span>
<span class="w"> </span><span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">127.0.0.1</span>
<span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5432</span>
<span class="w"> </span><span class="nt">schema_search_path</span><span class="p">:</span><span class="w"> </span><span class="s">'cdr,</span><span class="nv"> </span><span class="s">reports,</span><span class="nv"> </span><span class="s">billing'</span>
<span class="w"> </span><span class="nt">min_messages</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">notice</span>
<span class="w"> </span><span class="nt">pool</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">5</span>
<span class="w"> </span><span class="nt">migrations_paths</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">db/cdr_migrate</span>
<span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></pre><pre><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Você deve especificar endereços e credenciais corretos que foram usados na seção anterior.</span></span></span></span></pre><h2 style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="color: #2b00fe;">Configuração Yeti-web</span></span></span><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><br /></span></span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Copie o exemplo do arquivo de configuração <b><span style="color: red;">/opt/yeti-web/config/yeti_web.yml.distr</span></b> para <b><span style="color: red;">/opt/yeti-web/config/yeti_web.yml</span></b></span></span></span><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><br /></span></span></span></span></span></p><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"># cp -av /opt/yeti-web/config/yeti_web.yml.distr /opt/yeti-web/config/yeti_web.yml</span></span></span></span></p><h2 style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"><span style="color: #2b00fe; font-size: small;">Inicialização da comunicação com os bancos de dados</span></span></span></span></h2><p style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"><span style="font-size: small;">Para inicializar bancos de dados vazios durante a instalação inicial:</span></span></span></span><span style="font-family: arial; font-size: small;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></span></p><pre><span class="gp"># </span><span class="nb">cd</span><span class="w"> </span>/opt/yeti-web
<span class="gp"># </span>su<span class="w"> </span>-s<span class="w"> </span>/bin/bash<span class="w"> </span>yeti-web
<span class="gp">$ </span><span class="nv">RAILS_ENV</span><span class="o">=</span>production<span class="w"> </span>./bin/bundle.sh<span class="w"> </span><span class="nb">exec</span><span class="w"> </span>rake<span class="w"> </span>db:schema:load<span class="w"> </span>db:migrate
<span class="gp">$ </span><span class="nv">RAILS_ENV</span><span class="o">=</span>production<span class="w"> </span>./bin/bundle.sh<span class="w"> </span><span class="nb">exec</span><span class="w"> </span>rake<span class="w"> </span>db:seed</pre><pre>yeti-web@yeti:~$ exit</pre><pre>root@yeti:/opt/yeti-web# cd /</pre><p style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Para atualizar os bancos de dados para a versão mais recente:</span></span></span><span style="font-family: arial;"> </span></span></p><pre><span class="gp"># </span><span class="nb">cd</span><span class="w"> </span>/opt/yeti-web
<span class="gp"># </span>su<span class="w"> </span>-s<span class="w"> </span>/bin/bash<span class="w"> </span>yeti-web
<span class="gp">$ </span><span class="nv">RAILS_ENV</span><span class="o">=</span>production<span class="w"> </span>./bin/bundle.sh<span class="w"> </span><span class="nb">exec</span><span class="w"> </span>rake<span class="w"> </span>db:migrate</pre><pre>yeti-web@yeti:~$ exit</pre><pre>root@yeti:/opt/yeti-web# cd /</pre><h2 style="text-align: left;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb" style="font-family: arial;"><span style="color: #2b00fe; font-size: small;">Configuração do Nginx</span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Para configuração básica, remova a configuração padrão e copie yeti-web.dist.nginx:</span></span></span></span></p><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></span></p><pre><span class="gp"># </span>rm<span class="w"> </span>/etc/nginx/sites-enabled/default
<span class="gp"># </span>cp<span class="w"> </span>/opt/yeti-web/config/yeti-web.dist.nginx<span class="w"> </span>/etc/nginx/sites-enabled/yeti
<span class="gp"># </span>nginx<span class="w"> </span>-t
<span class="go">nginx: the configuration file /etc/nginx/nginx.conf syntax is ok</span>
<span class="go">nginx: configuration file /etc/nginx/nginx.conf test is successful</span>
<span class="gp"># </span>service<span class="w"> </span>nginx<span class="w"> </span>restart</pre><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span><span style="font-family: arial;"><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span><span class="HwtZe" lang="pt"><span class="jCAhz ChMk0b"><span class="ryNqvb"><span style="color: #04ff00;"><b>● </b></span>nginx.service - A high performance web server and a reverse proxy server<br /> Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)<br /> Active: <span style="color: #04ff00;"><b>active (running)</b></span> since Mon 2023-07-24 15:22:34 -03; 4s ago<br /> Docs: man:nginx(8)<br /> Process: 16821 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)<br /> Process: 16822 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)<br /> Main PID: 16823 (nginx)<br /> Tasks: 2 (limit: 2323)<br /> Memory: 2.6M<br /> CPU: 15ms<br /> CGroup: /system.slice/nginx.service<br /> ├─16823 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;<br /> └─16824 nginx: worker process<br /><br /></span></span></span></span></span></p><h2 style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Lançar</span></span></span></span></h2><p style="text-align: justify;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"><span style="font-size: small;">Após a configuração bem-sucedida dos bancos de dados, você finalmente pode executar o software usando os seguintes comandos:</span></span></span></span></p><pre><span class="gp"># </span>service<span class="w"> </span>yeti-web<span class="w"> </span>start
<span class="gp"># </span>service<span class="w"> </span>yeti-cdr-billing@cdr_billing<span class="w"> </span>start
<span class="gp"># </span>service<span class="w"> </span>yeti-cdr-billing@cdr_stats start
<span class="gp"># </span>service<span class="w"> </span>yeti-delayed-job<span class="w"> </span>start
<span class="gp"># </span>service<span class="w"> </span>yeti-scheduler<span class="w"> </span>start</pre><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Isso executará a interface da WEB, as agendas de processos, processos de tarefas agendadas em segundo plano e os serviços de processamento do CDR.</span></span></span></span></p><h2 style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Verificações</span></span></span><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"> </span></span></span></span></h2><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Verifique se o puma escuta no soquete local:</span></span></span></span></p><p style="text-align: justify;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb"></span></span></span></span></p><pre><span class="gp"># </span>netstat<span class="w"> </span>-lpn<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>puma
<span class="go">unix 2 [ACC] STREAM OUVINDO 41901 16860/puma 6.2.1 (u /run/yeti/yeti-unicorn.sock)</span></pre><p style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">verifique se o nginx escuta em endereços e portas TCP/IP corretos:</span></span></span><span class="go" style="font-family: arial;"> </span></span></p><pre><span class="gp"># </span>netstat<span class="w"> </span>-lpn<span class="w"> </span><span class="p">|</span><span class="w"> </span>grep<span class="w"> </span>nginx
<span class="go">tcp 0 0 127.0.0.1:6666 0.0.0.0:* OUÇA 16823/nginx: master</span>
<span class="go">tcp 0 0 0.0.0.0:80 0.0.0.0:* OUÇA 16823/nginx: master</span></pre><h2 style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="color: #2b00fe; font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Arquivos de log para verificar possíveis avisos/erros:</span></span></span><span class="go" style="color: #2b00fe; font-family: arial;"> </span></span></h2><ul style="text-align: left;"><li style="text-align: left;"><span style="font-size: small;"><span style="font-family: arial;">/var/log/yeti/yeti-web.log</span></span></li><li style="text-align: left;"><span style="font-family: arial; font-size: small;">/var/log/yeti/yeti-cdr-billing.log</span></li><li style="text-align: left;"><span style="font-family: arial; font-size: small;">/opt/yeti-web/log/puma.stdout.log</span></li><li style="text-align: left;"><span style="font-size: small;"><span style="font-family: arial;">/opt/yeti-web/log/puma.stderr.log<span class="go"> <br /></span></span></span></li></ul><p style="text-align: left;"><span style="font-size: small;"><span class="HwtZe" lang="pt" style="font-family: arial;"><span class="jCAhz ChMk0b"><span class="ryNqvb">Tente abrir a interface de gerenciamento em seu navegador favorito e faça o login com as credenciais padrão:</span></span></span></span></p><p style="text-align: left;"><span style="font-size: small;"><span class="go" style="font-family: arial;">User: admin</span></span></p><p style="text-align: left;"><span style="font-size: small;"><span class="go" style="font-family: arial;">Pass: 111111</span></span></p><p style="text-align: left;"><span style="font-size: small;"><span class="go" style="font-family: arial;"></span></span></p><h1 style="text-align: left;"><span style="color: #2b00fe;"><i>E por hoje é só</i>, <i>pessoal</i>! </span></h1><p style="text-align: left;"><span>Fonte: <a href="https://yeti-switch.org/" target="_blank"> </a></span><a href="https://yeti-switch.org/" target="_blank"><span style="font-size: small;"><span class="go" style="font-family: arial;">https://yeti-switch.org/</span></span></a></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.comtag:blogger.com,1999:blog-5351570291681062564.post-3334456518583010672023-07-03T17:29:00.003-03:002023-07-03T17:29:43.139-03:00Asterisk® SCF™ - PJSIP Negociação Avançada de CODEC<p> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT-fLa1ya5USHeP_S7NfmFyuoRuzzQB0qliRewtKM0h0M8gOE4Sa9K0lDapoAG_npggMPjmT0RXPEwAx_cX68W1fGVzJhoPWtSpL_sEDeL9t7IUYY1Ex1MZdRPqbQs0XbqlFUaUWmxmNuX7GzmXwDtaeTNVuRwj1b_cHQND5_veaEG3HK5b6g-AvfE9xkq/s1200/PJSIP%20Advanced%20CODEC%20Negotiation.jpg" imageanchor="1" style="font-family: arial; margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="628" data-original-width="1200" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgT-fLa1ya5USHeP_S7NfmFyuoRuzzQB0qliRewtKM0h0M8gOE4Sa9K0lDapoAG_npggMPjmT0RXPEwAx_cX68W1fGVzJhoPWtSpL_sEDeL9t7IUYY1Ex1MZdRPqbQs0XbqlFUaUWmxmNuX7GzmXwDtaeTNVuRwj1b_cHQND5_veaEG3HK5b6g-AvfE9xkq/w640-h334/PJSIP%20Advanced%20CODEC%20Negotiation.jpg" width="640" /></a></p><p style="text-align: justify;"><span style="font-family: arial;"></span></p><b style="font-family: arial;"><p style="text-align: justify;"><b><br /></b></p>Prefácio</b><p></p><p style="text-align: justify;"><span style="font-family: arial;">Este post não está completo e nem o software em 15 de julho de 2020. Ainda há muitas coisas para imprementar e/ou testar.</span></p><p></p><ul><li style="text-align: justify;"><span style="font-family: arial;">Direct Media (Mídia Direta);</span></li><li style="text-align: justify;"><span style="font-family: arial;">100rel/early media;</span></li><li style="text-align: justify;"><span style="font-family: arial;">re-INVITES;</span></li><li style="text-align: justify;"><span style="font-family: arial;">Fax;</span></li><li style="text-align: justify;"><span style="font-family: arial;">Multi-Stream (Transmissão Múltipla);</span></li><li style="text-align: justify;"><span style="font-family: arial;">Deferred SDP (Deferimento do SDP);</span></li><li style="text-align: justify;"><span style="font-family: arial;">ARI Channel Operations (Operações do Canal ARI);</span></li><li style="text-align: justify;"><span style="font-family: arial;">Interoperabilidade com outros drivers de canal;</span></li><li style="text-align: justify;"><span style="font-family: arial;">Função do Dialplan;</span></li><li style="text-align: justify;"><span style="font-family: arial;">etc.</span></li></ul><div style="text-align: justify;"><span style="font-family: arial;">Bem, ainda estamos trabalhando nisso.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Introdução</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Com o lançamento do Asterisk® SCF™ versão 18, vem um novo processo de Negociação Avançada de CODEC. Isso não apenas cria novas oportunidades de configuração, mas também refatora completamente o próprio processo de negociação. O resultado é um processo de negociação mais fácil de entender, imprementado em muito menos código. O driver do canal PJSIP é atualmente o único a adotar o novo processo, mas seus outros drivers podem ser alterados para usá-lo no futuro. No entanto, eles teriam que adotar a interface do STREAMS.</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Arquitetura</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Ao pensar no processo de negociação, estamos realmente falando sobre a negociação de topologias de fluxo entre duas entidades. Para cada canal, existe uma topologia que contém um ou mais fluxos que descrevem a mídia. Na verdade, o processo de negociação acontece <b>stream a stream</b>, mas vamos usar a " <span style="color: red;"><b>chamada de áudio simples </b></span>" como exemplo. A topologia conteria apenas um fluxo de " <b><span style="color: red;">áudio</span></b> ", mas esse fluxo poderia, é claro, permitir vários codecs.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Uma vez que o </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;"> é um <b><span style="color: #2b00fe;">Agente de Usuário Back-2-Back</span></b>, não há praticamente nenhum cenário (mesmo com Mídia Direta) onde as partes chamadoras e chamadas negociam diretamente umas com as outras. Temos 2 canais e o CORE do </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;"> envolvido. Com isso em mente, se <b>Alice</b> chama <b>Bob</b>, <b>Alice</b> negocia com o driver de <b>canal de Alice</b>, o driver de canal de <b>Alice</b> negocia com o driver de <b>canal de Bob</b> via CORE do </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;">, então o driver de canal de <b>Bob</b> negocia com <b>Bob</b>. Diante disso, existem 4 pontos de controle onde podemos alterar o comportamento do processo de negociação...</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><p></p><div><ul><li><span style="font-family: arial;">Depois de recebermos a oferta de <b>SDP</b> de <b>Alice</b>, mas antes de o driver enviar a oferta ao CORE do Asterisk® SCF™. (<span style="color: red;"><b>incoming_offer</b></span>);</span></li><li><span style="font-family: arial;">Depois que o CORE do Asterisk® SCF™ enviou a oferta para o canal de <b>Bob</b>, mas antes de enviarmos uma oferta <b>SDP</b> para<b> Bob</b>. (<b><span style="color: red;">outgoind_offer</span></b>);</span></li><li><span style="font-family: arial;">Depois de recebermos a resposta <b>SDP</b> de <b>Bob</b>, mas antes de enviá-la ao CORE do Asterisk® SCF™. (<b><span style="color: red;">incoming_answer</span></b>);</span></li><li><span style="font-family: arial;">Após o CORE do Asterisk® SCF™ ter enviado a resposta para o canal de <b>Alice</b>, mas antes de enviarmos uma resposta <b>SDP</b> para <b>Alice</b>. (<b><span style="color: red;">outgoing_answer</span></b>).</span></li></ul><div style="text-align: justify;"><span style="font-family: arial;">Em todos esses casos, temos duas topologias que podemos alternar, uma " pendente "(pending) e uma " configurada " (configured), e várias operações de seleção e filtragem que podemos realizar nelas. O resultado é uma topologia " resolvida " (resolved). O processo de resolução é controlado por quatro parâmetros...</span></div><div><ul><li><span style="font-family: arial;"><b><span style="color: red;">prefer</span></b>: Qual da lista de CODECs no stream nós preferimos? O pendente ou o configurado? </span></li><ul><li><span style="font-family: arial;"><b><span style="color: red;">incoming_offer</span></b>: Este é bastante óbvio. <b><span style="color: red;">Pendente</span></b> é a topologia criada analisando a oferta do <b>SDP de Alice</b> e <b><span style="color: red;">Configurada</span></b> é aquela criada a partir da <b>lista de CODECs</b> permitidos no terminal de Alice.</span></li><li><span style="font-family: arial;"><span style="color: red;"><b>output_offer</b></span>: Este é um tanto óbvio. <b><span style="color: red;">Pendente</span></b> é o resultado da resolução <b>incoming_offer</b> <b>de Alice</b> que foi recebida do CORE do Asterisk® SCF™ e <b><span style="color: red;">Configurado</span></b> é aquele criado a partir da <b>lista de CODECs</b> permitidos no terminal de Bob.</span></li><li><span style="font-family: arial;"><b><span style="color: red;">incoming_answer</span></b>: Este é menos óbvio. <b><span style="color: red;">Pendente </span></b>é o resultado da análise da resposta <b>SDP</b> <b>de Bob</b> e <b><span style="color: red;">Configurado</span></b> é o que enviamos a <b>Bob na oferta</b>.</span></li><li><span style="font-family: arial;">outgoing_answer: Este também é menos óbvio. <b><span style="color: red;">Pendente</span></b> é o resultado da resolução <b>incoming_answer de Bob</b> e <b><span style="color: red;">Configurado</span></b> é o resultado da resolução <b>incoming_offer de Alice</b>.</span></li></ul></ul><span style="font-family: arial;">Então, o que <b><span style="color: red;">prefer</span></b> realmente significa? Leia...</span></div><div><ul><li><span style="font-family: arial;"><b><span style="color: red;">operation</span></b>: Agora que sabemos qual topologia preferimos, que operação queremos realizar nelas?</span></li><ul><li><span style="font-family: arial;"><b><span style="color: red;">union</span></b>: Combinamos os codecs de ambas as topologias começando com a lista preferencial e adicionando ao final os codecs da lista não preferencial que ainda não estavam na lista preferencial. <b>Basicamente</b>, estamos preservando a ordem da topologia preferida.</span></li><li><span style="font-family: arial;"><b><span style="color: red;">intersect</span></b>: Começamos com a lista preferida novamente, mas <b><span style="color: red;">descartamos</span></b> quaisquer CODECs que não estejam em ambas as listas. Isso mantém apenas os CODECs comuns enquanto <b>preserva</b> a ordem da lista preferencial.</span></li><li><span style="font-family: arial;"><b><span style="color: red;">only_preferred</span></b>: Apenas usamos a lista de <b>preferidos</b> e <span style="color: red;"><b>descartamos</b></span> completamente a lista de não preferidos.</span></li><li><span style="font-family: arial;"><b><span style="color: red;">only_nonpreferred</span></b>: Apenas usamos a lista de <b>não preferidos</b> e <b><span style="color: red;">descartamos</span></b> completamente a lista de preferidos.</span></li></ul><li><span style="font-family: arial;"><b><span style="color: red;">keep</span></b>: Agora que temos uma lista<b><span style="color: red;"> filtrada </span></b>e<b><span style="color: red;"> ordenada</span></b>, o que guardamos dela?</span></li><ul><li><span style="font-family: arial;"><b><span style="color: red;">all</span></b>: Mantenha-os todos;</span></li><li><span style="font-family: arial;"><b><span style="color: red;">first</span></b>: Passe apenas pelo <b>primeiro</b> CODEC na lista resultante.</span></li></ul><li><span style="font-family: arial;"><b><span style="color: red;">Transcode</span></b>: Finalmente, <b>permitimos</b> a transcodificação ou<b> não</b>?</span></li><ul><li><span style="font-family: arial;"><b><span style="color: red;">allow</span></b>: Permite que a chamada prossiga mesmo se a lista resultante não tiver CODECs nela.</span></li><li><span style="font-family: arial;"><b><span style="color: red;">prevent</span></b>: <b>NÃO permite</b> que a chamada prossiga se a lista resultante não tiver CODECs nela.</span></li></ul></ul><span style="font-family: arial;"><b>Configuração</b></span></div><div><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Os quatros pontos de controle e seus parâmetros são todos configurados nos terminais PJSIP. Os parâmetros do ponto de controle são nomeados...</span></div><div><ul style="font-family: arial;"><li>codec_prefs_incoming_offer;</li><li>codec_prefs_outgoing_offer;</li><li>codec_prefs_incoming_answer;</li><li>codec_prefs_outgoing_answer.</li></ul><span style="font-family: arial;"><div style="text-align: justify;">Os parâmetros são especificados como pares <nome>:<valor> separados por vírgulas (o espaço em branco é ignorado). Aqui está um exemplo, incluindo uma declaração de permissão, mostrando os padrões para cada ponto de controle...</div></span><br /><br /><span style="font-family: arial;">Padrões de preferência de negociação de CODEC</span><br /><br />allow = !all,g722,ulaw<br />codec_prefs_incoming_offer = prefer: pending, operation: union, keep: all, transcode: allow<br />codec_prefs_outgoing_offer = prefer: pending, operation: intersect, keep: all, transcode: allow<br />codec_prefs_outgoing_offer = prefer: pending, operation: union, keep: all, transcode: allow<br />codec_prefs_outgoing_offer = prefer: pending, operation: union, keep: all, transcode: allow<br /><br /><br /><div style="text-align: justify;"><span style="font-family: arial;">Você notará que os padrões sempre preferem a topologia "pendente", portanto, em nosso exemplo, o que Alice envia em sua oferta SDP define o cenário.</span></div><div style="text-align: justify;"><span style="background-color: white; font-family: arial; font-size: 20px; text-align: left;"><br /></span></div><div style="text-align: justify;"><span style="background-color: white; font-family: arial; font-size: 20px; text-align: left;"><b>Realmente Simples</b></span></div><div><br /></div></div><div style="text-align: justify;"><span style="font-family: arial;">Vamos começar com uma chamada básica em que <b>Alice</b> e <b>Bob</b> são configurados com suas configurações padrão e ambos com um parâmetro "<b>allow</b>" definido como "<b>!all,ulaw,g722</b>".</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial;"><b>Alice</b> faz uma oferta => </span><span style="font-family: arial; text-align: left;">Asterisk® SCF™ => <b>Bob</b>:</span></li><ul><li style="text-align: justify;"><span style="font-family: arial;">Alice envia um INVITE com uma oferta SDP contendo <b>ulaw</b> e <b>g722</b> nessa ordem.</span></li><li style="text-align: justify;"><span style="font-family: arial;">O canal de <b>Alice</b> resolve essa topologia com os codecs configurados de seu endpoint e as preferências de <b>incoming_offer</b>. Como preferimos <span style="color: red;"><b>Pendentes</b></span> e a operação é <b><span style="color: red;">union</span></b> (união), o resultado do primeiro estágio não surpreende: ulaw,g722. Vamos manter ambos os CODECs e a transcodificação realmente não importa neste momento.</span></li><li style="text-align: justify;"><span style="font-family: arial;">O canal de <b>Alice</b> então envia a chamada para o CORE do Asterisk® SCF™ junto com a topologia resolvida.</span></li><li style="text-align: justify;"><span style="font-family: arial;">O CORE do Asterisk® SCF™ invoca o dialplan que cria o canal de saída de <b>Bob</b> e encaminha a topologia resolvida para ele.</span></li><li style="text-align: justify;"><span style="font-family: arial;"></span></li><li style="text-align: justify;"><span style="font-family: arial;">O canal de <b>Bob</b> agora resolve a topologia que veio do CORE do Asterisk® SCF™ (pendente) com os CODECs configurados de seu próprio terminal e as preferências de <b>output_offer</b>. A única diferença entre suas preferências e as de <b>Alice</b> é a operação. Como ambas as topologias já são iguais, o resultado ainda é ulaw,g722.</span></li><li style="text-align: justify;"><span style="font-family: arial;">Com base nisso, o canal de<b> Bob</b> cria um <b>INVITE</b> de saída com uma oferta SDP contendo <b>ulaw,g722 </b>nessa ordem.</span></li></ul></ul><ul><li><span style="font-family: arial;"><b>Bob</b> aceita a oferta => Asterisk® SCF™ => <b>Alice</b>.</span></li><ul><li><span style="font-family: arial;"><b>Bob</b> responde a oferta com uma resposta do tipo <b>SDP</b> contendo apenas ulaw.</span></li><li></li><li><span style="font-family: arial;">O canal de <b>Bob</b> resolve a topologia de resposta recebida (<b><span style="color: red;">pendente</span></b>) com a topologia enviada para <b>Bob</b> (<b><span style="color: red;">configurada</span></b>) que tem<b> ulaw,g722</b> e as preferências de resposta recebida de <b>Bob</b>. Como a operação é <b><span style="color: red;">union</span></b> (união), a topologia resolvida contém apenas ulaw.</span></li><li><span style="font-family: arial;">O driver de canal de <b>Bob</b> passa a topologia resolvida de volta ao CORE do Asterisk® SCF™, pois indica que a chamada está sendo atendida (<b><span style="color: red;">answered</span></b>).</span></li><li><span style="font-family: arial;">O CORE do Asterisk® SCF™ passa a topologia resolvida de volta para o canal de <b>Alice</b>, uma vez que informa que <b>Bob</b> respondeu (<b><span style="color: red;">answered</span></b>).</span></li><li><span style="font-family: arial;"></span></li><li><span style="font-family: arial;">O canal de<b> Alice</b> resolve a topologia do CORE do Asterisk® SCF™ (<b><span style="color: red;">pendente</span></b>), com a topologia que originalmente enviou para o CORE do Asterisk® SCF™ (<b><span style="color: red;">configurado</span></b>) que tinha <b>ulaw,g722</b> e as preferências de <b>outgoing_answer de Alice</b>. Novamente, como a operação é union (união), a topologia resolvida contém apenas ulaw.</span></li><li><span style="font-family: arial;">O canal de <b>Alice</b> então envia a resposta SDP de volta para <b>Alice</b> com apenas ulaw.</span></li></ul></ul><span style="font-family: arial;">Nesta chamada, Alice deu o tom para a chamada.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Uma mudança na ordem</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Sabemos que os telefones de <b>Alice</b> e <b>Bob</b> podem suportar <b>g722</b>, mas seus telefones sempre listam<b> ulaw primeiro</b>. Então, como podemos fazê-los usar o <b>g722</b>? Vamos fazer algumas alterações de configuração...</span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial;">Começamos alterando as preferências de oferta de entrada de Alice para preferir a topologia configurada em vez da pendente. </span></li><ul><li><span style="font-family: arial;"><b><span style="color: red;">codec_prefs_incoming_offer</span></b> = prefer: configured, operation: union, keep: all, transcode: allow</span></li></ul><li><span style="font-family: arial;">Em seguida, configuramos os CODECs de <b>Alice</b> para g722,ulaw.</span></li><ul><li><span style="font-family: arial;"><b><span style="color: red;">allow </span></b>= !all,g722,ulaw</span></li></ul></ul><span style="font-family: arial;"> </span></div><div style="text-align: justify;"><span style="font-family: arial;">Agora vamos ligar...</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial;"><b>Alice</b> faz uma oferta => </span><span style="font-family: arial; text-align: left;">Asterisk® SCF™ => <b>Bob</b>:</span></li><ul><li style="text-align: justify;"><span style="font-family: arial;"><b>Alice</b> envia um INVITE com uma oferta SDP contendo<b> ulaw</b> e <b>g722</b> nessa ordem.</span></li><li style="text-align: left;"><span style="font-family: arial;"></span></li><li style="text-align: justify;"><span style="font-family: arial;">O canal de <b>Alice</b> resolve essa topologia (<b><span style="color: red;">pendente</span></b>) com os CODECs configurados de seu terminal (g722,ulaw) e as preferências de <b><span style="color: red;">incoming_offer</span></b>. Como preferimos <b><span style="color: red;">configurado</span></b> e a operação é union (união), o resultado do primeiro estágio agora é g722,ulaw.</span></li></ul></ul><br /></div><div style="text-align: justify;"><span style="font-family: arial;">O restante da chamada flui como antes, exceto que <b>g722,ulaw</b> é a topologia <b><span style="color: red;">pendente</span></b>. Pode haver um " gotcha " (<b>te peguei)</b>. A RFC3264 afirma que um agente de usuário que recebe uma oferta <b>NÃO DEVE</b> alterar a ordem dos codecs ao criar sua resposta. Não diz que <b>NÃO DEVE</b> alterar o pedido. Portanto, é possível, embora altamente improvável, que <b>Bob</b> possa responder a <b>g722,ulaw</b> com <b>ulaw,g722</b>. Se for esse o caso, você pode forçar<b> Bob</b> a usar <b>g722</b> definindo seu parâmetro de manutenção de <b>outgoing_offer</b> como primeiro. Desta forma, enviaremos apenas g722. Claro, se ele não suporta g722, você não deveria tê-lo configurado em seu terminal em primeiro lugar. 😂</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Transcodificação</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Isso é onde fica complicado...</span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial;">Digamos que o terminal de<b> Alice</b> esteja configurado apenas com <b>alaw</b> como CODEC, mas ela envia apenas <b>ulaw,g722</b>. Se a topologia resolvida estiver vazia, como seria se a operação fosse union (união), a chamada é encerrada imediatamente com um <b>488 Not Acceptable Here</b>. Não importa qual é o parâmetro de transcodificação definido porque, neste ponto, nem sabemos qual é o canal de saída.</span></li><li><span style="font-family: arial;">Agora vamos supor que o endpoint de<b> Alice</b> tenha <b>ulaw,g722</b>. Como o terminal dela também tinha <b>ulaw,g722</b>, nós o enviamos para o CORE do Asterisk® SCF™. O endpoint de <b>Bob</b>, no entanto, tinha apenas um CODEC, alaw! E sua operação era union (união). Isso resultaria em uma topologia <b>resolvida</b> vazia. Para que a transcodificação seja considerada, o parâmetro de transcodificação de <b>incoming_offer</b> de <b>Alice</b> e o parâmetro de transcodificação de outgoing_offer de <b>Bob</b> DEVEM ser configurados para permitir. Se um deles for "impedir", a chamada será encerrada. Se ambos forem permitidos, enviaremos uma oferta a <b>Bob</b> com alaw como CODEC.</span></li><li><span style="font-family: arial;">Se <b>Bob</b> responder sem CODECs, a chamada será encerrada. Novamente, porém, você provavelmente não deveria ter configurado o endpoint de <b>Bob</b> com um CODEC não suportado. Caso contrário, a topologia resolvida (alaw) é passada de volta para o CORE do Asterisk® SCF™.</span></li><li><span style="font-family: arial;">O canal de <b>Alice</b> obtém a topologia do núcleo (<u style="background-color: white;"><span style="color: red;"><b>pendente</b></span></u>) e a resolve em relação ao que foi enviado ao CORE do Asterisk® SCF™ (configurado) e às preferências de <b>outgoing_answer</b> de seu terminal. Se a topologia resultante estiver vazia, como seria neste caso, o parâmetro de transcodificação <b>output_answer</b> será verificado. Se for permitido, o canal usará a topologia originalmente enviada ao CORE do Asterisk® SCF™ para construir a resposta de saída e simplesmente ignorará a topologia resolvida. Se o parâmetro transcode for prevent (o que provavelmente foi uma configuração incorreta), a chamada será encerrada.</span></li></ul></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Implementação nos bastidores</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">A implementação antiga tinha negociação de CODEC espalhada por <b>chan_pjsip</b>, <b>res_pjsip_session</b> e <b>res_pjsip_sdp_rtp</b>. A ACN tenta consolidar toda a negociação de CODECs em <b>chan_pjsip</b>, mas ainda há resquícios nos outros módulos que precisarão ser refatorados. Um bom exemplo é a função "<b><span style="color: red;">set_caps</span></b>" em <b><span style="color: red;">res_pjsip_sdp_rtp</span></b>. Ele é chamado tanto nas respostas recebidas quanto nas respostas enviadas, mas na verdade não queremos que ele seja executado para respostas enviadas, pois ele tenta definir os limites para o que estava na oferta recebida original. Isso não é bom. Tudo funciona como pretendido, mas é um código inútil. Outro problema é que muitas das funções nos módulos <b>res_pjsip</b> são reutilizadas e não têm ideia do contexto em que são executadas. Por exemplo, <b>apply_negotiated_sdp</b> é executado para respostas recebidas e enviadas (é assim que <b>set_caps</b> é executado duas vezes). De qualquer forma...</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><ul><li><span style="font-family: arial;"><b>Alice</b> faz uma oferta => </span><span style="font-family: arial; text-align: left;">Asterisk® SCF™ => <b>Bob</b>:</span></li><ul><li style="text-align: justify;"><span style="font-family: arial;"><span style="color: red;"><b>incoming_offer</b></span>: Isso é tratado em <b>chan_pjsip</b>:<b>chan_pjsip_incoming_request( )</b> antes que o canal seja realmente criado. Essa função é chamada por sessão por meio do suplemento <b><span style="color: red;">handle_incoming_request</span></b>. A função resolve a topologia criada a partir da oferta de<b> Alice</b> com os parâmetros e CODECs do endpoint e do endpoint de <b>Alice</b>. Supondo que haja fluxos ativos deixados na topologia resolvida, a função redefine a topologia pendente na sessão para ser a topologia resolvida e chama <b><span style="color: red;">chan_pjsip_new</span></b>, que define a topologia no canal junto com os limites de formato nativo e os formatos de leitura e gravação. <b>NOTA</b>: Não definimos os CODECs de instância <b>RTP</b> aqui, mas deveríamos. Se a resolução falhar, terminamos com um <b>488</b>.</span></li><li style="text-align: justify;"><span style="font-family: arial;">Eventualmente, trabalhamos até <b>app_dial</b>:<b>dial_exec_full</b>, que cria o canal de saída de <b>Bob</b> com <b><span style="color: red;">ast_request_with_stream_topology( )</span></b> passando na topologia do canal de<b> Alice</b>.</span></li><li style="text-align: justify;"><span style="font-family: arial;"><strong style="background-color: white; text-align: left;"><span style="color: red;">outgoing_offer</span></strong><span style="background-color: white; text-align: left;"><span style="color: #333333;">: </span><span style="color: red;"><b>ast_request_with_stream_topology( ) </b></span><span style="color: #333333;">chama </span><b><span style="color: red;">chan_pjsip_request_with_stream_topology( )</span></b><span style="color: #333333;">. Em seguida, isso resolve a topologia de solicitação (pendente) com os parâmetros </span><b style="color: #333333;">output_offer</b><span style="color: #333333;"> do endpoint de </span><b style="color: #333333;">Bob</b><span style="color: #333333;"> e os CODECs de endpoint do endpoint de </span><b style="color: #333333;">Bob</b><span style="color: #333333;">. Supondo que existam fluxos ativos deixados na topologia, a função chama </span><b><span style="color: red;">chan_pjsip_new( ) </span></b><span style="color: #333333;">que define a topologia do canal de <b>Bob</b>, limites de formato nativo e formatos de leitura/gravação. Mesma observação acima, devemos definir os CODECs de instância <b>RTP</b> aqui, mas ainda não. Se a topologia resolvida, incluindo a aplicação de opções de transcodificação, não tiver mais fluxos ativos, retornamos uma causa de <b>AST_CAUSE_FAILURE</b> para <b>app_dial</b> e <b>bail</b>, o que faz com que um <b>503</b> seja enviado para <b>Alice</b>.</span></span></span></li><li style="text-align: justify;"><span style="font-family: arial;"><b style="color: #333333;">dial_exec_full</b><span style="color: #333333;"> finalmente chama </span><b><span style="color: red;">chan_pjsip_call( )</span></b><span style="color: #333333;"> cuja tarefa </span><b><span style="color: red;">call( )</span></b><span style="color: #333333;"> chama </span><b><span style="color: red;">ast_sip_session_create_invite( )</span></b><span style="color: #333333;"> então </span><b><span style="color: red;">ast_sip_session_send)request( )</span></b><span style="color: #333333;">.</span></span></li></ul></ul><br /></div><div style="text-align: justify;"><ul><li><span style="font-family: arial;"><b>Bob</b> aceita a oferta => Asterisk® SCF™ => <b>Alice</b>.</span></li><ul><li style="text-align: justify;"><span style="font-family: arial;"><strong style="background-color: white; text-align: left;"><span style="color: red;">incoming_answer</span></strong><span style="background-color: white; color: #333333; text-align: left;">: </span><span style="color: #333333;">Quando <b>Bob</b> envia um <b>200OK</b>, <b>pjproject</b> chama nosso <b>callback</b> </span><span style="color: red;"><b>session_inv_on_media_update( )</b></span><span style="color: #333333;"> que então chama </span><b style="color: #333333;">res_pjsip_session</b><span style="color: #333333;">:</span><b><span style="color: red;">handle_negotiated_sdp( )</span></b><span style="color: #333333;">. Isso define a topologia ativa para aquela recebida de </span><b style="color: #333333;">Bob</b><span style="color: #333333;">. Eventualmente,</span><b style="color: #333333;"> pjproject</b><span style="color: #333333;"> sinaliza uma mudança de estado de transação com base no recebimento de </span><b style="color: #333333;">200OK</b><span style="color: #333333;">, que aciona os suplementos </span><b style="color: #333333;">handle_incoming_response</b><span style="color: #333333;"> da sessão, um dos quais é </span><b><span style="color: red;">chan_pjsip_incoming_response_after_media( )</span></b><span style="color: #333333;">. Isso resolve a topologia ativa que veio de <b>Bob</b>, com a topologia que enviamos a <b>Bob</b> usando as preferências de resposta recebida do endpoint de <b>Bob</b>. A função então chama <b>ast_queue_control_data</b> com um tipo de quadro <b>AST_CONTROL_ANSWER</b> e a topologia resolvida como os dados.</span></span></li><li style="text-align: justify;"><span style="font-family: arial;"><b style="color: #333333;">app_dial</b><span style="color: #333333;">:</span><b><span style="color: red;">wait_for_answer( )</span></b><span style="color: #333333;"> recebe o quadro </span><b style="color: #333333;">ANSWER</b><span style="color: #333333;"> e coloca a topologia na estrutura de configuração da ponte. Isso é passado para </span><b style="color: #333333;">features</b><span style="color: #333333;">:</span><b><span style="color: red;">ast_bridge_call( )</span></b><span style="color: #333333;"> e para baixo para </span><b><span style="color: red;">pre_bridge_setup( ) </span></b><span style="color: #333333;">que chama </span><b><span style="color: red;">ast_raw_answer_with_stream_topology( )</span></b><span style="color: #333333;">. Isso, por sua vez, chama <b>chan_pjsip_answer_with_stream_topology</b> no canal de <b>Alice</b>.</span></span></li><li style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">output_answer</span></b><span style="color: #333333;">: a tarefa de resposta de <b>chan_pjsip_answer_with_stream_topology</b> faz a resolução final usando a topologia ativa de <b>Bob</b>, a topologia <b>pendente de Alice</b> que foi originalmente enviada para o CORE do Asterisk® SCF™ e os parâmetros de <b>output_answer</b> do terminal de <b>Alice</b>.</span></span></li></ul></ul></div><div style="text-align: justify;"><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Fonte: </span><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><a href="https://wiki.asterisk.org/wiki/dashboard.action" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; color: #4d90fe; font-weight: 600; margin: 0px; outline: none; padding: 0px; vertical-align: baseline;" target="_blank">https://wiki.asterisk.org/</a></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;">Por: <a href="https://wiki.asterisk.org/wiki/display/~gjoseph" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; color: #4d90fe; font-weight: 600; margin: 0px; outline: none; padding: 0px; vertical-align: baseline;" target="_blank">George Joseph</a>.</span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p><p style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: rgba(0, 0, 0, 0.9); font-family: "Open Sans", sans-serif; font-size: 1.6rem; line-height: 1.5; margin: 0px; padding: 0px; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-size: 16px; margin: 0px; outline: 0px; padding: 0px; text-align: left; vertical-align: baseline;"><span style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / 0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background: transparent; border: 0px; box-sizing: border-box; font-family: arial; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;"><br /></span></span></p></div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-56376334052719590852023-07-03T12:53:00.003-03:002023-07-03T12:54:33.487-03:00Asterisk® SCF™ - Utilizando PJSIP como Proxy<p> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNhcgWnE2Nez_TWvfG5Q0fVPWDxlOzswq9s7N36qYZziS1_yAIVZqT7pfZhpNkX_QBUKX1hkmjCjC3OZTsslsXsffysui2s5iSKohOYkmWKwDg7Qas3tpKUSDQNClhZFULgsUFzFSDvM0e7NFA4I1DaXRtVzHSCRaEcZOxbSDzN9Ri8NmS-eSe43CKJcn/s1200/image4.jpg" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="628" data-original-width="1200" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWNhcgWnE2Nez_TWvfG5Q0fVPWDxlOzswq9s7N36qYZziS1_yAIVZqT7pfZhpNkX_QBUKX1hkmjCjC3OZTsslsXsffysui2s5iSKohOYkmWKwDg7Qas3tpKUSDQNClhZFULgsUFzFSDvM0e7NFA4I1DaXRtVzHSCRaEcZOxbSDzN9Ri8NmS-eSe43CKJcn/w640-h334/image4.jpg" width="640" /></a></p><p style="text-align: justify;"><span style="font-family: arial;">Existe muitos cenários de proxy diferentes nos quais o Asterisk® SCF™ pode estar envolvido. Nem todos podem ser explicados aqui, mas alguns exemplos podem ajudá-lo a se adaptar à sua situação específica. O primeiro e mais simples cenário é onde o Asterisk® SCF™ está funcionando como um PBX na mesma rede privada em que os telefones estão, mas precisa de conectividade com um Provedor de Serviços de Telefonia pela Internet (ITSP - Internet Telephony Service Provider).</span></p><p style="text-align: justify;"><span style="font-family: arial;"><b>Outbound Proxy (Proxy de Saída)</b></span></p><p style="text-align: justify;"><span style="font-family: arial;">Assumiremos que o ITSP exige que o <span>Asterisk® SCF™ se registre para receber chamadas. Claro, mesmo com o </span><span>Asterisk® SCF™ atrás de um firewall ou roteador NAT, um proxy não é realmente necessário, mas a configuração é boa para começar. Embora a configuração de um proxy como o Kamailio</span><span>® esteja além do escopo deste post, este cenário requer apenas as configurações de proxy mais simples e provavelmente funcionaria com os exemplos fornecidors pelo Kamailio</span><span>®. Vamos assumir que o proxy é DUAL HOMED com uma interface na rede privada e uma inteface na rede pública. Também assumiremos que o proxy está retransmitindo mídia e sinalização. Usaremos 192.168.15.1 como endereço privado do proxy e 192.168.15.2 como endereço do </span><span>Asterisk® SCF™ (atuando como um Softswitch PBX IP).</span></span></p><p style="text-align: justify;"><span style="font-family: arial;"><span><b>Configuração do </b></span><b>Asterisk® SCF™</b></span></p><p style="text-align: justify;"><span style="font-family: arial;">Existem vários objetos PJSIP que precisam ser configurados para esta situação.</span></p><p style="text-align: justify;"></p><ul><li style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">transport</span></b>: Na verdade, esta é uma ação de desconfiguração 😂. Se o Asterisk® SCF™ não estiver usando um proxy, você pode ter parâmetros no transporte como <b>external_signalling_address</b>, <b>external_media_address</b>, <b>local_net</b>, etc. Estes NÃO deve ser configurados quando o Asterisk® SCF™ e o PROXY estiverm na mesma rede. O Asterisk® SCF™ não deve saber nada sobre o que está do outro lado do proxy, pois o trabalho do proxy é tornar isso invisível.</span></li></ul><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px;">Examplo:</span></div><div><code style="background-color: white; color: #333333; font-size: 14px;">[ipv4-udp]</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">type = transport</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">protocol = udp</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">bind = 0.0.0.0:5060</code></div></blockquote><div><ul><li style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">endpoint</span></b>: Configure o endpoint do ITSP como faria normalmente, mas adicione um parâmetro outbound_proxy com um URI que aponta para o endereço interno do proxy. Isso direcionará (quase) todas as solicitações de saída desse endpoint para o proxy. Você também não deve ativar nenhum parâmetro reladionado ao NAT, como <b>force_rport</b>, <b>ice_support</b>, etc.</span></li></ul></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px;">Examplo:</span></div><div><code style="background-color: white; color: #333333; font-size: 14px;">[myitsp]</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">type = aor</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">contact = sip:my.itsp.com:5060</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;"><code>outbound_proxy = sip:192.168.0.1\;lr</code></code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">qualify_frequency = 60</code></div></blockquote><div><ul><li style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">registration</span></b>: O mesmo que aor. Os URIs do clinte e do servidor devem permanecer como estavam para a situação sem proxy e o parâmetro outbound_proxy deve ser incluído.</span></li></ul></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px;">Examplo:</span></div><div><code style="background-color: white; color: #333333; font-size: 14px;">[myitsp]</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">type = registration</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">client_uri = sip:my_account@my.itsp.com</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">server_uri = sip:my.itsp.com</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">outbound_proxy = sip:192.168.0.1\;lr</code></div></blockquote><div><ul><li style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">identify</span></b>: agora as coisas ficam um pouco complicadas. A mairoria dos ITSPs não autentica de volta para seus clientes ao enviar as chamadas e eles podem estar enviando o <b>CallerID</b> do originador/chamador como o usuário do cabeçalho <b><span style="color: red;">FROM:</span></b> (DE), portanto, a (quase) única maneira de identificar as chamdas da ITSP é pelo endereço IP. Se não houvesse proxy no circuito, você provavelmente configuraria um objeto de identificação com um parãmetro <b><span style="color: #2b00fe;">match = my.itsp.com</span></b>. No caso do proxy, porém, a correspondência precisa ser com o endereço privado do proxy, pois esse é o endereço IP de onde os pacotes virão.</span></li></ul> <span> </span><span> </span><span> </span><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px;">Examplo:</span></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div><code style="background-color: white; color: #333333; font-size: 14px;">[myitsp]</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">type = identify</code><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px;"> </span></div><div><code style="background-color: white; color: #333333; font-size: 14px;">match = 192.168.0.1</code></div><div><code style="background-color: white; color: #333333; font-size: 14px;">endpoint = myitsp</code></div></blockquote><div><br /></div><div style="text-align: justify;"><span style="font-family: arial;">Você deve ter notado que os URIs do proxy têm o parâmetro "<b><span style="color: red;"> lr</span></b> " adicionado. Isso ocorre porque a maioria dos proxies hoje em dia segue o <b>RFC 3261</b> e, portanto, tem " <b><span style="color: red;">loose-routing </span></b>" (roteamento flexível). Se você não o tiver definido, provavelmente receberá uma reposta <b>404</b> do proxy. O objeto " <b><span style="color: red;">\</span></b> " antes do ponto e vírgula é importante para evitar que o ponto e vírgula seja tratado como um caractere inicial de comentário no arquivo de configuração.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Bom, nesse ponto, você deve ter um tronco com sua ITSP funcionando para chamadas de Inbound (entradas) e Outbound (saídas). </span></div><div style="text-align: justify;"><br /></div><div><span style="font-family: arial;"><b>Direct Media</b></span></div><div><br /></div><div><span style="font-family: arial;">Se o seu proxy for compatível, você poderá ativar a mídia direta entre os telefones e o proxy definindo <b><span style="color: red;">direct_media = yes</span></b> no telefone (device) e nos terminais (endpoint) da ITSP. O proxy deve cuiadar do resto. Tentar fazer mídia direta, diretamente entre os telefones (devices) e o terminais (endpoints) da ITSP provavelmente não funcionará.</span></div><div><br /></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Multiplas ITSPs</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Há um pequeno problema com a configuração acima se você tiver mais de <b>1 tronco ITSP </b>por meio do proxy. Na configuração acima, o objeto de identificação é usado para direcionar solicitações recebidas do proxy <b><span style="color: #2b00fe;">para um único endpoint</span></b> e você não pode direcionar o mesmo endereço IP para vários endpoints por motivos óbvios. Você pode definir 1 endpoint e 1 identificador para o proxy atuar como o receptor de chamadas de todos os provedores de serviços, mas isso nem sempre é conveniente ou possível com algumas GUIs front-end.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Nesse caso, e se o seu ITSP suportar, você pode usar o parâmetro de linha do objeto de registro como o mecanismo para corresponder as solicitações recebidas a um terminal e eliminar completamente o uso de identificar. </span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">Veja como funciona</span></b>: Quando você especifica <b><span style="color: red;">line = true</span></b> e <b><span style="color: red;">endpoint = <endpoint></span></b> em um registro, o </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;"> acrescenta um parâmetro " <b><span style="color: red;">line</span></b> " ao URI de contato do <b>REGISTER</b> de saída que contém uma string exclusiva. Ficará assim: " <b><span style="color: #2b00fe;">Contact: <sip:s@192.168.0.2.245:5060;line=eylpkkv></span></b> ". <b>Se a sua ITSP suportar</b>, quando enviar uma solicitação INVITE para o </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;">, ele incluirá o parâmetro " <b><span style="color: red;">line</span></b> " no Request URI ou no cabeçalho To da seguinte forma: " <b><span style="color: #2b00fe;">INVITE sip:8005551212@192.168.0.2:5060;line=eylpkkv SIP/2.0</span></b> " . O </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;"> então usará essa string única para corresponder a solicitação ao endpoint especificado no registro.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div style="text-align: justify;"><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; text-align: start;">Examplo:</span></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">[myitsp]</code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">type = registration</code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">client_uri = sip:my_account@<a class="external-link" href="http://my.itsp.com/" rel="nofollow" style="color: #192e84; text-decoration-line: none;">my.itsp.com</a></code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">server_uri = sip:<a class="external-link" href="http://my.itsp.com/" rel="nofollow" style="color: #192e84; text-decoration-line: none;">my.itsp.com</a></code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">outbound_proxy = sip:192.168.0.1</code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;"><code>line = yes</code></code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;"><code>endpoint = myitsp</code> </code></div></blockquote><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Header Matching (Correspondência de Cabeçalho)</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Algumas ITSPs incluem cabeçalhos " X- " em suas solicitações que contêm números de contas ou outras informações de identificação. O Asterisk® SCF™, em suas versões 13.15 e 14.5 têm um novo recurso de identificação que permite combinar as solicitações recebidas com os endpoints por meio desses cabeçalhos.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div style="text-align: justify;"><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; text-align: start;">Examplo: </span></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">[myitsp]</code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">type = identify</code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">match_header = X-My-Account-Number: 12345678</code></div><div style="text-align: justify;"><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">endpoint = myitsp</code><span face=""helvetica neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; text-align: start;"> </span></div></blockquote><p><span style="font-family: arial; text-align: justify;"><b>Inbound Proxy (Proxy de Entrada)</b></span></p><p style="text-align: justify;"><span style="font-family: arial;">Em um cenário de provedor de serviços (ITSP), o </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;"> provavelmente estará atrás de um proxy separado da internet pública e dos clientes, sejam eles telefones ou PBXes ou o que quer que seja. Nesse caso, a carga de configuração muda do </span><span style="font-family: arial;">Asterisk® SCF™</span><span style="font-family: arial;"> para o proxy. Você provavelmente desejará configurar o proxy para lidar com autenticação, qualificação, direção de mídia para gateways de mídia, servidores de correio de voz etc., e tudo isso está além do escopo deste documento. Contribuições que contenham instruções para proxies populares serão muito bem-vindas.</span></p><p style="text-align: justify;"><span style="font-family: arial;">Fonte: </span><span style="text-align: left;"><span style="font-family: arial;"><a href="https://wiki.asterisk.org/wiki/dashboard.action" target="_blank">https://wiki.asterisk.org/</a></span></span></p><p style="text-align: justify;"><span style="text-align: left;"><span style="font-family: arial;">Por <a href="https://wiki.asterisk.org/wiki/display/~gjoseph" target="_blank">George Joseph</a>.</span></span></p><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><br /></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-62616655483604268072022-12-13T11:30:00.001-03:002022-12-13T11:30:42.306-03:00Asterisk® SCF™ Aplicativo: sendDTMF( )<p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLS_m-oj5sGz8d3B4elTAppKLCi180upoehl_xLZZXYA-P5eMpVbTVd3mc-IOt_LzWMp84EzJFDJ6356XJvVL8sy-l-DykkISThwnilWyzZ5KWUZVyNaB402uIuL1_G0YwxBVorL4C5hOjp5T1zyZwdFj3u-NqO_JCk6C03f6jTtZLvDfpJ39UFYP9/s375/DTMF-keypad-frequencies.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="227" data-original-width="375" height="194" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLS_m-oj5sGz8d3B4elTAppKLCi180upoehl_xLZZXYA-P5eMpVbTVd3mc-IOt_LzWMp84EzJFDJ6356XJvVL8sy-l-DykkISThwnilWyzZ5KWUZVyNaB402uIuL1_G0YwxBVorL4C5hOjp5T1zyZwdFj3u-NqO_JCk6C03f6jTtZLvDfpJ39UFYP9/s320/DTMF-keypad-frequencies.png" width="320" /></a></div><br />O Aplicativo de Dialplan do Asterisk® SCF™: sendDTMF( ), envia uma sequencia especificada de tons DTMF em um canal.<p></p><p><b>Descrição</b></p><p>Envia a sequencia especificada de dígitos para o canal. </p><p><b>Sintaxe</b></p><p><b>sendDTMF<span style="color: red;">(</span></b>dígitos<span style="color: #2b00fe;"><b>[</b></span>,timeout_ms<b><span style="color: #cc0000;">[</span></b>,duration-ms<b><span style="color: #ff00fe;">[</span></b>,canal<b><span style="color: #ff00fe;">]</span><span style="color: #cc0000;">]</span><span style="color: #2b00fe;">]</span><span style="color: red;">)</span></b></p><p><b>Argumentos</b></p><p>dígitos - números ou símbolos suportados</p><p> <b><span style="color: red;">0 - 9 </span></b>- números</p><p> <span style="color: red;"><b>* #</b></span> - os caracteres especiais * e #</p><p><span style="color: red;"><b> </b></span><span><span style="color: red;"><b>a - d</b></span> - letras latinas minúsculas de a a d</span></p><p><span> <span style="color: red;"><b>A - D</b></span> - letras latinas maiusculas de A a D</span></p><p><span> <span style="color: red;"><b>w </b></span> - pausa (wait) de 0,5 segundos</span></p><p><span> <span style="color: red;"><b>W</b></span> - pausa (wait) de 1 segundo</span></p><p><span> <span style="color: red;"><b> F</b></span> - flash gancho se suportado pelo canal</span></p><p><span></span></p><p><span><span style="color: red;"><b>timeout_ms</b></span> - intervalo entre os sinais DTMF - por padrão são de 0,25 segundos.</span></p><p><span><span style="color: red;"><b>duration_ms</b></span> - duração de cada dígito.</span></p><p><span><b><span style="color: red;">canal</span></b> - o canal para onde os dígitos devem ser enviados.</span></p><p><span></span></p><p><span><b>Observação</b>: O Aplicativo de Dialplan do </span>Asterisk® SCF™ Dial( ), com o parâmetro <b><span style="color: red;">D </span></b>também pode enviar sequencias DTMF.</p><p>Exemplo</p><p>Nesse exemplo temos um Dial sendo executado sobre um sistema POTS (Sistema de Cartão), e estamos substituindo o número do sistema e o pincode.</p><p>O assinante faz a marcação do prefixo 001 e o número chamado. </p><p>O sistema liga para o número da operadora (cardnum) e envia a sequencia de DTMF: o codigo pin e o numero de destino da chamada (PIN e NUM).</p><pre class="code">[from-internal]
exten => _001X.,1,noop
same => n,answer
same => n,mset(num=${EXTEN:3},pin=1234567,cardnum=6666666)
same => n,Dial(PJSIP/${cardnum}@pjsip_trunk,,U(sub-card^${pin}^${num}))
[sub-card]
exten => s,1,senddtmf(W${ARG1}w${ARG2}#,,,)
same => n,return</pre><p>Fonte: <a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+11+Application_SendDTMF" target="_blank">Asterisk® Documentation</a> <br /></p><p> </p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-42646966519754367502022-09-15T14:37:00.001-03:002022-09-15T14:39:52.182-03:00Asterisk Module and Build Option Selection - XXX cel_pgsql<p><span> </span><span> </span><span> </span><span> </span><span> </span> Olá a todos, depois de muito tempo, venho trazer uma treta bacana que peguei no Asterisk® SCF™, por algum motivo no método normal de instalação das dependências do Asterisk® SCF™ não ocorreu o atendimento da dependência para que o <b>Asterisk Module and Build Option Selection</b> identifica-se o <b>PGSQL(E) </b>para o modulo <span style="color: red;"><b>cdr_pgsql</b></span> e <span style="color: red;"><b>cel_pgsql</b></span>. Observe a imagem a seguir:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF1dNy2SzB9264A77OS7nQpGtDxf_y45elc_Zt34A-eX1XaKAUW_WHoPHfOno3o0e980pFMr6TPJ8k3UHziCJzYQpdXAHxGF92ZTZdWjZQTO2IoPCSlUVeoAQrIbkqJXL79Vak_Vpm-23GSVBasdW-WNE8GqkvGIltACPNKVWbLPXe_-jm7_JCrd8T/s1913/Captura%20de%20tela%20de%202022-09-15%2011-01-03.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1053" data-original-width="1913" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF1dNy2SzB9264A77OS7nQpGtDxf_y45elc_Zt34A-eX1XaKAUW_WHoPHfOno3o0e980pFMr6TPJ8k3UHziCJzYQpdXAHxGF92ZTZdWjZQTO2IoPCSlUVeoAQrIbkqJXL79Vak_Vpm-23GSVBasdW-WNE8GqkvGIltACPNKVWbLPXe_-jm7_JCrd8T/w640-h352/Captura%20de%20tela%20de%202022-09-15%2011-01-03.png" width="640" /></a></div><br /><p>Para entender o que está ocorrendo, entre no fonte do Asterisk® SCF™ e execute o teste pelo script <b>install_prereq</b>:</p><p># <b>cd /usr/local/src/asterisk-13.35.0/</b></p><p># <b>contrib/scripts/install_prereq test</b></p><p>Neste caso, que estamos expondo, a resposta foi essa:</p><p>yum install --skip-broken --assumeyes speexdsp-devel <span style="color: red;"><b>postgresql-devel</b></span> mysql-devel iksemel-devel hoard gmime.x86_64 gmime-devel.x86_64 </p><p>Observe que entre a resposta do teste, esta sendo informado que <b>postgresql-devel</b> não foi encontrado para atender os módulos do Asterisk® SCF™. </p><p>Executando o comando do RPM para validar os pacotes instalados obtemos a seguinte resposta:</p><p># <b>rpm -qa | grep postgres </b><br /><br />postgresql11-libs-11.13-1PGDG.rhel7.x86_64 <br />postgresql11-server-11.13-1PGDG.rhel7.x86_64 <br />postgresql11-devel-11.13-1PGDG.rhel7.x86_64 <br />postgresql11-11.13-1PGDG.rhel7.x86_64 <br />postgresql11-contrib-11.13-1PGDG.rhel7.x86_64</p><p>Ou seja, temos o PostgreSQL 11 instalado, e logo sabemos que o PostgreSQL11-Devel se encontra instalado, mas o Asterisk® SCF™ não sabe. Então para ter certeza que ter certeza de qual versão se encontra ativo e funcional no Sistema Operacional use esse comando:</p><p># <b>psql --version | awk '{print $3}' | awk -F '.' '{print $1}'</b><br />11<br /></p><p>Obtivemos o resultado sendo 11, então execute o configure para essa versão do postgresql-devel, deste modo:</p><p># <b>./configure --prefix=/usr --with-postgres=/usr/pgsql-11/.</b></p><p>Entre novamente no Menu Select do Asterisk Module and Build Option Selection:</p><p># <b>make menuselect</b></p><p>E observe que agora temos os modulos ativos para serem copilados, veja as figuras a seguir:</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDhlAy2uPFo78lmRNLXJh77izE0XqDpVlxiiae0ZrxNO1Kh3QyIHbPpCbc1KqKD5IvlxEZBX2CPvQpExVeFdg6i47WWna8DvGYzOT2K5WjqRnNXP79oGKFgZ03PSXyXCGqeFqg5GCad3lWyLyKxhOhzYsq30Dc04M6SpUmakKSpSMrAh0q01BE3ZB/s829/2022-09-15_14-21_1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="330" data-original-width="829" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDhlAy2uPFo78lmRNLXJh77izE0XqDpVlxiiae0ZrxNO1Kh3QyIHbPpCbc1KqKD5IvlxEZBX2CPvQpExVeFdg6i47WWna8DvGYzOT2K5WjqRnNXP79oGKFgZ03PSXyXCGqeFqg5GCad3lWyLyKxhOhzYsq30Dc04M6SpUmakKSpSMrAh0q01BE3ZB/w640-h254/2022-09-15_14-21_1.png" width="640" /> </a></div><div class="separator" style="clear: both; text-align: center;"> </div><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jRSc6IUVzbXJGEZe07LTrNO0lvNICx3rWNCCsyTcXv5iyUfsBEIR6nr6UfrVxfqk36uVEB1Q74lsjznJiuebbpE4mG1dVQx0E2eoFK_QGZqMNivrOEYYVPzLEjAQKQZKplXsaEXUAPA-mw18s7WZncZQXKZEV6tqg1ru-teBNv49r04d5Hb0pr5h/s835/2022-09-15_14-21.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="835" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jRSc6IUVzbXJGEZe07LTrNO0lvNICx3rWNCCsyTcXv5iyUfsBEIR6nr6UfrVxfqk36uVEB1Q74lsjznJiuebbpE4mG1dVQx0E2eoFK_QGZqMNivrOEYYVPzLEjAQKQZKplXsaEXUAPA-mw18s7WZncZQXKZEV6tqg1ru-teBNv49r04d5Hb0pr5h/w640-h202/2022-09-15_14-21.png" width="640" /></a></div><br /></div><div class="separator" style="clear: both; text-align: justify;">Agora para compilar este Build com segurança, devemos parar o Asterisk® SCF™, para isso execute os próximos passos:</div><div class="separator" style="clear: both; text-align: justify;"> </div><div class="separator" style="clear: both; text-align: justify;"># systemctl stop asterisk.service</div><div class="separator" style="clear: both; text-align: justify;"> </div><div class="separator" style="clear: both; text-align: justify;"># make -j4</div><div class="separator" style="clear: both; text-align: justify;"> </div><div class="separator" style="clear: both; text-align: justify;"># make install </div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"># ldconfig</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;"># systemctl start asterisk.service</div><div class="separator" style="clear: both; text-align: justify;"> </div><div class="separator" style="clear: both; text-align: justify;"># rasterisk -vvvvgci</div><div class="separator" style="clear: both; text-align: justify;"> </div><div class="separator" style="clear: both; text-align: justify;">Na console do Asterisk® SCF™ valide se os módulos já estão ativos, caso não estejam suba eles. Lembrando que para que os módulos sejam carregados automaticamente é necessário em <span style="color: red;"><b>modulos.conf</b></span> a opção autoload do modules estar ativa para <span style="color: red;"><b>yes</b></span>:</div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">[modules]</div><div class="separator" style="clear: both; text-align: justify;">autoload=yes<br /><br /></div><p>*CLI> <b>module show like cel_pgsql.so</b> <br />Module Description Use Count Status Support Level<br />cel_pgsql.so PostgreSQL CEL Backend 0 Running extended<br />1 modules loaded<br /></p><p>*CLI> <b>module show like cdr_pgsql.so</b> <br />Module Description Use Count Status Support Level<br />cdr_pgsql.so PostgreSQL CDR Backend 0 Running extended<br />1 modules loaded</p><p>Pronto, a partir deste ponto, a sua comunicação com o banco de dados PostgreSQL via conector nativo do Asterisk® SCF™ funcionando.Tire a prova de conexão com o CORE/PBX:</p><p>*CLI> <b>cel show status </b><br />CEL Logging: Enabled<br />CEL Tracking Event: HANGUP<br />CEL Tracking Event: ANSWER<br />CEL Tracking Event: BRIDGE_ENTER<br />CEL Tracking Event: ATTENDEDTRANSFER<br />CEL Tracking Event: USER_DEFINED<br />CEL Tracking Event: LINKEDID_END<br />CEL Event Subscriber: CEL Custom CSV Logging<br />CEL Event Subscriber: ODBC CEL backend<br /><b>CEL Event Subscriber: CEL PGSQL backend</b><br /></p><p>Se executar o comando cdr show status, vais ver que também está tudo funcional entre o modulo e CORE/PBX.</p><p>Lembrando que não é mais recomendado usar o modulo nativo para MySQL e PostgreSQL. É altamente recomendado usar a conexão com Banco de Dados via UnixODBC.</p><div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="color: black;"><span style="font-family: inherit;"><b style="background: white none repeat scroll 0px 0px; border: 0px none; box-sizing: border-box; font-size: 16px; outline: currentcolor none 0px; padding: 0px; text-align: left; transition: all 0.3s ease 0s; vertical-align: baseline;">Thats All FOLKS!</b><span style="background: white none repeat scroll 0px 0px; border: 0px none; font-size: 16px; outline: currentcolor none 0px; padding: 0px; text-align: left; transition: all 0.3s ease 0s; vertical-align: baseline;"> (Isso é tudo, pessoal!)</span></span></span></div><p></p><p><br /></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-87056995525219844552022-08-03T13:04:00.004-03:002022-08-03T13:07:11.946-03:00Asterisk® SCF™ Remoção total para reinstalação - Metodo Recomendado.<p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkkTAg44PYno_Dbof76_ub1-n4whwKZEyfxXw8U4oiEBO3lfMLrixkeXXrfbNkTd8-txv8gAwsLRtPnH42soe_TIPig_Uq5-XOTDX455TOBUKm3A-9ilsILeDStYQPV9gjOVjZX2WXY7WEwYxdwVLYqu4ibDyp1eBfhB44PGvqNBxUUWAHOLjwIu0q/s397/Asterisk_SCF.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="150" data-original-width="397" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkkTAg44PYno_Dbof76_ub1-n4whwKZEyfxXw8U4oiEBO3lfMLrixkeXXrfbNkTd8-txv8gAwsLRtPnH42soe_TIPig_Uq5-XOTDX455TOBUKm3A-9ilsILeDStYQPV9gjOVjZX2WXY7WEwYxdwVLYqu4ibDyp1eBfhB44PGvqNBxUUWAHOLjwIu0q/s16000/Asterisk_SCF.png" /></a></div>Imagine a seguinte situação, você por algum motivo necessita de fazer um reinstalação do Asterisk® SCF™ em seu servidor, muitas vezes vejo as pessoas apenas indo na pasta do source, e executando todos os procedimentos de instalação novamente, as vezes nem se preocupam em parar o Asterisk® SCF™. <p></p><p style="text-align: justify;">Bem isso é totalmente errado, e pode trazer consequências prejudiciais a sua produção, aqui vou demonstrar como fazer isso de maneira segura e correta. </p><p style="text-align: justify;">E porque eu necessito de reinstalar o Asterisk® SCF™? Bom no meu caso isso ocorre quando tenho que desenvolver algo que tenho que utilizar uma versão antiga do Asterisk® SCF™, tipo um downgrade... </p><p style="text-align: justify;">Nesse exemplo, estou removendo um Asterisk® SCF™ versão 16.28.0-rc1, e instalando uma versão 13.35.0 para um projeto especifico.</p><p style="text-align: justify;">Claro que os procedimentos a seguir, também pode ser utilizado para quando quiser remover por completo o Asterisk® SCF™, a ponto de não querer mais usar ele em um servidor especifico.</p><p style="text-align: justify;">Eu necessito lhe informar que você deve fazer backup do seu projeto atual? Ok! Então faça um backup da pasta /etc/asteirsk/ em algum lugar, assim como /var/lib/asterisk/. </p><p style="text-align: justify;">E vamos nessa! <br /></p><pre class="chroma" style="-webkit-text-stroke-width: 0px; background: rgb(248, 248, 248) none repeat scroll 0% 0%; box-sizing: border-box; color: #212529; display: block; font-size: 13.125px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 1rem; margin-top: 0px; orphans: 2; overflow: auto; padding: 10px 75px 10px 20px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;" tabindex="0"><span style="font-family: georgia;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">killall -9 safe_asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">killall -9 asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">systemctl disable asterisk.service
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /etc/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /var/log/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /var/lib/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /var/lib64/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /var/spool/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /usr/lib/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">rm -rf /usr/lib64/asterisk
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">reboot</span></span></code></span></pre><p style="text-align: justify;"></p><p style="text-align: justify;"><b>OBS</b>: Dependendo da instalação, <b><span style="color: red;">systemctl disable asterisk.service</span></b>, pode não estar habilitado ou foi configurado para ser executado via <span style="color: red;"><b>@reboot cron</b></span>, e não por <span style="color: red;"><b>daemon service</b></span>. <br /></p><p>Agora pode baixar o pacote do Asterisk® SCF™, e refazer a instalação, estou usando o <a href="https://rockylinux.org/pt_BR/" target="_blank">Rock Linux™</a> e confesso que estou muito feliz com essa distribuição baseada no Sistema Operacional <a href="https://www.gnu.org/gnu/linux-and-gnu.pt-br.html" target="_blank">GNU/Linux</a>. </p><pre class="chroma" style="-webkit-text-stroke-width: 0px; background: rgb(248, 248, 248) none repeat scroll 0% 0%; box-sizing: border-box; color: #212529; display: block; font-size: 13.125px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 1rem; margin-top: 0px; orphans: 2; overflow: auto; padding: 10px 75px 10px 20px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;" tabindex="0"><span style="font-family: georgia;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">cd /usr/local/src/
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">wget https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-13.35.0.tar.gz
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">tar -xvf asterisk-13.35.0.tar.gz
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">cd asterisk-13.35.0/
</span></span></code><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">./contrib/scripts/install_prereq install</span></span></code>
</span></span></code><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">./configure --libdir=/usr/lib64 --with-jansson-bundled=yes </span></span></code></span></span></code><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">--with-pjproject-bundled=yes</span></span></code>
</span></span></code><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">make menuselect</span></span></code>
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">make -j4
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">make install
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">make basic-pbx
</span></span><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">make config</span></span></code></span></pre><p></p><p style="text-align: justify;">Pronto, agora você está com uma nova versão totalmente limpa em seu servidor. Em <span style="color: red;"><b>make menuselect</b></span>, corrija todos os pontos que sejam importantes para sua solução. </p><p style="text-align: justify;">Um outro ponto que deve ser tomado em conta, é que para Asterisk® SCF™ até a versão 14, devemos usar o comando:</p><pre class="chroma" style="-webkit-text-stroke-width: 0px; background: rgb(248, 248, 248) none repeat scroll 0% 0%; box-sizing: border-box; color: #212529; display: block; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: 13.125px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 1rem; margin-top: 0px; orphans: 2; overflow: auto; padding: 10px 75px 10px 20px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;" tabindex="0"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">./configure --libdir=/usr/lib64 --with-jansson-bundled=yes </span></span></code></span></span></code><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">--with-pjproject-bundled=yes</span></span></code>
</span></span></code></pre><p style="text-align: justify;"></p><div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; outline: currentcolor none 0px; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; transition: all 0.3s ease 0s; vertical-align: baseline; white-space: normal; word-spacing: 0px;"><div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="color: black;"><span style="font-family: inherit;">Para versões superiores a versão 15, deve ser assim:</span></span></div><div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="color: black;"><span style="font-family: inherit;"> </span></span></div><div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><pre class="chroma" style="-webkit-text-stroke-width: 0px; background: rgb(248, 248, 248) none repeat scroll 0% 0%; box-sizing: border-box; color: #212529; display: block; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: 13.125px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 1rem; margin-top: 0px; orphans: 2; overflow: auto; padding: 10px 75px 10px 20px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px;" tabindex="0"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;"><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">./configure --libdir=/usr/lib64 --with-jansson-bundled=yes</span></span></code></span></span></code><code class="language-fallback" data-lang="fallback" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border-radius: 3px; border: 0px none; box-sizing: border-box; color: #222222; font-family: SFMono-Regular, Menlo, Monaco, Consolas, "liberation mono", "courier new", monospace; font-size: inherit; overflow-wrap: break-word; padding: 0px; word-break: normal;"><span class="line" style="box-sizing: border-box;"><span class="cl" style="box-sizing: border-box;">
</span></span></code></pre><span style="color: black;"><span style="font-family: inherit;"><b style="background: white none repeat scroll 0px 0px; border: 0px none; box-sizing: border-box; font-size: 16px; outline: currentcolor none 0px; padding: 0px; text-align: left; transition: all 0.3s ease 0s; vertical-align: baseline;"> </b></span></span></div><div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="color: black;"><span style="font-family: inherit;"><b style="background: white none repeat scroll 0px 0px; border: 0px none; box-sizing: border-box; font-size: 16px; outline: currentcolor none 0px; padding: 0px; text-align: left; transition: all 0.3s ease 0s; vertical-align: baseline;"> </b></span></span></div><div style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="color: black;"><span style="font-family: inherit;"><b style="background: white none repeat scroll 0px 0px; border: 0px none; box-sizing: border-box; font-size: 16px; outline: currentcolor none 0px; padding: 0px; text-align: left; transition: all 0.3s ease 0s; vertical-align: baseline;">Thats All FOLKS!</b><span style="background: white none repeat scroll 0px 0px; border: 0px none; font-size: 16px; outline: currentcolor none 0px; padding: 0px; text-align: left; transition: all 0.3s ease 0s; vertical-align: baseline;"> (Isso é tudo, pessoal!)</span></span></span></div></div><br class="Apple-interchange-newline" /><br /><p style="text-align: justify;"></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-46587646510102551292022-06-04T22:30:00.015-03:002022-06-06T16:13:32.787-03:00Capítulo 22. Agrupamento (Clustering).<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTezuEYYjsqbCH0AInEUKH6TMBkb4s5UWsomFso0LqhiQDurH3z-FrMGupEoh9qMH3EJEkFv9b4At3i7UEolDTALWuWVf_Sx3tJvcHyXoTdSHD4Cmi5WB64LjYpB_SgnM4Xo90jgUMIx9OqA5aTakyuC5Hq7V4q73bq9pNwoBnr0O9nlFVexu05C6/s320/architecture-asterisk.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="320" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgoTezuEYYjsqbCH0AInEUKH6TMBkb4s5UWsomFso0LqhiQDurH3z-FrMGupEoh9qMH3EJEkFv9b4At3i7UEolDTALWuWVf_Sx3tJvcHyXoTdSHD4Cmi5WB64LjYpB_SgnM4Xo90jgUMIx9OqA5aTakyuC5Hq7V4q73bq9pNwoBnr0O9nlFVexu05C6/s1600/architecture-asterisk.png" width="320" /></a></div><p></p><p><span style="font-family: georgia;">Você pode não conseguir comer um cacho de uva de uma única vez, mas é muito fácil comer uma a uma.</span></p><p style="text-align: center;"><span style="font-family: georgia;"><span style="font-size: x-small;">- Jacques Roumain - Escritor, Político e Defensor do Marxismo Haitiano. 1907 ~ 1944, Porto Príncipe/Haiti.</span></span></p><p style="text-align: center;"><span style="font-family: georgia; text-align: justify;">A palavra agrupamento (</span><b style="font-family: georgia; text-align: justify;">Clustering</b><span style="font-family: georgia; text-align: justify;">) pode significar coisas diferentes para pessoas diferentes. Algumas pessoas diriam que o </span><b style="font-family: georgia; text-align: justify;">clustering</b><span style="font-family: georgia; text-align: justify;"> é simplesmente ter um sistema replicado em espera disponível para ser ativado quando o sistema primário falhar. Para outros, </span><b style="font-family: georgia; text-align: justify;">clustering</b><span style="font-family: georgia; text-align: justify;"> é ter vários sistemas trabalhando em conjunto, com dados replicados, totalmente redundantes e infinitamente expansíveis. Para a maioria das pessoas, provavelmente está em algum lugar entre esses dois extremos.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">Este capítulo do livro <span style="background-color: white; text-align: center;"> </span><em style="background-color: white; font-weight: bold; text-align: center;">Asterisk: The Definitive Guide</em><span style="background-color: white; text-align: center;"><b> (3nd Edition for Asterisk 1.8), escrito por Leif Madsen, Jim Van Meggelen, e Russell Bryant</b>. é explorado as possibilidades de clustering que existem com </span><span style="background-color: white; font-weight: bold; text-align: left;">Asterisk</span><span style="background-color: white; text-align: left;">® </span><span style="background-color: white; font-weight: bold; text-align: left;">SCF</span><span style="background-color: white; text-align: left;">™ em alto nível, dando a você o conhecimento e direção para começar a planejar seu sistema no futuro. Como exemplos, discutiremos algumas das ferramentas que usamos em nossa próprias grandes implantações; embora não haja uma única maneira de construir um Cluster de </span><span style="background-color: white; font-weight: bold; text-align: left;">Asterisk</span><span style="background-color: white; text-align: left;">® </span><span style="background-color: white; font-weight: bold; text-align: left;">SCF</span><span style="background-color: white; text-align: left;">™, as topologias que abordamos provaram ser confiáveis ao longo dos anos.</span></span></p><p style="text-align: justify;"><span style="font-family: georgia;">Nossos exemplos se aprofundarão na construção de um <b>call center</b> distribuído, uma das razões mais populares para construir um sistema distribuído. Em alguns casos, isso é necessário simplesmente porque uma empresa possui escritórios satélites que deseja vincular ao sistema primário. Para outros, o objetivo é integrar funcionários remotos ou poder lidar com um grande número de extensões. Começaremos analisando um sistema Softswitch PBX IP simples e tradicional e veremos como esse sistema pode eventualmente se transformar em algo muito maior.</span></p><h2 style="text-align: justify;"><span style="font-family: georgia; font-size: small;">Call Centers Tradicionais</span></h2><p style="text-align: justify;"><span style="font-family: georgia;">A maioria dos sistemas implantados antes do ano 2000 será bastante semelhante. Eles envolverão um conjunto de linhas telefônicas entregues por meio de uma PRI (PSTN) ou por meio de um conjunto de linhas analógicas (POTS), que se conectam a um sistema de PABX (Central de Comutação, Hardware) que entrega chamadas para aparelhos que provavelmente são proprietários (Cisco, Avaya, Intelbras, etc.) dos sistemas implantados. Esses sistemas provavelmente fornecerão um conjunto básico de funções, com funções extras, como correio de voz e conferência, sendo fornecidas por meio de módulos externos que pode custar milhares de dólares. Essa topologia é ilustrada na <b>Figura 22.1</b>, "Central de Atendimento Tradicional".</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHK4Wb5w3cMbSZqfjQGiBSoTk3qAxcTFYytLV6bHl73P2_gZTl7WbSlFOXctpHQsA_7jXv9KmWIZK5-FZpWwaoWKz8Cs4yvXKOI_pW9f6edTSqiTXM5wnLWbaWDY7ZWlxb1LgEZ5TALXqpdXC_84I-LZArasmqVEfgnadokZQmFJAY75J0zghn2Btr/s320/adg3_2201.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: georgia;"><img border="0" data-original-height="157" data-original-width="320" height="196" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHK4Wb5w3cMbSZqfjQGiBSoTk3qAxcTFYytLV6bHl73P2_gZTl7WbSlFOXctpHQsA_7jXv9KmWIZK5-FZpWwaoWKz8Cs4yvXKOI_pW9f6edTSqiTXM5wnLWbaWDY7ZWlxb1LgEZ5TALXqpdXC_84I-LZArasmqVEfgnadokZQmFJAY75J0zghn2Btr/w400-h196/adg3_2201.png" width="400" /></span></a></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; text-align: left;"><span style="font-family: georgia; font-size: x-small;">Figura 22.1. Central de Atendimento Tradicional</span></span></div><div><span style="font-family: georgia;"><br /></span></div><div style="text-align: justify;"><span style="font-family: georgia;">Esses sistemas utilizarão um conjunto de regras para entregar chamadas aos agentes por meio das regras padrão de distribuição automática de chamadas (DAC/ACD) e terão pouca flexibilidade. Provavelmente será impossível ou caro adicionar agentes remotos, pois as chamadas precisariam ser entregues pela PSTN, que utiliza duas linhas telefônicas: um apara o chamador de entrada da fila e outra para ser entregue ao agente remoto (na maioria dos casos, os agentes precisam apenas residir no mesmo local físico que o próprio PABX).</span></div><div style="text-align: justify;"><span style="font-family: georgia;">No entanto, esses sistemas telefônicos tradicionais estão sendo gradualmente eliminados, à medida que mais pessoas começam a clamar pelos recursos que o VoIP traz para a mesa. E mesmo para sistema que não usarão VoIP, soluções como o <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ trazem recursos que antes custavam milhares de dólares como parte incluída do software. </span></span></div><div style="text-align: justify;"><span style="font-family: georgia;"><br /></span></div><div><div style="text-align: justify;"><span style="font-family: georgia;">É claro que, com o dinheiro investido em hardware caro em sistemas tradicionais, é natural que as organizações com esses sistemas queiram obter o máximo de uso possível deles. Além disso, simplesmente trocar um sistema existente não é apenas caro (custos de fiação para telefones SIP, custos de substituição de aparelhos proprietários, etc.), mas pode ser invasivo para o Call Center, especialmente se ele operar continuamente.</span></div><div style="text-align: justify;"><span style="font-family: georgia;"><br /></span></div><div style="text-align: justify;"><span style="font-family: georgia;">Talvez, no entanto, tenha chegado a hora de expandir e o sistema existente não consiga mais acompanhar o número de linhas necessárias e o número de extensões necessários para acompanhar a demanda. Nesse caso, pode ser vantajoso olhar para um sistema híbrido, onde hardware existente continua a ser usado, mas novas extensões e recursos são adicionados ao sistema usando o <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™.</span></span></div><div><span style="font-family: georgia;"><br /></span></div><div><span style="font-family: georgia;">Sistemas Híbridos</span></div><div><span style="font-family: georgia;"><br /></span></div><div style="text-align: justify;"><span style="font-family: georgia;">Um sistema de telefonia híbrido (figura 22.2, "Sistema Híbrido Remoto) contém a mesma funcionalidade e hardware de um sistema de telefonia tradicional, com exceção de outro sistema, como o <span style="background-color: white; font-weight: bold; text-align: justify;">Asterisk</span><span style="background-color: white; text-align: justify;">® </span><span style="background-color: white; font-weight: bold; text-align: justify;">SCF</span><span style="background-color: white; text-align: justify;">™, que está conectado a ele, fornecendo capacidade e funcionalidade adicionais. Adicionar o </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ a um sistema tradicional normalmente é feito através de uma conexão PRI (PSTN). Do ponto de vista do sistema tradicional, o </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ se parecerá com outra companhia telefônica (Escritório Central ou Operadora VoIP - ITSP, Internet Telephony Service Provider). Dependendo da forma como o sistema tradicional opera e dos serviços disponíveis para ou da ITSP, o </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ entregará chamadas do PRI (PSTN) através dele mesmo e para o PABX existente, ou o PABX existente enviará chamada pela conexão PRI para o </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™, que em seguida, direciona as chamadas para os novos terminais (Telefones IPs) e para a própria ITSP, criando ai, uma Rota de Menor Custo (Least Cost Routing).</span><span style="background-color: white;"> </span><span style="background-color: white;"> </span></span></div><div><span style="font-family: georgia;"><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY4yEpvIdCfqM_UJxILjC_aZvs5qHUIdoYzk-n1gKdzl4WwzgHzGZAKXFICpG3e0X158RnxPA8rqVDUuOVnnU0CLzkrVNizzQWaRXEMAZhI9Rd9EkMniNMED0zSg_Tko8_YHghIG-aaKRqSHMjjIKxUL3Y51ykUq4eJ0IYZwgombp6ZvnuLg-CRn9H/s453/adg3_2202.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: georgia;"><img border="0" data-original-height="453" data-original-width="434" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhY4yEpvIdCfqM_UJxILjC_aZvs5qHUIdoYzk-n1gKdzl4WwzgHzGZAKXFICpG3e0X158RnxPA8rqVDUuOVnnU0CLzkrVNizzQWaRXEMAZhI9Rd9EkMniNMED0zSg_Tko8_YHghIG-aaKRqSHMjjIKxUL3Y51ykUq4eJ0IYZwgombp6ZvnuLg-CRn9H/w384-h400/adg3_2202.png" width="384" /></span></a></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; font-family: georgia; font-size: small;">Figura 22.2. </span><span style="font-family: georgia; font-size: small; text-align: justify;">Sistema Híbrido Remoto</span></div><p style="text-align: justify;"><span style="font-family: georgia;">Com o <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ no cenário (circuito), a funcionalidade pode ser movida aos poucos do sistema PABX existente para o </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™, que pode assumir um papel maior e comandar mais do sistema ao longo do tempo. Eventualmente, o sistema de PABX existente pode simplesmente ser usado como um método para enviar chamadas para os aparelhos existentes (analógicos, POTS), nas estações dos agentes, com aqueles sendo eliminados ao longo do tempo e substituídos por telefones baseados em SIP, à medida que a fiação é instalada e os telefones IPs são comprados.</span></span></p><p style="text-align: justify;"><span style="font-family: georgia;">Ao adicionar o <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ ao circuito existente, ganhamos um novo conjunto de funcionalidades e vantagens, como:</span></span></p><p style="text-align: justify;"></p><ul><li><span style="font-family: georgia;"><span style="background-color: white;">Suporte para funcionários remotos: as chamadas são entregues pela conexão de Internet Existentes, para Gateways IPs, Telefones IPs, Softphones em Desktops, Tablets e até mesmo em Smartphones;</span></span></li><li><span style="font-family: georgia;"><span style="background-color: white;">Funcionalidades como conferencia e correio de voz (com a possibilidade de os usuários serem notificados por e-mail de novas mensagens);</span></span></li><li><span style="font-family: georgia;"><span style="background-color: white;">Linhas telefônicas expandidas usando VoIP e redução de custos de longa distancia (DDD e DDI)</span></span></li></ul><p></p><p style="text-align: justify;"><span style="font-family: georgia;">Tal sistema ainda sofre de algumas desvantagens, pois todo o hardware precisa residir na instalação do Call Center, e ainda estamos restritos a usar hardware (relativamente) caro no sistema <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ para conexão ao PABX tradicional. No entanto, estamos indo na direção certa e, com o sistema </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ no circuito, podemos iniciar a migração ao longo do tempo, limitando as interrupções nos negócios e adotado uma abordagem mais gradual para treinar os usuários.</span></span></p><h3 style="text-align: justify;"><span style="font-family: georgia; font-size: small;"><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ Puro, Não Distribuído (Nondistributed)</span></span></h3><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">O próximo passo em nossa jornada é o sistema </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ Puro (Puro que dizer, somente a linha de comando, se nenhuma interface gráfica, lembrando que a interface gráfica oficial do projeto Sangoma Digium é o FreePBX e não mais o AsteriskNow). Neste sistema, migramos com sucesso do sistema PBX existente e agora estamos lidando com todas as funcionalidades através do </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™. Nosso PRI (PSTN) existente foi anexado ao </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ e expandimos nossa capacidade integrando um Provedor de Telefonia Pela Internet (ITSP) em nosso sistema. Todos os agentes/usuários agora estão usando telefones SIP (Telefones IP, e Softphones) e até adicionam0os vários funcionários remotos. Está topologia é ilustrada na Figura 22.3, "</span><span style="background-color: white;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white;">SCF</span><span style="background-color: white;">™ Puro, Não Distribuído (Nondistributed)".</span></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0U5k5Z-AgejEF3RGNq3V3mv8ople94DoUo4mwMxk6JdSA7Cy1DLm_grnp4xkIQ23WFIu7FGrn08bI5wsvTwRXhk0BfOB_uR8IME6OuWUqvH6qDwjBx9fnloRVqRPWD0yzNC72VdJAHz1OMCjwQxUcWvzKSj_QmGsUOQnDOt5utmv6Doy8fiGHWRd1/s463/adg3_2203.png" style="margin-left: 1em; margin-right: 1em;"><span style="font-family: georgia;"><img border="0" data-original-height="463" data-original-width="447" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0U5k5Z-AgejEF3RGNq3V3mv8ople94DoUo4mwMxk6JdSA7Cy1DLm_grnp4xkIQ23WFIu7FGrn08bI5wsvTwRXhk0BfOB_uR8IME6OuWUqvH6qDwjBx9fnloRVqRPWD0yzNC72VdJAHz1OMCjwQxUcWvzKSj_QmGsUOQnDOt5utmv6Doy8fiGHWRd1/w386-h400/adg3_2203.png" width="386" /></span></a></div><p style="text-align: center;"><span style="font-family: georgia; font-size: x-small;"><span style="background-color: white; text-align: left;">Figura 22.3. </span><span style="background-color: white;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white;">SCF</span><span style="background-color: white;">™ Puro, Não Distribuído (Nondistributed)</span></span></p><p style="text-align: justify;"><span style="font-family: georgia;">Funcionários remotos podem ser uma grande vantagem para uma empresa. Permitir que seu trabalho em locais remotos (Home Office, P. Ex.) não apenas aumenta o moral dos funcionários, aliviando o fardo de uma viagem potencialmente longa, mas também permite que os funcionários trabalhem em um ambiente em que se sintam confortáveis, o que pode torná-los mais produtivos. Além disso, o gerente do Call Center não tem menos controle sobre as estatísticas dos funcionários; suas chamadas ainda podem ser monitoradas para fins de treinamento, e os dados estatísticos coletados não parecem diferentes para o gerente do que para os funcionários que residem na instalação.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">Uma vantagem mensurável para a empresa é a redução na quantidade de hardware necessária a ser comprada para cada funcionário. Se os agentes puderem utilizar seus sistema de computador, redes elétricas e conexões de Internet existentes, a empresa poderá economizar uma quantia significativa de dinheiro apoiando funcionários remotos. Além disso, esses funcionários podem estar localizados em todo o mundo, para expandir o número de horas que seus agentes estão disponíveis, permitindo que você atenda a mais fusos horários. </span></p><p style="text-align: justify;"><span style="font-family: georgia;">A utilização deste sistema é simples e eficiente, mas à medida que a empresa cresce, o sistema pode chagar a um problema de capacidade.</span></p><h3 style="text-align: justify;"><span style="font-family: georgia; font-size: small;"><span style="background-color: white;">Integração do Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white;">SCF</span><span style="background-color: white;">™ Puro ao Banco de dados.</span></span></h3><p style="text-align: justify;"><span style="font-family: georgia;">Integrar o <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™</span><span style="background-color: white;"> com um banco de dados pode adicionar muitas funcionalidades ao seu sistema. Além disso, ele fornece uma maneira de construir utilitários de configuração baseados na WEB para facilitar a manutenção de um sistema </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™. Além disso, permite acesso instantâneo a informações do Dialplan e outras partes do sistema do </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™.</span></span></p><h3 style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia; font-size: small;">Banco de Dados Único</span></span></h3><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">Adicionar integração de banco de dados ao </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ (Figura 22.4 "Integração de Banco de Dados ao </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™, Banco de Dados Único") é uma maneira poderosa de obter acesso a informações que podem ser manipuladas por outros meios. Por exemplo, podemos ler informações sobre as extensões e dispositivos no sistema de um banco de dados usando a Arquitetura </span><span style="background-color: white;">Realtime </span><span style="background-color: white;">Asterisk - ARA, e podemos modificar as informações armazenadas no banco de dados por meio de um sistema externo, como uma pagina da Web (GUI Interface). </span></span></p><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">A integração com o banco de dados adiciona uma camada entre o </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ e a Interface Web com a qual o Web Designer está familiarizado e permite a manipulação de dados de uma forma que não requer nenhum conjunto de habilidades adicionais. O conhecimento do próprio </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ é deixado para o administrador do </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™, e o desenvolvedor Web pode trabalhar alegremente com ferramentas com as quais está familiarizado.</span></span></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;"></span></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: georgia;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o2_jg_JUAIo1JXujQAflP56YDR9xVaEKoum9OhBsXxC750dxKcg1YlgEOmB26x7TDZOnoiGHJkbCp3IhOXpSOuq3HHGekMkzbcAPgHanGroEdfgDBQSJheDQWG2c1jilTLzd5emNHJ5FUVXU77PLGMqUt4kkDVpJoa4kmaGod79HZlDizihsRKiZ/s529/adg3_2204.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="511" data-original-width="529" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9o2_jg_JUAIo1JXujQAflP56YDR9xVaEKoum9OhBsXxC750dxKcg1YlgEOmB26x7TDZOnoiGHJkbCp3IhOXpSOuq3HHGekMkzbcAPgHanGroEdfgDBQSJheDQWG2c1jilTLzd5emNHJ5FUVXU77PLGMqUt4kkDVpJoa4kmaGod79HZlDizihsRKiZ/w400-h386/adg3_2204.png" width="400" /></a></span></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; font-family: georgia; font-size: small; text-align: left;">Figura 22.4. </span><span style="background-color: white; font-family: georgia; font-size: small;">Integração de Banco de Dados ao </span><span style="background-color: white; font-family: georgia; font-size: small; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia; font-size: small;">® </span><span style="background-color: white; font-family: georgia; font-size: small; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia; font-size: small;">™, Banco de Dados Único</span></div><span style="background-color: white;"><span style="font-family: georgia;"><p style="text-align: justify;">Claro, isso torna o sistema <span style="font-weight: bold;">Asterisk</span>® <span style="font-weight: bold;">SCF</span><span style="font-family: georgia;">™ um pouco mais complexo de construir, mas a integração com um banco de dados via <b>ODBC</b> adiciona todos os tipos de possibilidades (como o hot-desking). O <b><span style="color: red;">FUNC_ODBC</span></b> é uma ferramenta poderosa para o administrador do </span><span style="font-weight: bold;">Asterisk</span>® <span style="font-weight: bold;">SCF</span><span style="font-family: georgia;">™, fornecendo a habilidade de construir um Dialplan estático usando dados de natureza dinâmica.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">Também gostamos muito do módulo <b><span style="color: red;">FUNC_CURL</span></b>, que fornece integração com serviços da Web sobre <b>HTTP</b> diretamente do Dialplan.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">Com os dados abstraídos diretamente do </span><span style="font-weight: bold;">Asterisk</span>® <span style="font-weight: bold;">SCF</span><span style="font-family: georgia;">™ agora teremos mais facilidade para avançar em direção a um sistema que está se preparando para ser agrupado (Clustered). Podemos usar algo como <b><span style="color: red;">Linux-HA</span></b> (</span><a href="http://www.linux-ha.org/wiki/Main_Page" target="_blank">http://www.linux-ha.org/wiki/Main_Page</a>) para fornecer failover automático entre os sistemas. Embora, no caso de uma falha as chamadas no sistema com falha sejam perdidas, o failover levará apenas alguns instantes (menos de um segundo) para ser detectado e o sistema aparecerá para seus usuários como imediatamente disponível novamente. Nesta configuração, como nossos dados são abstraídos fora do <span style="font-weight: bold;">Asterisk</span>® <span style="font-weight: bold;">SCF</span><span style="font-family: georgia;">™ podemos usar aplicativos como <b><span style="color: red;">UNISON</span></b> (</span><span style="background-color: transparent;"><a href="https://www.cis.upenn.edu/~bcpierce/unison/" target="_blank">https://www.cis.upenn.edu/~bcpierce/unison/</a>) ou até mesmo o <b><span style="color: red;">RSYNC</span></b> para manter os arquivos de configuração sincronizados entre os Sistemas Operacionais e o Backup do Sistema. Também podemos usar o <b><span style="color: red;">SubVersion</span></b> ou o <b><span style="color: red;">Git</span></b> para rastrear alterações nos arquivos de configuração, facilitando a reversão de alterações que não funcionam. </span></p></span></span><p></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">É claro que se nosso banco de dados desaparecer devido a uma falha do hardware ou do software, nosso sistema ficará indisponível a menos que seja programado de forma a poder funcionar sem a conexão com o banco de dados. Isso pode ser feito por meio do uso de um banco de dados local que simplesmente se atualiza periodicamente a partir do banco de dados primário, ou por meio de informações programadas diretamente no Dialplan. Na maioria dos casos, a funcionalidade do sistema neste modo será mais simples do que quando o banco de dados estava disponível, mas pelo menos o sistema não ficará totalmente inutilizável.</span></span></p><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">Uma solução melhor seria usar um banco de dados replicado, que permite que os dados gravados em um servidor de banco de dados sejam gravados em outro servidor ao mesmo tempo. O </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ pode então fazer o failover para o outro banco de dados automaticamente se o servidor primário ficar indisponível.</span></span></p><h3 style="text-align: justify;"><span style="background-color: white; font-family: georgia; font-size: small;">Banco de Dados Replicados</span></h3><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">O uso de um banco de dados replicado fornece alguma redundância no back-end para ajudar a limitar a quantidade de tempo de inatividade que os chamadores e os agentes experimentam se ocorrer uma falha no banco de dados. Uma configuração de banco de dados Mestre-Mestre é necessária para que os dados possam ser gravados em qualquer banco de dados e replicados automaticamente para o outro sistema, garantindo que tenhamos uma cópia exata dos dados em duas máquinas físicas. Outra vantagem dessa abordagem é que um único sistema não precisa mais lidar com todas as transações do bando de dados; a carga pode ser dividida entre os servidores. A Figura 22.5 "Integração de Banco de Dados do </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ com Banco de Dados Distribuído" ilustra esse cenário recomendado.</span></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; font-family: georgia;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7xWErQ2grKegBWDge-0_T35AINNpx_m0IWlcQhRCg7w7q_hL600_5OHJGyRF45HbgGJyvMWEMA3peDoc3cwxUZ5SiZh6Kk0eCJLPig4deicVmYlJEjYed9YBY7q94KRqB4iAs4_btTWG1Y9xJ8fJzS7cu1b7ZHjRP8Hxwri2TcG3q5Nrw0RkRrspx/s581/adg3_2205.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="581" height="381" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7xWErQ2grKegBWDge-0_T35AINNpx_m0IWlcQhRCg7w7q_hL600_5OHJGyRF45HbgGJyvMWEMA3peDoc3cwxUZ5SiZh6Kk0eCJLPig4deicVmYlJEjYed9YBY7q94KRqB4iAs4_btTWG1Y9xJ8fJzS7cu1b7ZHjRP8Hxwri2TcG3q5Nrw0RkRrspx/w400-h381/adg3_2205.png" width="400" /></a></span></div><span style="background-color: white; font-family: georgia;"><div style="text-align: center;"><span style="font-size: x-small;"><span style="font-family: georgia;">Figura 22.5 Integração de Banco de Dados do </span><span style="font-weight: bold;">Asterisk</span>® <span style="font-weight: bold;">SCF</span><span style="font-family: georgia;">™ com Banco de Dados Distribuído</span></span></div></span><p></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Já utilizamos em nossos cenários a replicação <b><span style="color: red;">Mestre-Mestre</span></b> do <b><span style="color: red;">MySQL</span></b> antes (agora usamos o <span style="color: red;"><b>PostgreSQL</b></span>) e funciona muito bem. Não realizamos o mesmo cenário com <b><span style="color: red;">MariaDB</span></b>, logo não temos como assegurar o comportamento. Também quero dizer que não é difícil de configurar, e existem vários tutoriais na Internet. Outros sistemas de banco de dados provavelmente também conterão essa funcionalidade, especialmente se você estiver usando um sistema comercial com o <b><span style="color: red;">Oracle</span></b> ou <b><span style="color: red;">MS SQL</span></b>.</span></span></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Failover pode ser feito nativamente no </span></span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™, pois res_odbc.so e func_odbc.so contêm opções de configuração que permitem especificar vários bancos de dados. Em res_odbc.so, você pode especificar a ordem preferencial para conexões de banco de dados em caso de falha. Em fun_odbc.so, você pode até especificar servidores diferentes para ler e gravar dados por meio de funções no Dialplan que você cria. Toda essa flexibilidade permite que você forneça um sistema que funcione bem para o seu negócio.</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Programas externos também podem ser usados para controlar o Failover entre sistemas. O aplicativo <b><span style="color: red;">PEN</span></b> (<a href="http://siag.nu/pen/" target="_blank">http://siag.nu/pen/</a>) é um balanceador de carga para aplicativos TCP simples, como <b>HTTP</b> ou <b>SMTP</b>, que permite que vários servidores apareçam como um. Isso significa que o </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ só precisa ser configurado para se conectar a um único endereço IP (ou hostname); o aplicativo <b><span style="color: red;">PEN </span></b>cuidará de controlar qual servidor será uasdo para cada solicitação.</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"></span></p><h3 style="text-align: justify;"><span style="font-family: georgia; font-size: small;"><span style="background-color: white;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white;">SCF</span><span style="background-color: white;">™ Puro e Estados de Dispositivos </span>Distribuído</span></h3><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Os estados do dispositivo no </span></span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ são importantes tanto do ponto de vista do software (o </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ pode precisar saber o estado de um dispositivo ou da linha em um dispositivo para saber se uma chamada pode ser feita para ele) quanto do ponto de vista do usuário (P. Ex., uma luz (BFL/HINT) pode ser ligada ou desligada para indicar se uma determinada linha esta em uso ou se um agente está disponível para mais chamadas). Do ponto de vista de uma fila, é extremamente importante saber o status do dispositivo que um agente está usando para determinar se o próximo chamador da fila pode ser distribuído para esse agente. Sem o conhec9imento do estado do dispositivo, a fila simplesmente faria varias chamadas para o mesmo endpoint.</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Depois de começar a expandir seu sistema único em vários servidores (potencialmente em vários locais físicos, como escritórios remotos ou satélites), você precisará distribuir o estado do dispositivo dos terminais entre os sistemas. O tipo de implementação necessária dependerá se você os está distribuindo entre sistema na mesma <b>LAN</b> (links de baixa latência) ou em uma <b>WAN</b> (links de alta latência). </span></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Bem, vamos discutir os dois métodos de distribuição de estado dos dispositivos na sequencia: <b><span style="color: red;">OpenAIS</span></b> para links de baixa latência e <b><span style="color: red;">XMPP</span></b> para links de alta latência.</span></span></p><h3 style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Distribuindo Estados de Dispositivos em uma LAN</span></span></h3><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">A implementação do OpenAIS (<a href="http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/DeviceStates_id265044.html#DeviceStates_id265052" target="_blank">Using OpenAIS</a></span></span><span style="background-color: white;"><span style="font-family: georgia;">) foi adicionada pela primeira vez ao Asterisk na </span><b style="font-family: georgia;">branch 1.6.1</b><span style="font-family: georgia;">, para permitir a distribuição de informações de estado do dispositivo entre servidores. A adição do OpenAIS forneceu grandes possibilidades para sistemas distribuídos, pois a consciência do estado do dispositivo é um aspecto importante de tais sistemas. Os métodos anteriores exigiram o uso de <b>GROUP( )</b> e <b>GROUP_CONT( )</b> para cada canal, com essa informação consultada por <b><span style="color: red;">DUNDi</span></b></span></span><span style="background-color: white; font-family: georgia;"><span style="color: red;"><b>®</b></span></span><span style="background-color: white; font-family: georgia;">. Embora essa abordagem seja útil em alguns cenários (podemos usar essa funcionalidade para pesquisar o número de chamadas que nossos sistemas estão processando e direcionar chamadas de forma inteligente para sistemas que lidam com menos chamadas), como um mecanismo para determinar as informações de estado do dispositivo, se está presente ou não.</span></p><p style="text-align: justify;"><span style="background-color: white;"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhemnc7Zwn8bUAqjR4jXR9rirzDmJqWupGYr5N7knnOu-SaUzNynUFz-Ohyit-nKuy6JyyUCbIUy0rNOuzJQCqlOpzlh52ekuOX8O-xcLiYiH92uwp_3e6kxdiRAOWe7RtQXD3M5cSCFyotZV9mEk9Rl29CXZ3c3h5J9-Sf8ihZQmSIalJAHXXUxIkE/s706/adg3_2206.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="706" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhemnc7Zwn8bUAqjR4jXR9rirzDmJqWupGYr5N7knnOu-SaUzNynUFz-Ohyit-nKuy6JyyUCbIUy0rNOuzJQCqlOpzlh52ekuOX8O-xcLiYiH92uwp_3e6kxdiRAOWe7RtQXD3M5cSCFyotZV9mEk9Rl29CXZ3c3h5J9-Sf8ihZQmSIalJAHXXUxIkE/w400-h313/adg3_2206.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><span face="sans-serif" style="background-color: white; font-size: small;">Figura 22.6. Distribuição de Estado do Dispositivo com OpenAIS</span></div><p></p><p style="text-align: justify;"></p><div style="text-align: justify;"><span face="sans-serif">O OpenAIS nos deu a primeira implementação de um sistema que permite que o estado dos dispositivos e as indicações de mensagens em espera sejam distribuídos entre vários sistemas </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ (veja a Figura 22.6, "Distribuição de Estado de Dispositivo com OpenAIS"). A desvantagem da implementação do <b>OpenAIS</b> é que ela exige que todos os sistemas residam em links de baixa latência, o que normalmente significa que todos precisam residir no mesmo local físico, conectados ao mesmo switch. Dito isso, embora a biblioteca OpenAIS não funcione em redes fisicamente separadas, ela permite que um<b><span style="color: red;"> Queue( ) </span></b>resida em um Servidor </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ </span><span style="background-color: white;"><span style="font-family: georgia;">e seus membros da fila residam em outro Servidor </span></span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™</span><span style="background-color: white; font-family: georgia;"> (ou vários Servidores </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™</span><span style="background-color: white; font-family: georgia;">). Ele faz isso sem exigir que usemos canais locais e testemos sua disponibilidade por meio de outros métodos, limitando (ou eliminando) o número de tentativas de conexão feitas na rede e o toque de vários dispositivos.</span></div><div style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></div><div style="text-align: justify;"><span style="background-color: white; font-family: georgia;">O uso do OpenAIS tem uma vantagem, pois é relativamente fácil de configurar e começar a trabalhar. A desvantagem é que não é distribuível em locais físicos. A partir da </span><b style="font-family: georgia;">branch</b><span style="background-color: white; font-family: georgia;"> <b>1.8</b>, porém, podemos usar o XMPP para Distribuição de Estado do Dispositivo em uma rede de longa distância, como você verá na próxima seção.</span></div><span style="background-color: white;"><span style="font-family: georgia;"><br /></span></span><p></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Distribuindo Estados de Dispositivos em uma WAN</span></span></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Desde a branch 1.8 do </span></span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™, foi adicionado uma implementação que usa XMPP para distribuição de estado do dispositivo. Como o protocolo XMPP é projetado para (ou pelo menos permite) uso em redes de longa distância, agora podemos ter sistemas </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ em diferentes locais físicos, distribuindo informações de estado do dispositivo entre si (veja a Figura 22.7, "Distribuindo Estados de Dispositivos com XMPP"). Com a implementação do OpenAIS, a biblioteca seria usada em cada sistema, permitindo que eles distribuíssem informações de estado do dispositivo. No cenário <b>XMPP</b>, um servidor central (ou cluster de servidores) é usado para distribuir o estado entre todas os Servidores </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ no cluster. Atualmente, a melhor aplicação para fazer isso é o Servidor <b>Tigase XMPP</b> (<a href="https://tigase.net/" target="_blank">https://tigase.net/</a>), devido ao suporte a eventos <b>PubSub</b>. Embora outros servidores <b>XMPP</b> possam ser suportados no futuro, apenas o Tigase é conhecido por funcionar no momento. </span><span style="background-color: white; font-family: georgia;"> </span></p><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rqb4OCJ29-W4yFvUBM2J5qLs-nBcnklKP0_UM8ESg9HwhHrxxxaGrPnpV8b-C-ph8MYmu2H6ZcPCVagjAHBCgSWz0IN_3s-LxYPCga6a9UR04gWnm9GlVNRj0a7NA1EHAW8vuQa-YT5aiD5fx7t5nLo3dETXo1w3-x_DD8zHc54ob9pVFeRo0R7t/s670/adg3_2207.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="612" data-original-width="670" height="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5rqb4OCJ29-W4yFvUBM2J5qLs-nBcnklKP0_UM8ESg9HwhHrxxxaGrPnpV8b-C-ph8MYmu2H6ZcPCVagjAHBCgSWz0IN_3s-LxYPCga6a9UR04gWnm9GlVNRj0a7NA1EHAW8vuQa-YT5aiD5fx7t5nLo3dETXo1w3-x_DD8zHc54ob9pVFeRo0R7t/w400-h365/adg3_2207.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; font-family: georgia; text-align: justify;"><span style="font-size: x-small;">Figura 22.7, Distribuindo Estados de Dispositivos com XMPP</span></span></div><p style="text-align: justify;"><span style="font-family: georgia;">Com o XMPP, as filas podem ser localizadas em diferentes locais físicos e os escritórios satélites podem receber chamadas do escritório principal ou vice-versa. Isso fornece outra camada de redundância, porque se o site principal ficar offline e o ITSP for configurado de forma a fazer failover para outro escritório, as chamadas poderão ser distribuídas entre esses escritórios satélites até que o site principal volte a ficar online. Isso é bastante empolgante para muitas pessoas, pois adiciona uma camada de funcionalidade que não estava disponível anteriormente e a maior parte pode ser feita com uma configuração relativamente mínima.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">A vantagem da distribuição de estado do dispositivo com XMPP (<a href="http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/DeviceStates_id265044.html#DeviceStates_id265061" target="_blank">Using XMPP</a>), é que, é possível distribuir o estado para vários locais físicos, o que não é possível com o OpenAIS. A desvantagem é que é mais complexo de configurar (já que você precisa de um serviço externo rodando o servidor Tigase XMPP ou alternativo) do que a implementação do OpenAIS.</span></p><h3><span style="background-color: white;"><span style="font-family: georgia;">Múltiplas Filas, Múltiplos Sites</span></span></h3><p></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;">Agora, vamos ser criativos e usar as várias ferramentas que discutimos nas seções anteriores para criar uma infraestrutura de fila distribuída. A Figura 22.8, " Infraestrutura de Filas Distribuídas" ilustra um exemplo de configuração onde temos cinco servidores </span></span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ sendo liderados por outro cluster usado para distribuir/rotear as chamadas para as várias filas que configuramos. Nosso ITSP envia chamadas para o <b>clouster</b> de roteamento (que pode ser algo como <b>Kamailio</b></span><span style="background-color: white; font-family: georgia;"><b>®</b></span><span style="background-color: white; font-family: georgia;">, ou mesmo vários servidores </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ implementando <b>DUNDi</b></span><span style="background-color: white; font-family: georgia;"><b>®</b></span><span style="background-color: white; font-family: georgia;"> ou algum outro método para rotear e distribuir chamadas, P. Ex. <b>FreeSWITCH</b></span><span style="background-color: white; font-family: georgia;"><b>®</b></span><span style="background-color: white; font-family: georgia;">), que então envia as chamadas conforme apropriado para um dos três Servidores </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™ nos quais temos nossas filas configuradas. Cada servidor lida com uma fila diferente, como vendas, suporte, técnico e devoluções (apenas exemplos). Esses servidores, por sua vez, usam os agentes localizados em dois locais físicos separados. os dispositivos dos agentes são registrados em seus próprios servidores de registro local (que também podem realizar outras funcionalidades).</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Veja, estamos mostrando todos os aspectos do sistema para manter o diagrama simples, mas neste caso usaríamos o sistema de estado de dispositivo distribuído XMPP, pois estamos sugerindo que os agentes são distribuídos em vários sites físicos.</span></p><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil8zPaHeXaAlQgiGm2YQAGDXjvIs4zZYFZO3AGSuxCIHhJ3Rke0qy2nrcFQ-MxE-wFU9e58t7zJvNgzeKC09mmh-CVy8TsPY9smQlWvWUACEtDU3yNLO06SiZy4Qm6PpVIYiGd4NIstwR_08nTniaCbc63Obu4hMl1UT8kT7DtffL5hG-_sWNLtjRa/s703/adg3_2208.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="606" data-original-width="703" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil8zPaHeXaAlQgiGm2YQAGDXjvIs4zZYFZO3AGSuxCIHhJ3Rke0qy2nrcFQ-MxE-wFU9e58t7zJvNgzeKC09mmh-CVy8TsPY9smQlWvWUACEtDU3yNLO06SiZy4Qm6PpVIYiGd4NIstwR_08nTniaCbc63Obu4hMl1UT8kT7DtffL5hG-_sWNLtjRa/w400-h345/adg3_2208.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; font-family: georgia; text-align: justify;">Figura 22.8, Infraestrutura de Filas Distribuídas</span></div><br /><span style="background-color: white; font-family: georgia;">Todos os agentes nos diferentes locais podem ser carregados em uma ou mais filas e, como estamos distribuindo informações de estado do dispositivo, cada fila saberá o estado atual dos agentes na fila e distribuirá apenas os chamadores aos agentes conforme apropriado. Além disso, podemos configurar penalidades para filas e/ou para os agentes para que os chamadores cheguem aos melhores agentes se estiverem disponíveis, e só usar os outros agentes quando todos os melhores agentes estiverem em uso.</span><p></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Podemos adicionar mais agentes ao sistema adicionando mais servidores ao cluster no mesmo local ou em locais físico adicionais. Também podemos expandir o número de filas que suportamos adicionando mais servidores, cada um lidando com uma fila ou filas diferentes. </span></p><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">Uma desvantagem de usar este sistema é a forma como o aplicativo <b>Queue( )</b> foi desenvolvido. <b>Queue( )</b> é uma das aplicações mais antigas do </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™, e infelizmente não acompanhou o ritmo de desenvolvimento no domínio da distribuição de estado do dispositivo, então não há como distribuir o mesmo <b>Queue( )</b> em vários servidores. P. Ex. suponha que você tenha filas de vendas em dois servidores. Se um chamador entra na fila de vendas do primeiro servidor </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ , e então outro chamador entra na fila de vendas do segundo servidor </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™, nenhuma informação será distribuída entre essas filas para indicar quem é o primeiro e quem é o segundo na fila de vendas. As duas filas são efetivamente separadas e não se conhecem a nível de sistemas. Talvez versões futuras do </span><span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ tenham a capacidade de fazer isso, mas no momento não há suporte. Mencionamos isso para que você possa planejar seu sistema de acordo com essas limitações.</span></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Como as filas em algumas implementações (como em Call Centers) podem ser necessárias para lidar com muitas chamadas de uma só vez, os requisitos de processamento e carga para um único servidor podem ser bastante altos. Ter a capacidade de acessar os mesmo recursos de agentes em vários servidores significa que podemos distribuir nossos chamadores entre vários servidores, reduzindo significativamente os requisitos de processamento colocados em um único sistema. Um sistema não precisa mais fazer tudo - podemos dividir vários componentes do sistema em diferentes servidores.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">Um ótimo recurso para ser utilizado entre os vários servidores <span style="background-color: white; font-weight: bold;">Asterisk</span><span style="background-color: white;">® </span><span style="background-color: white; font-weight: bold;">SCF</span><span style="background-color: white;">™ é um Peering IAX2 mantendo assim a qualidade da chamada, bem como a distribuição das mesmas sem o uso de muito recursos. E deixando assim SIP somente para os usuários/devices/endpoint e ITSP.</span></span></p><h3 style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Conclusão</span></h3><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Neste capitulo, foi explorado como você pode fazer a transição de um sistema de telefonia tradicional (não </span><span style="background-color: white; font-family: georgia; font-weight: bold;">Asterisk</span><span style="background-color: white; font-family: georgia;">® </span><span style="background-color: white; font-family: georgia; font-weight: bold;">SCF</span><span style="background-color: white; font-family: georgia;">™, ou não Softswitch PBX IP) para um Call Center distribuído. Ao logo do caminho, vimos como um Call Center com apenas algumas posições pode ser transformar em um sistema com centenas de posições em diferente locais físicos.</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Embora a capacidade de expandir seus negócios e planejar o futuro seja crucial, também é importante não criar um sistema mais complexo do que o necessário. Quanto maior você for e quanto mais distribuído for um sistema que você construir, mais tempo levara para decolar e mais difícil será fazer todas as coisas que são importantes quando ocorrerem mudanças, como testar implementar as mudanças, e manter as coisas sincronizadas. Se o seu sistema nunca vai crescer além de um Call Center de 40 posições, não construa um para 500 posições. Tudo o que vc está fazendo é adicionar custos e complexidade adicionais para acomodar um sistema em uma escala que pode nunca ser totalmente realizada.</span></p><p style="text-align: justify;"><span style="font-family: georgia;">Construir um sistema simples agora e planejar para o futuro e como você vai chegar lá (especialmente se você puder fazer isso em iterações, sem ter que destruir toda a sua infraestrutura ou começar do zero) vai te colocar em funcionamento tanto mais rápido. À medida que você cresce, você pode adicionar mais peças, determinar se a abordagem que vc está adotando está correta e, se não , voltar e retrabalhar essa peça em particular. Esse tipo de abordagem pode poupar muitas dores de cabeça no futuro, quando vc percebe que não precisa refazer todo o seu sistema complexo por causa de algum novo requisito que você não previu no inicio.</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Também mencionamos algumas vantagens de ter um sistema distribuído com funcionários remotos, como melhorar a moral dos funcionários e redução de custos. Você pode usar as conexões de Internet, hardware e eletricidade existentes de seus funcionários, o que pode economizar dinheiro para a empresa, e seus funcionários se beneficiarão evitando o agravamento e os custos de se deslocar para um escritório todos os dias. Embora nem todas as situações permitam esse tipo de cenário, vale a pena explorar se adicionar suporte para funcionários remotos será útil para o seu negocio.</span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;">Finalmente, o estado do dispositivo distribuído pode abrir um mundo de possibilidades para sua empresa, permitindo que ela cresça além do único sistema Asterisk que faz tudo. A divisão da funcionalidade em vários servidores agora é uma realidade e pode ser abordada com uma medida de confiança nunca vista anteriormente.</span></p><p style="text-align: justify;"><span style="font-family: georgia;"><span style="background-color: white;">Fonte: </span><em style="background-color: white; text-align: center;"><a href="http://www.asteriskdocs.org/en/3rd_Edition/asterisk-book-html-chunk/index.html" target="_blank">Asterisk: The Definitive Guide</a></em><span style="background-color: white; text-align: center;"> (3nd Edition for Asterisk 1.8), escrito por Leif Madsen, Jim Van Meggelen, e Russell Bryant. (Capitulo 22).</span></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"><br /></span></p><p style="text-align: justify;"><span style="background-color: white; font-family: georgia;"> </span></p><p style="text-align: justify;"><span style="background-color: white;"><span style="font-family: georgia;"><span style="font-size: 14px;"><br /></span></span></span></p></div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.comJardim Luísa, São Paulo - SP, Brasil-23.5940036 -46.7653826-31.629225352847058 -55.5544451 -15.558781847152945 -37.9763201tag:blogger.com,1999:blog-5351570291681062564.post-2416435553388853422022-02-01T13:05:00.002-03:002022-02-01T13:05:32.985-03:00Channel PJSIP < == > Channel SIP (Configurando um Tronco IP)<p style="text-align: justify;"><span style="font-family: arial;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEje06j0ZTRopbGC93-6Z2ec0Uhr6t8TlAOjhbiYMrqGqfzH0vWLSMdEnpBEUa6o8VSWPnCz9PpC1s6QByuFJq7_zjiw3HZPoNMhPQtd4ruWSDqhI_6o3M9mvpnjb18E0zJdgRTE0Md8gk0Nd59Y2IAfsY-mLWOOySEct00o58VFXxMpZ558GqXC6ttl=s1400" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="1400" height="229" src="https://blogger.googleusercontent.com/img/a/AVvXsEje06j0ZTRopbGC93-6Z2ec0Uhr6t8TlAOjhbiYMrqGqfzH0vWLSMdEnpBEUa6o8VSWPnCz9PpC1s6QByuFJq7_zjiw3HZPoNMhPQtd4ruWSDqhI_6o3M9mvpnjb18E0zJdgRTE0Md8gk0Nd59Y2IAfsY-mLWOOySEct00o58VFXxMpZ558GqXC6ttl=w400-h229" width="400" /></a></span></div><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;">Fonte: https://iplinktelecom.com/</span></div><span style="font-family: arial;"><br />Este guia irá ajuda-lo a realizar a configuração de um Tronco IP entre dois servidores <b>Asterisk® SCF™</b>, utilizando canais diferentes em relação ao protocolo SIP, afinal não importa se é <b>CHANNEL SIP </b>(modulo chan_sip.so) ou <b>CHANNEL PJSIP </b>(modulo chan_pjsip.so), <b><span style="color: red;">o protocolo é único</span></b>, <b>SIP 2.0</b>, ainda com a <a href="https://datatracker.ietf.org/doc/html/rfc3261" target="_blank">RFC 3261</a>.</span><p></p><p style="text-align: justify;"><span style="font-family: arial;">E claro que unificar ambas tecnologias não é uma tarefa facil, o recomendado é que você ABANDONE o modulo chan_sip.so. E passe a usar unicamente o modulo chan_pjsip.so. Mas como existes ainda muitas empresas que fazem uso do modulo chan_sip.so, vamos encontrar na planta de Telefonia IP (ToIP) a necessidade de criar um trunk entre as duas tecnologias (tecnologias não protocolo!).</span></p><p style="text-align: justify;"><b style="font-family: arial;">Asterisk® SCF™ </b><span style="font-family: arial;">é uma estrutura de código aberto para a construção de aplicativos de comunicação. O </span><b style="font-family: arial;">Asterisk® SCF™ </b><span style="font-family: arial;">transforma um computador comum em um servidor de comunicação. O </span><b style="font-family: arial;">Asterisk® SCF™ </b><span style="font-family: arial;">lhe permite implementar sistemas em telecomunicações, como Softswitch PBX IP, Gateways POTS, ISDN, GSM, Servidores de Conferência e outras soluções personalizadas que depende exclusivamente do seu conhecimento sobre o </span><b style="font-family: arial;">Asterisk® SCF™. </b><span style="font-family: arial;">É</span><b style="font-family: arial;"> </b><span style="font-family: arial;">usado por pequenas empresas e grande empresas, Call Centers, Operadoras e Agências Governamentais, em todo o mundo.</span></p><p style="text-align: justify;"><span style="font-family: arial;">Existem dois métodos padrão para conectar um Softswitch PBX IP, baseado em </span><b style="font-family: arial;">Asterisk® SCF™ </b><span style="font-family: arial;">entre si:</span><b style="font-family: arial;"> </b></p><p style="text-align: justify;"></p><ul><li><span style="font-family: arial;">CHANNEL SIP, para usar o mesmo PROTOCOLO de Iniciação de Sessão (SIP) padrão usado para conectar telefones que fazem uso do PROTOCOLO SIP.</span></li><li><span style="font-family: arial;">CHANNEL PJSIP, para usar a pilha de PROTOCOLOS Open Source Embedded SIP, que passou a ser padrão, usado para conectar telefones que fazem uso do PROTOCOLO SIP.</span></li></ul><div><span style="font-family: arial;">Muito importante lembrar que o correto para fazer um tronco entre dois servidores </span><b style="font-family: arial;">Asterisk® SCF™ </b><span style="font-family: arial;">é fazendo uso do PROTOLOCO IAX que se encontra também na versão 2.0. <a href="https://www.delphini.com.br/2020/08/inter-asterisk-exchange-iax-o-protocolo.html" target="_blank">Aqui</a> tem um post sobre isso</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Para mais documentação do </span><b style="font-family: arial; text-align: justify;">Asterisk® SCF™, </b><span style="font-family: arial; text-align: justify;">veja:</span></div><div><ul style="text-align: left;"><li><span style="text-align: justify;"><span style="font-family: arial;"><a href="http://www.asteriskdocs.org" target="_blank">http://www.asteriskdocs.org</a> é um livro HTML gratuito (o livro impresso correspondente é publicado convencionalmente pela O'Reilly em Inglês e pela Novatec em Português).</span></span></li><li><span style="text-align: justify;"><span style="font-family: arial;"><a href="http://www.asterisk.org" target="_blank">http://www.asterisk.org</a> é o site do <b style="text-align: left;">Asterisk® SCF™</b>, operado pela Digium<b style="text-align: left;">®</b> uma empresa do grupo Sangoma<b style="text-align: left;">®</b>.</span></span></li></ul><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div></div><div><span style="font-family: arial;">.Instruções para configurar um tronco entre dois servidores </span><b style="font-family: arial;">Asterisk® SCF™, </b><span style="font-family: arial;">a seguir vamos ver:</span></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">Configurar um tronco SIP utilizando PJSIP_WIZARD;</span></li><li><span style="font-family: arial;">Configurar o servidor para fazer e receber chamadas entre eles;</span></li><li><span style="font-family: arial;">Concluindo a configuração básica do PJSIP;</span></li><li><span style="font-family: arial;">Configurar o Dialplan.</span></li></ul><div><br /></div><div><span style="font-family: arial;">Pré-requisitos:</span></div></div><div><ul style="text-align: left;"><li><span style="font-family: arial;">Um servidor com Asterisk fazendo uso do modulo chan_sip.so;</span></li><li><span style="font-family: arial;">Um servidor com Asterisk fazendo uso do modulo chan_pjsip.so;</span></li><li><span style="font-family: arial;">Rede totalmente funcional entre os servidores.</span></li></ul><div style="text-align: justify;"><span style="font-family: arial;"><b>1 </b>- Segue as configurações para o servidor fazendo uso do modulo chan_sip.so:</span></div></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">OBS: Algumas configurações são recomendadas, ou seja não são obrigatórias.</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Edite o arquivo sip.conf:</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;"><div>[general]</div><div>dtmfmode=rfc2833</div><div>notifyringing=yes</div><div>context=from-pstn</div><div>srvlookup=yes</div><div>disallow=all</div><div>rtptimeout=60</div><div>useragent=PBX IP</div><div>qualify=100000</div><div>nat=yes</div><div>maxexpirey=1800</div><div>defaultexpirey=1800</div><div>tcpenable=yes</div><div>#include "sip_custom.conf"</div><div>register => srvchansip:srv12345@172.31.31.2:5060/94455</div><div><br /></div><div>[94455]</div><div>type=friend</div></span></div><span style="font-family: arial;">allow=ulaw<br />allow=alaw<br />allow=g729</span><div><span style="font-family: arial;">allow=gsm<br />dtmfmode=rfc2833<br />call-limit=60<br />defaultuser=srvchansip<br />fromuser=srvchansip<br />fromdomain=172.31.31.1<br />qualify=yes<br />port=5060<br />secret=srv12345<br />insecure=port,invite<br />host=172.31.31.1<br />context=from-itx-srvchanpjsip<br />transport=udp<br /><br /></span><div><div style="text-align: justify;"><span style="font-family: arial;"><b>2</b> - Segue as configurações para o servidor fazendo uso do modulo chan_sip.so:</span></div></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;">Edite o arquivo pjsip_wizard.conf:</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><div>[trunk_defaults] </div><div>type = wizard </div><div><br /></div><div>[srvchansip] </div><div>endpoint/transport = 0.0.0.0-udp </div><div>endpoint/allow = !all,ulaw,alaw,G729,G722 </div><div>endpoint/rewrite_contact = yes </div><div>endpoint/dtmf_mode = rfc4733 </div><div>endpoint/context = from-pstn </div><div>endpoint/force_rport = yes </div><div>aor/qualify_frequency = 60 </div><div>sends_auth = no </div><div>sends_registrations = no </div><div>remote_hosts = 172.31.31.1:5060</div></span></div><span style="font-family: arial;"><br /><b>OBS</b>: para que esta configuração funcione, o modulo res_pjsip_config_wizard.so deve estar instalado e carregado. Este modulo está disponível desde o </span><b style="font-family: arial;">Asterisk® SCF™</b><span style="font-family: arial;"> 13.2.<br /><br /><br /></span><div><div style="text-align: justify;"><span style="font-family: arial;"><b>3</b> - Configurando o </span><b style="font-family: arial;">Asterisk® SCF™ </b><span style="font-family: arial;">para fazer e receber chamadas:</span></div></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Você precisará modificar o arquivo /etc/asterisk/pjsip_wizard.conf para adicionar as configurações globais para as extensões que utilizaremos em nossa POC (Proof Of Concept).</span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Neste exemplo, estamos configurando uma extensão 95566 para fazer e aceitar chamadas. Os parâmetros que fazem referência a 95566 e senha podem ser personalizados para seus requisitos e mapeados para os seguintes campos:</span></div><div style="text-align: justify;"><span style="font-family: arial;"> </span></div><div><span style="font-family: arial;"><div>[defaults_user](!)</div><div>type = wizard </div><div>accepts_registrations = yes </div><div>sends_registrations = no </div><div>accepts_auth = yes </div><div>sends_auth = no </div><div>endpoint/context = from-internal </div><div>endpoint/allow = !all,ulaw,alaw,G729,G722 </div><div>endpoint/dtmf_mode = rfc4733 </div><div>endpoint/rewrite_contact = yes </div><div>endpoint/force_rport = yes </div><div>aor/max_contacts = 1 </div><div>aor/remove_existing = yes </div><div>aor/minimum_expiration = 30 </div><div><br /></div><div>95566</div><div>endpoint/callerid = Peter Parker <95566> </div><div>inbound_auth/username = P3t35P4k35$</div></span><span style="font-family: arial;"><div>inbound_auth/password = P3t35P4k35$</div></span></div><span style="font-family: arial;"><div><span style="font-family: arial;"><br /></span></div><br /><div style="text-align: justify;">Depois que temos o modelo "<b><span style="color: red;">(!)</span></b>", configurar um novo endpoint geralmente é tão simples quanto configurar um nome de usuário/senha, pois o objeto endpoint herda do modelo "<b><span style="color: red;">(!)</span></b>" criado em pjsip_wizard. Você nem precisará especificar um tipo. Veja os seguintes exemplos:</div></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"> <br /><div>[Parker](user_defaults) </div><div>hint_exten = 95566</div><div>endpoint/callerid = Peter Parker <95566></div><div>inbound_auth/username = P3t35P4k35$</div></span><span style="font-family: arial;"><div>inbound_auth/password = P3t35P4k35$</div></span><span style="font-family: arial;"><br /><div>[Diana](user_defaults) </div><div>hint_exten = 95567</div><div>endpoint/callerid = Diana de Themyscira <95567></div><div>endpoint/allow = !all,ulaw</div><div>inbound_auth/username = D14N4</div><div>inbound_auth/password = D14N4</div><div>;has_phoneprov = yes ;--> Padrão é não</div><div>;phoneprov/MAC = 00:1B:C9:4B:E3:57 ;--> deve especificar se has_phoneprov=yes;</div><div>;phoneprov/PROFILE = profile1 ;--> deve especificar se has_phoneprov=yes</div><div><span style="font-family: arial;"><br /></span></div><br /><br /></span><span style="font-family: arial; text-align: justify;"><b>4</b> - Concluindo a configuração básica do PJSIP</span><span style="font-family: arial; text-align: justify;">:</span><span style="font-family: arial;"><br /><br />Embora o pjsip_wizard.conf seja um grande facilitador na configuração endpoints PJSIP, configurações globais ou qualquer outra coisa que possa ser necessaria, ainda deve ser realizado e mesmo adicionado (muitas vezes necessario) em /etc/asterisk/pjsip.conf. No escopo de nossa configuração básica, adicione as linhas abaixo ao pjsip.conf para endpoints que estejam atras de NAT.</span></div><div><span style="font-family: arial;"><br /></span></div><div><span style="font-family: arial;"><br /><div>[global] </div><div>type = global</div><div>user_agent = PBX IP</div><div> </div><div>[transport-udp-nat] </div><div>type = transport </div><div>protocol = udp </div><div>bind = 0.0.0.0:5060 </div><div>local_net = X.X.X.X/24 </div><div>external_media_address = X.X.X.X </div><div>external_signaling_address = X.X.X.X </div><div>allow_reload = no</div><div><br /></div><ul style="text-align: left;"><li><span style="font-family: arial;">Caso o Softswitch PBX IP não esteja em uma rede NAT, você pode remover com segurança (ou comentar) os seguintes parâmetros: <b>external_media_address</b> e <b>external_signaling_address</b>.</span></li><li><span style="font-family: arial;">Com as configurações acima adicionadas aos respectivos arquivos, seu Softswitch PBX IP fazendo uso do modulo chan_pjsip.so, agora deve estar registrado no outro Softswitch PBX IP fazendo uso do modulo chan_sip.so, e o endpoint 94455 em seu telefone IP/Softphone deve estar registrado no seu Softswitch PBX IP que faz uso do modulo chan_pjsip.so.</span></li></ul><div><span style="font-family: arial; text-align: justify;"><b>5</b> - </span>Configurar o Dialplan<span style="text-align: justify;">:</span></div><br /><div style="text-align: justify;"><span style="font-family: arial;">O </span><b>Asterisk® SCF™ </b>faz uso dos Dialplans desenvolvidos em <b><span style="color: red;">/etc/asterisk/extensions.conf</span></b>, ou <b><span style="color: red;">extensions.ael</span></b>, e <b><span style="color: red;">extensions.lua</span></b>, para rotear chamadas entre endpoints, e realizar outras tarefas. Para permitir que nosso endpoint 994455 chame os usuários do outro Softswitch PBX IP que usa o modulo chan_sip.so, bem como para enviar quaisquer chamada que chegue ao DID atribuído ao respectivo troco, você precisa abrir <b>extension.conf</b> e adicionar as seguintes linhas de código:</div></span></div><div><span style="font-family: arial;"><br /><div>[from-pstn] </div><div>exten => _+55XXXXXXXXXXX,1,Dial(PJSIP/94455) </div><div>exten => _XX9XXXXXXXX,1,Dial(PJSIP/94455) </div><div><br /></div><div>[from-internal] </div><div>exten = _119XXXXXXXX,1,Dial(PJSIP/${EXTEN}@srvchansip) </div><div>same = n,Hangup() </div><div><br /></div><div>exten = _X.,1,Dial(PJSIP/${EXTEN}@srvchansip) </div><div>same = n,Hangup()</div><br /><ul style="text-align: left;"><li style="text-align: justify;">[from-pstn] - serve para encaminhar chamadas para a Rede Pública de Telefonia Comutada - RPTC (do inglês - Public Switched Telephone Network ou PSTN), proveniente do Softswitch PBX IP (modulo chan_sip.so) e as envia para o endpoint 94455. O bloco de código [from-pstn] capturará todas as chamadas para CLDs nacional padrão telefonia móvel (11 9 44 55 66 77) e enviara para o endpoint 94455.</li><li style="text-align: justify;">[from-internal] - serve para encaminhar chamadas para a RPTC/PSTN através do Softswitch PBX IP (modulo chan_pjsip.so). O bloco [from-internal] capturará chamadas para números nacional padrão telefonia móvel e encaminhara para o Softswitch PBX IP (modulo chan_sip.so).</li></ul><div style="text-align: justify;">IMPORTANTE! Se você quiser fazer seu tronco baseado em TECH PREFIX para autenticar, isso deve ser implementado no Dialplan.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Por exemplo, se você configurou o TEC PREFIX para "9999" no Softswitch PBX IP (modulo chan_sip.so), seu bloco [from-internal] deve ficar assim:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div style="text-align: start;">[from-internal] </div><div style="text-align: start;">exten = _119XXXXXXXX,1,Dial(PJSIP/9999${EXTEN}@srvchansip) </div><div style="text-align: start;">same = n,Hangup() </div><div style="text-align: start;"><br /></div><div style="text-align: start;">exten = _X.,1,Dial(PJSIP/9999${EXTEN}@srvchansip) </div><div style="text-align: start;">same = n,Hangup()</div><div style="text-align: start;"><br /></div><div style="text-align: start;">É isso! Você concluiu a configuração dos servidores baseados em <b>Asterisk® SCF™ </b>e agora pode fazer e receber chamadas entre eles. </div></div></span></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-14863820228428802982021-04-20T21:30:00.002-03:002021-06-18T13:45:19.473-03:00Asterisk Extension Language - AEL (Parte 01)<div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-ztjDTjt4-dM/YMzNgvl3V5I/AAAAAAAAEx0/zs4x8TDVHC0VelthcH4VQql4UkNuNUn2wCNcBGAsYHQ/s641/Dialplan_AEL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="289" data-original-width="641" src="https://1.bp.blogspot.com/-ztjDTjt4-dM/YMzNgvl3V5I/AAAAAAAAEx0/zs4x8TDVHC0VelthcH4VQql4UkNuNUn2wCNcBGAsYHQ/s16000/Dialplan_AEL.jpg" /></a></div><br /></div><div style="text-align: justify;"><span style="font-family: verdana;">A Sangoma Digium, por meio da sua equipe de desenvolvimento do Asterisk® SCF™, vem recebendo fortes pressões para adicionar recursos ao <span style="color: red;"><b>extensions.conf</b></span> de modo a torná-lo mais parecido com uma linguagem de programação. O fato é que o AEL tem como objetivo fornecer uma linguagem de programação real que pode ser usada para escrever um Dialplan (Plano de Marcação, como não se faz mais uso de aparelhos de pulso com discos, não faz sentido traduzir para Plano de Discagem. Até porque em Telefones IP, e destinado a POTS temos teclas, e as marcamos ao invés de discar.). </span></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;"><span style="font-family: verdana;">Começando:</span></h3><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="font-family: verdana;">O analisador AEL (<span style="color: red;"><b>pbx_ael.so</b></span>) é completamente separado do módulo que analisa o <span style="color: red;"><b>extensions.conf</b></span> (<b><span style="color: red;">pbx_config.so</span></b>). Para suar o AEL, a única coisa que deve ser feita é que o módulo pbx_ael.so deve ser carregado pelo Asterisk® SCF™. Isso será feito automaticamente se usar "autoload=yes" (que não é recomendado) em <span style="color: red;"><b>/etc/asterisk/modules.conf</b></span>. Quando o módulo for carregado, ele procurará por extensions.ael em <span style="color: red;"><b>/etc/asterisk/</b></span>. Ambos <span style="color: red;"><b>extensions.conf</b></span> e <span style="color: red;"><b>extensions.ael</b></span> pode ser usados em conjunto um com o outro, se isso for desejado. Alguns <b>Engenheiros de Sistemas em Telecomunicações NGN</b>, podem querer manter <b><span style="color: red;">extensions.conf</span></b> para usar os recursos que são configurados na seção "[GENERAL]".</span></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;"><span style="font-family: verdana;">Recarregando extensions.ael:</span></h3><div style="text-align: justify;"><span style="font-family: verdana;">Para recarregar o extensions.ael, o seguinte comando pode ser emitido no *CLI>. </span></div><div style="text-align: justify;"><span style="font-family: verdana;">*CLI> ael reload</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><h3 style="text-align: justify;"><span style="font-family: verdana;">Depurando:</span></h3><div style="text-align: justify;"><ul><li><span style="font-family: verdana;">Habilitar depuração de contextos do AEL;</span></li><ul><li><span style="font-family: verdana;">*CLI> ael debug contexts</span></li></ul><li><span style="font-family: verdana;">Habilitar depuração de macros do AEL;</span></li><ul><li><span style="font-family: verdana;">*CLI> ael debug macros</span></li></ul><li><span style="font-family: verdana;">Habilitar depuração de leitura do AEL;</span></li><ul><li><span style="font-family: verdana;">*CLI> ael debug read</span></li></ul><li><span style="font-family: verdana;">Habilitar depuração de tokens do AEL;</span></li><ul><li><span style="font-family: verdana;">*CLI> ael debug tokens</span></li></ul><li><span style="font-family: verdana;">Desativar mensagens de depuração do AEL;</span></li><ul><li><span style="font-family: verdana;">*CLI> ael no debug</span></li></ul></ul><div></div></div><h3 style="text-align: justify;"><span style="font-family: verdana;">Comentários:</span></h3><div style="text-align: justify;"><span style="font-family: verdana;">As linhas que começam com barra dupla (//) são comentários.</span></div><div style="text-align: justify;"><span style="font-family: verdana;">Exemplo: // Este é um comentário. </span></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;"><span style="font-family: verdana;">Contexto:</span></h3><div style="text-align: justify;"><span style="font-family: verdana;">Os contextos em AEL representam um conjunto de extensões da mesma forma que o fazem em extensions.conf (CONF).</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div><span style="background-color: white; color: #414141; font-size: 14px; text-align: start;"><span style="font-family: verdana;"><b>context internal_pbx_extensions {</b></span></span><p style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: #414141; font-size: 14px; line-height: 1.8em; margin: 0px 0px 15px; outline: 0px; overflow-wrap: break-word; padding: 0px; text-align: start; vertical-align: baseline;"></p><p style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: #414141; font-size: 14px; line-height: 1.8em; margin: 0px 0px 15px; outline: 0px; overflow-wrap: break-word; padding: 0px; text-align: start; vertical-align: baseline;"><span style="font-family: verdana;"><b>};</b></span></p><span style="font-family: verdana;"><div style="text-align: justify;"><b>OBS</b>: A chave de abertura deve aparecer como acima. Movê-la para a linha seguinte pode ter consequências desastrosas.</div></span><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; box-sizing: border-box; line-height: 1.8em; margin: 0px 0px 15px; outline: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; vertical-align: baseline;"><span style="background-color: transparent; font-family: verdana;"><br /></span></div><h3><span style="font-family: verdana;">Extensões</span>:</h3><div style="text-align: justify;"><span style="font-weight: normal;"><span style="font-family: verdana;">Para especificar uma extensão em um contexto, a seguinte sintaxe é usada. Se mais de um aplicativo for chamado em uma extensão, eles podem ser listados em ordem dentro de um bloco.</span></span></div></div><div><br /><span style="font-family: verdana;"><br /><br />context internal_pbx_extensions {<br /><span> </span>_10XX => {<br /><span> </span><span> </span><span> </span>Verbose(Comutação Interna entre Extensions);<br /><span> </span><span> </span><span> </span>Wait(0.2);<br /><span> </span><span> </span><span> </span>Dial(PJSIP/${EXTEN},45,rTtHhKkwo);</span></div><div><span style="font-family: verdana;"><span> </span><span> </span><span> </span>if("${DIALSTATUS}"=="BUSY") {</span></div><div><span style="font-family: verdana;"><span> </span><span> </span><span> <span> </span></span></span><span style="font-family: verdana;">Playback(call-sorry&is-in-use&call-goodbye);</span><span style="font-family: verdana;"><br /><span> <span> </span><span> </span></span>};<br /><span> </span><span> </span><span> </span>HangUp();<br /><span> </span>};<br /><br /><span> </span>_80XX => {<br /><span> </span><span> </span><span> </span>Dial(PJSIP/${EXTEN},45,rTtHhKkwo);<br /><span> </span><span> </span><span> </span>Verbose(Comutação entre servidores);<br /><span> </span><span> </span><span> </span>Dial(PJSIP/TRUNK-SRV-SP/${EXTEN},45,rTtHhKkwo);<br /><span> </span><span> </span><span> </span>if("${DIALSTATUS}"=="BUSY") {<br /><span> </span><span> </span><span> </span><span> </span>Verbose(Encaminhamento Incondicional);<br /><span> </span><span> </span><span> </span><span> </span>Playback(one-moment-please);<br /><span> </span><span> </span><span> </span><span> </span>goto internal_pbx_extensions|5099|1;<br /><span> </span><span> </span><span> </span>};<br /><span> </span><span> </span><span> </span>HangUp();<br /><span> </span>};<br /><span> </span></span></div><div><span style="font-family: verdana;"><span> </span>_5XXX => {<br /><span> </span><span> </span><span> </span>Verbose(Comutação para a Telefonista);<br /><span> </span><span> </span><span> </span>Dial(IAX2/TRUNK-SRV-SP/${EXTEN},45,rTtHhKkwo);<br /><span> </span><span> </span><span> </span>if("${DIALSTATUS}"=="BUSY") {<br /><span> </span><span> </span><span> </span><span> </span>Playback(call-sorry&is-in-use&call-goodbye);<br /><span> </span><span> </span><span> </span><span> </span>HangUp();<br /><span> <span> </span><span> </span></span>};<br /><span> </span><span> </span><span> </span>HangUp();<br /><span> </span>};<br /><br /><span> </span>h => {<br /><span> </span><span> </span><span> </span>Verbose(//----> Chamada encerrada...: ORIG-${CALLERID(num)});<br /><span> </span>};<br />};<br /><br /></span><h3 style="text-align: left;"><span style="font-family: verdana;">Inclui:</span></h3><span style="font-family: verdana;"><div style="text-align: justify;">Os contextos podem ser incluídos em outros contextos. Todos os contextos incluídos são listados em um único bloco.</div><br />context internal_pbx_extensions {<br /> <span> </span><span> </span>includes { </span></div><div><span style="font-family: verdana;"><span> </span><span> </span><span> <span> </span></span>chamadas_local;<br /><span> </span><span> </span><span> </span><span> </span>chamadas_ddd;<br /><span> </span><span> </span><span> </span><span> </span>chamadas_ddi;<br /><span> </span><span> </span>};<br />};</span></div><div><span style="font-family: verdana;"><br /></span></div><h3 style="text-align: left;"><span style="font-family: verdana;">Dialplan Switches:</span></h3><div><span style="font-family: verdana;">Os switches são listados em seu próprio bloco dentro de um contexto.</span></div><div><span style="font-family: verdana;"><div><br /></div><div>context internal_pbx_extensions {</div><div><span> </span><span> </span>switches {</div><div><span> </span><span> </span><span> </span><span> </span>DUNDi/e164;</div><div><span> </span><span> </span><span> </span><span> </span>IAX2/TRUNK-SRV-SP;</div></span><span style="font-family: verdana;"><div><span> </span><span> </span>};</div><div><br /></div><div><span> </span><span> </span>eswitches {</div><div><span> </span><span> </span><span> </span><span> </span>IAX2/context@${CURSERVER};</div><div><span> </span><span> </span>};</div><div>};</div></span></div><div><span style="font-family: verdana;"><br /></span><h3 style="text-align: left;"><span style="font-family: verdana;">Ignore Padrão (ignorepat):</span></h3><div style="text-align: justify;"><span style="font-family: verdana;">ignorepat pode ser usado para instruir os drivers de canal a não cancelar o tom de marcação ao receber um determinado padrão (<span style="color: red;"><b>pattern</b></span>). O exemplo mais comumente usado é '9'.</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">context </span><span style="font-family: verdana;">chamadas_local {</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><span> </span><span> ignorepat=> 9;</span><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">};</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;"><b>OBS</b>: A chave de abertura deve aparecer como acima. Movê-la para a linha seguinte pode ter consequências desastrosas.</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><h3 style="text-align: justify;"><span style="font-family: verdana;">Variáveis:</span></h3><div style="text-align: justify;"><span style="font-family: verdana;">As variáveis no </span><span style="font-family: verdana;">Asterisk® SCF™ não têm um tipo, então para definir uma variável, ela só precisa ser especificada com um valor. </span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">As variáveis podem ser definidas nas extensões. </span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><div><span style="font-family: verdana;">context </span><span style="font-family: verdana;">chamadas_local {</span></div><div><span style="font-family: verdana;"><span> </span><span> _92929XXXX => {</span><br /></span></div><div><span style="font-family: verdana;"><span><span> </span><span> </span><span> Set(ignore_pattern=9); // definindo uma variável.</span><br /></span></span></div><div><span style="font-family: verdana;"> <span> </span>ignorepat=> ${ignore_pattern}; // usando a variável.<br /></span></div><div><span style="font-family: verdana;"><span> </span><span> </span>}</span></div><div><span style="font-family: verdana;">};</span></div></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">Variáveis globais são definidas em seu próprio bloco.</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">globals {</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><span> </span><span> CONSOLE=Console/dsp;</span><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;"><span><span> </span><span> TRUNK-GOIP=DAHDI/g2;</span><br /></span></span></div><div style="text-align: justify;"><span style="font-family: verdana;">};</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><b style="font-family: verdana;">OBS</b><span style="font-family: verdana;">: A chave de abertura deve aparecer como acima. Movê-la para a linha seguinte pode ter consequências desastrosas.</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">.</span></div></div><div style="text-align: justify;"></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-22530554340920773192021-02-25T16:31:00.001-03:002021-02-25T16:32:15.818-03:00Protocolo SIP - Mensagens 180 x 183 x Early Media <p> </p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-fAu7KwvlojA/YDeyaOAe8pI/AAAAAAAAEk4/EozaXsUqiCcytlSpvQjDUXsTzLvxkf_hgCNcBGAsYHQ/s1192/SIP-Trunk-Providers.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1130" data-original-width="1192" src="https://1.bp.blogspot.com/-fAu7KwvlojA/YDeyaOAe8pI/AAAAAAAAEk4/EozaXsUqiCcytlSpvQjDUXsTzLvxkf_hgCNcBGAsYHQ/s320/SIP-Trunk-Providers.png" width="320" /></a></div><p></p><div style="text-align: justify;"><span style="font-family: verdana;">Uma chamada SIP básica, estabelecida com sucesso, quando aceita pelo receptor, tem a resposta final <b><span style="color: red;">200 OK</span></b>, a negociação do CODEC é feita e a chamada entra na sessão de mídia com ambas as extremidades conhecendo as capacidades uma da outra. Acredito que você não tenha, nenhuma dúvida sobre este mecanismo básico e principal.</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-uW0gqq3d4z4/YDezgKW9OdI/AAAAAAAAElA/FuBPhk76jgMKO5-Qubkr-wday04G6ot5gCNcBGAsYHQ/s600/early-media.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="300" data-original-width="600" src="https://1.bp.blogspot.com/-uW0gqq3d4z4/YDezgKW9OdI/AAAAAAAAElA/FuBPhk76jgMKO5-Qubkr-wday04G6ot5gCNcBGAsYHQ/s16000/early-media.png" /></a></div><div style="text-align: center;"><span style="font-family: georgia; font-size: x-small;"><i>Fonte em referencias.</i></span></div></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">Mas isso não tem nada a ver com o momento em que a mídia realmente inicia, às vezes você pode perceber que o outro lado está reproduzindo um IVR para pedir a entrada de um dígito sem atender sua chamada.</span></div><div style="text-align: justify;"><span style="font-family: verdana;"><br /></span></div><div style="text-align: justify;"><span style="font-family: verdana;">Portanto, o fluxo de mídia antes do estabelecimento da chamada é considerado <b>mídia inicial</b>. Não é a voz da pessoa com quem você deseja falar, mas sim <b>tons do sistema</b>, <b>anúncios</b> ou <b>qualquer som</b> que o outro lado deseja que você ouça, mesmos que muitas vezes você não ouça, por não ter uma tratativa em seu <b>Dialplan</b>. Isto ocorre com frequência, e se seu <b>Dialplan</b>, não tem uma tratativa correta, o <b>app_dial.c</b> vai estacionar a chamada, ou seja vai executar o </span>res_musiconhold.c.</div><span style="font-family: verdana;"><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Uma implementação de alguma forma semelhante ao PSTN pode ser encontrada quando seu telefone celular tenta alcançar um número fora do sinal:</div><blockquote><div style="text-align: justify;">O número discado não está disponível no momento, tente novamente mais tarde.</div><div style="text-align: justify;"></div></blockquote><div style="text-align: justify;">Isso pode ser o que você ouve como resultado e, neste caso, seu provedor de serviços de telefonia não atendeu a sua chamada nem cobrou a tarifa da chamada.</div><div style="text-align: justify;"><br /></div></span><h2 style="text-align: left;">180 Ringing</h2>Conforme declarado na Bíblia SIP RFC3261, 180 é usado para alertar o UA chamador que recebeu um INVITE e está tocando.<div><br /></div><div><div style="text-align: justify;">A resposta 180 na maioria das vezes não carrega o corpo SDP, e o dispositivo que recebe essa resposta geralmente inicia um toque de retorno local para o usuário final. Isso quer dizer que o tom de toque que você ouve ao esperar que o receptor atenda não é uma viagem pela rede, mas sim configurável em seu dispositivo terminal (endpoint).</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Vale ressaltar que as mesmas coisas acontecem quando alguma mensagem do tipo 4XX, 5XX, 6XX é recebido, seu dispositivo deve gerar alguns tipos de áudios informativos, para que o usuário possa notar que a chamada falhou, ou que foi sem sucesso, antes de desligar completamente.</div><div style="text-align: justify;"><br /></div><div><h2 style="text-align: left;">183 Session Progress</h2><div style="text-align: justify;">A resposta 183 (Progresso da sessão) é usada para transmitir as informações. Os campos de cabeçalho ou corpo SDP, neste caso, podem ser usados para transmitir mais detalhes sobre o andamento da chamada.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-m4wzENCgaeU/YDfyQcp-EAI/AAAAAAAAElI/EFIiRUyP9pE2ohXfnQhxu10y2x2E0cmxACNcBGAsYHQ/s600/early-media_2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="346" data-original-width="600" src="https://1.bp.blogspot.com/-m4wzENCgaeU/YDfyQcp-EAI/AAAAAAAAElI/EFIiRUyP9pE2ohXfnQhxu10y2x2E0cmxACNcBGAsYHQ/s16000/early-media_2.png" /></a></div><div style="text-align: center;"><i><i style="font-family: georgia; font-size: small;">Fonte em referencias </i></i><span style="font-size: x-small;"><i>- Early Media with SIP 183 response.</i></span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">A resposta 183 contém corpo SDP e é geralmente usada em 3 casos:</div><div style="text-align: justify;"><ol><li>Fazendo um <b>RINGBACK</b> da viagem na rede: o dispositivo que executa o UAC reproduzirá o fluxo de mídia enviado pelo UAS ao usuário para indicar que o receptor está sendo alertado.</li><li>Simplesmente reproduzir um som de mensagem de erro e, em seguida, desligar como afirmei acima.</li><li>Para a implementação de uma resposta de voz interativa: os tons DTMF podem ser reunidos junto com os pacotes de mídia.</li></ol><div>É sobre a mídia antiga, simples, não é?</div></div><div style="text-align: justify;"><br /></div><div><h2 style="text-align: left;">Detecting Early Media</h2><div style="text-align: justify;">Isso é sobre a mídia inicial, é simples, acima está a definição SIP sobre a mídia inicial, posso dizer que é bastante simples, mas na verdade, o UAC não poderia retransmitir as respostas SIP recebidas para decidir se inicia o local do <b>RINGBACK</b> ou para reproduzir a mídia da extremidade remota. Só porque a sinalização SIP e a mídia RTP estão em seu próprio caminho, o UAS pode iniciar a resposta 183 que contém o corpo SDP sem enviar nenhum pacote de mídia.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Fora isso, alguma implementação anexa ao corpo da resposta 180 o SDP e entra na primeira sessão de mídia sem respostas 183.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Portanto, para detectar a mídia inicial, o UAC também precisa verificar se os pacotes de mídia estão chegando em um determinado momento.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">E graças ao <b>RFC3960</b>, algumas políticas para essas bagunças são recomendadas:</div><div><ol><li style="text-align: justify;">A menos que uma resposta 180 (toque) seja recebida, nunca gere toque local (<b>RINGING</b>);</li><li style="text-align: justify;">Se um 180 (<b>RINGING</b>) foi recebido, mas não há pacotes de mídia de entrada, gere toque local (<b>RINGING</b>);</li><li style="text-align: justify;">Se um 180 (<b>RINGING</b>) foi recebido e há pacotes de mídia de entrada, reproduza-os e não gere toque local (<b>RINGING</b>).</li></ol></div><div style="text-align: justify;">Essas políticas não são definidas como padrão a ser seguido em todos os dispositivos SIP, mas simplesmente afirmam:</div><div><blockquote style="text-align: justify;">Qualquer UA deve reproduzir pacotes de mídia de entrada (e interromper a geração de tom de toque local se estiver sendo executado).</blockquote><p style="text-align: justify;">Por último, mas não menos importante, quando a chamada deixa o estado de mídia inicial ao ser atendida, a resposta SDP no 200 OK deve corresponder à resposta SDP no 183/180 anterior, ou seja, nenhuma alteração na capacidade de mídia quando a chamada muda de sessão de mídia antecipada para sessão de mídia oficial (Early Media).</p><p style="text-align: justify;">Bem, é isso, espero que faça sentido para você. Se possível, faça alguns rastreamentos com SNGREP/Wireshark de uma chamada SIP com Early Media podem ajudá-lo a entender com mais clareza. </p></div><div style="text-align: justify;">Referências:</div><div><br /></div><div><a href="https://andrewjprokop.wordpress.com/2014/04/18/sip-media-management-early-media-vs-late-media/" target="_blank">Andrew J. Prokop</a></div><div><br /></div><div><a href="https://tools.ietf.org/html/rfc3960" target="_blank">Tools IETF: RFC3960</a></div><div><br /></div><div><a href="https://tools.ietf.org/html/rfc3261" target="_blank">Tools IETF: RFC3261</a></div><div><br /></div></div><span style="text-align: start;"></span></div>Tkat's All Folks! (É por hoje é só, pessoal!).</div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-59207107890601868952021-01-06T08:12:00.002-03:002021-01-06T08:12:23.144-03:00Novo repositorio key para WineHQ - Debian e seus Forks<p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-lGJQfaRzGcY/X_Wae7ys2xI/AAAAAAAAEi4/ashTYznxBk85so0Y5r3trgMDHPY4xKvVACNcBGAsYHQ/s900/GNU_Linux.jpeg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="600" data-original-width="900" src="https://1.bp.blogspot.com/-lGJQfaRzGcY/X_Wae7ys2xI/AAAAAAAAEi4/ashTYznxBk85so0Y5r3trgMDHPY4xKvVACNcBGAsYHQ/s320/GNU_Linux.jpeg" width="320" /></a></div>Eu faço uso do NotePad++ em cima do Ubuntu 20.4 (Fork do Debian), ocorre que sempre que vai haver uma atualização recebia o erro a seguir:<p></p><p style="text-align: justify;">Erro GPG: https://dl.winehq.org/wine-builds/ubuntu
bionic InRelease: As assinaturas a seguir não puderam ser verificadas
devido à chave pública não estar disponível: NO_PUBKEY
76F1A20FF987672FThe repository 'https://dl.winehq.org/wine-builds/ubuntu bionic InRelease' is not signed.</p><p style="text-align: justify;">Para resolver este erro, faça um acesso a sua pasta root (ou o lugar onde se encontra o arquivo <span style="color: red;"><b>winehq<span>.key</span></b><span><span style="color: black;">. </span></span></span></p><p style="text-align: justify;"><span style="color: red;"><span><span style="color: black;">Caso não saiba onde se encontra esse arquivo execute o comando a seguir:</span></span></span></p><div style="text-align: justify;"><span style="color: #800180;"><b><span style="font-family: courier;"><span># find / -name winehq.key<br />/root/winehq.key </span></span></b></span></div><p style="text-align: justify;"><span style="color: red;"><span><span style="color: black;">Uma vez tendo o local do arquivo remova ele de seu sistema: Atenção! Tenha muito cuidado ao usar este comando e tenha em mente que está digitando corretamente o comando.<br /></span></span></span></p><div style="text-align: justify;"><b><span style="color: #800180;"><span style="font-family: courier;"><span># rm -rf </span><span>/root/winehq.key </span></span></span></b></div><p style="text-align: justify;"><span style="color: red;"><span><span style="color: black;">Devido a migração para compilações OBS ter sido concluída, a chave do repositório WineHQ foi alterada. Então os usuários do Debian e do Ubuntu que usam a chave antiga (release.key ou winehq.key), necessita baixar a nova (wineh<span><span>q.key) e adicioná-la ao sistema APT, ou você continuara a receber a mensagem de erro sobre a chave ausente.</span></span></span></span></span></p><p style="text-align: justify;"><span style="color: red;"><span><span style="color: black;"><span><span>Para baixar e instalar a nova chave:</span></span></span></span></span></p><div style="text-align: justify;"><b><span style="color: #800180;"><span style="font-family: courier;"><span><span><span># cd /root</span></span></span></span></span></b></div><div style="text-align: justify;"><b><span style="color: #800180;"><span style="font-family: courier;"><span><span><span># wget -nc https://dl.winehq.org/wine-builds/winehq.key</span></span></span></span></span></b></div><div style="text-align: justify;"><b><span style="color: #800180;"><span style="font-family: courier;"><span><span><span># sudo apt-key add winehq.key</span></span></span></span></span></b></div><div style="text-align: justify;"><b><span style="color: #800180;"><span style="font-family: courier;"><span><span><span>ok</span></span></span></span></span></b></div><div style="text-align: justify;"><b><span style="color: #800180;"><span style="font-family: courier;"><span><span><span>#</span></span></span></span></span></b></div><p></p><p>Recebendo o <span style="color: red;"><b>OK</b></span>, execute:</p><div style="text-align: left;"><span style="font-family: courier;"><b><span style="color: #800180;"># sudo apt update && apt upgrade && apt dist-upgrade</span></b></span></div><p><b style="background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">Tkat's All Folks!</b> (É por hoje é só, pessoal!).<br /><span style="color: red;"><span><span style="color: black;"><span><span></span></span></span></span></span></p><p style="text-align: justify;"><br /><span style="color: red;"><span><span style="color: black;"><span><span></span></span></span></span></span></p><p style="text-align: justify;"><br /><span style="color: red;"><span><span style="color: black;"><span><span></span></span></span></span></span></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-23944641297791473642020-12-26T14:39:00.001-03:002020-12-26T14:39:21.026-03:00Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 03) - Final. <p><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">Criado por </span><b style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;">Matthew Nicholson</b><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">, modificado pela última vez por </span><b style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;">Rusty Newton</b><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">, tradução técnica e adaptação para o Brasil por </span><b style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;">Angelo Delphini</b><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s1024/AstLUA-BR.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s320/AstLUA-BR.png" /></a></div><br /><p></p><h3 style="text-align: left;">Dialplan LUA: Hints</h3><div style="text-align: justify;">No Asterisk® SCF™ versão 10 e superiores, as dicas (HINTS) do Dialplan (<b><span style="color: red;">extensions.lua</span></b>) podem ser especificadas de maneira semelhante à maneira como as extensões são especificadas em Dialplan CONF e AEL.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><b>extensions.lua</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_756496" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1253px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1253px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1238px;"><div class="container" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">hints = {</code></div><div class="line number2 index1 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">default</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">= {</code></div><div class="line number3 index2 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"100"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/100"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">;</code></div><div class="line number4 index3 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">};</code></div><div class="line number5 index4 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number6 index5 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">office = {</code></div><div class="line number7 index6 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"500"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/500"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">;</code></div><div class="line number8 index7 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">};</code></div><div class="line number9 index8 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number10 index9 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">home = {</code></div><div class="line number11 index10 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"200"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/200"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">;</code></div><div class="line number12 index11 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"201"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/201"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">;</code></div><div class="line number13 index12 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">};</code></div><div class="line number14 index13 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">}</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;">.</div><h3 style="text-align: justify;">Dialplan LUA: Exemplos</h3><div style="text-align: justify;">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.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Menos desordem</h3><div style="text-align: justify;">Em vez de definir cada extensão em linha, você pode usar este método para criar um arquivo <b><span style="color: red;">extensions.lua</span></b> 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.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><b>extensions.lua</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_999854" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1236px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1221px;"><div class="container" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;">-- </code>esta função serve como uma função de extensão diretamente --</div><div class="line number2 index1 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function call_user(c, user)</code></div><div class="line number3 index2 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">app.dial(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/"</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">.. user, </code><code class="java value" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 153, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">60</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number4 index3 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number5 index4 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number6 index5 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;">-- </code>esta função retorna uma função de extensão --</div><div class="line number7 index6 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function call_sales_queue(queue)</code></div><div class="line number8 index7 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">return</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function(c, e)</code></div><div class="line number9 index8 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">app.queue(queue)</code></div><div class="line number10 index9 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number11 index10 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number12 index11 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number13 index12 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e = {}</code></div><div class="line number14 index13 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number15 index14 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.</code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">default</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">= {}</code></div><div class="line number16 index15 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.</code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">default</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">.include = {</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"users"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">}</code></div><div class="line number17 index16 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number18 index17 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.users = {}</code></div><div class="line number19 index18 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.users[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"100"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = call_user</code></div><div class="line number20 index19 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.users[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"101"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = call_user</code></div><div class="line number21 index20 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number22 index21 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.sales = {}</code></div><div class="line number23 index22 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.sales[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"5000"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = call_sales_queue(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales1"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number24 index23 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">e.sales[</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"6000"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">] = call_sales_queue(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales2"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number25 index24 alt2" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number26 index25 alt1" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions = e</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Less Clutter v2</h3><div style="text-align: justify;">Neste exemplo, usamos uma função sofisticada para registrar extensões.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><b>extensions.lua</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_227968" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1236px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1221px;"><div class="container" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function register(context, extension, func)</code></div><div class="line number2 index1 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">if</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">not extensions then</code></div><div class="line number3 index2 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions = {}</code></div><div class="line number4 index3 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number5 index4 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number6 index5 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">if</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">not extensions[context] then</code></div><div class="line number7 index6 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions[context] = {}</code></div><div class="line number8 index7 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number9 index8 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number10 index9 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions[context][extension] = func</code></div><div class="line number11 index10 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number12 index11 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number13 index12 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function include(context, included_context)</code></div><div class="line number14 index13 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">if</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">not extensions then</code></div><div class="line number15 index14 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions = {}</code></div><div class="line number16 index15 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number17 index16 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number18 index17 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">if</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">not extensions[context] then</code></div><div class="line number19 index18 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions[context] = {}</code></div><div class="line number20 index19 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number21 index20 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number22 index21 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">if</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">not extensions[context].include then</code></div><div class="line number23 index22 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions[context].include = {}</code></div><div class="line number24 index23 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number25 index24 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number26 index25 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">table.insert(extensions[context].include, included_context)</code></div><div class="line number27 index26 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number28 index27 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number29 index28 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">-- </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">this</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function serves as an extension function directly</code></div><div class="line number30 index29 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function call_user(c, user)</code></div><div class="line number31 index30 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">app.dial(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/"</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">.. user, </code><code class="java value" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 153, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">60</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number32 index31 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number33 index32 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number34 index33 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">-- </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">this</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function returns an extension function</code></div><div class="line number35 index34 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function call_sales_queue(queue)</code></div><div class="line number36 index35 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">return</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">function(c, e)</code></div><div class="line number37 index36 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">app.queue(queue)</code></div><div class="line number38 index37 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number39 index38 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number40 index39 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number41 index40 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">include(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"default"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"users"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number42 index41 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">include(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"default"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number43 index42 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number44 index43 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">register(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"users"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"100"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, call_user)</code></div><div class="line number45 index44 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">register(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"users"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"101"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, call_user)</code></div><div class="line number46 index45 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number47 index46 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">register(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"5000"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, call_sales_queue(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales1"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">))</code></div><div class="line number48 index47 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">register(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"6000"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, call_sales_queue(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales2"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">))</code></div><div class="line number49 index48 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">register(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, </code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"7000"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">, function()</code></div><div class="line number50 index49 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">app.queue(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"sales3"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number51 index50 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end)</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Tópicos avançados em pbx_lua</h3><div style="text-align: justify;">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.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">extensions.lua Processo de carga</h3><div style="text-align: justify;">O arquivo <b><span style="color: red;">extensions.lua</span></b> é carregado na memória uma vez quando o módulo <b><span style="color: red;">pbx_lua</span></b> é 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.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><span style="background-color: transparent; font-size: 14px; text-align: justify;"><span style="color: #333333; font-family: Helvetica Neue, Helvetica, Arial, sans-serif;"><b>Provavelmente</b></span></span><b style="color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px;"> é uma má ideia.</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_925503" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1236px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1221px;"><div class="container" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">-- minha fantasia em extensions.lua --</code></div><div class="line number2 index1 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number3 index2 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions = {}</code></div><div class="line number4 index3 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions.</code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">default</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">= {}</code></div><div class="line number5 index4 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number6 index5 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;">-- </code><span style="background-color: initial; white-space: nowrap;"><span style="color: black;">pode ser uma má ideia, isto será executado sempre que um canal for criado --</span></span></div><div class="line number7 index6 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">data = query_webservice_for_extensions_list(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"site1"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number8 index7 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number9 index8 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">for</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">_, e in ipairs(data) </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">do</code></div><div class="line number10 index9 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions.</code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">default</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">[e.exten] = function()</code></div><div class="line number11 index10 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">app.dial(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/"</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">.. e.sip_peer, e.dial_timeout)</code></div><div class="line number12 index11 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div><div class="line number13 index12 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">A mesa de extensions</h3><div style="text-align: justify;">A tabela extensions é uma tabela LUA padrão e pode ser definida como você quiser. O módulo <b><span style="color: red;">pbx_lua</span></b> 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.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extensions = {</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">context_table = {</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extension1 = function()</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end;</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">extension2 = function()</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">end;</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java spaces" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"> </code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">};</code></div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255) !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">}</code></div></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Para onde foram as prioridades?</h3><div style="text-align: justify;">Não há prioridades. O Asterisk® SCF™ usa prioridades para definir a ordem em que ocorrem as operações do Dialplan. O módulo <b><span style="color: red;">pbx_lua</span></b> 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 <b><span style="color: red;">pbx_lua</span></b> 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 <b><span style="color: red;">GoTo(default,1234,1)</span></b>. Você só faria referência a extensões desta forma de fora de <b><span style="color: red;">pbx_lua</span></b> (ou seja, de <b>extensions.conf</b> ou <b>extensions.ael</b>). Com <b><span style="color: red;">pbx_lua</span></b> você pode apenas executar a função dessa extensão.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><code class="java plain" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">extensions.</code><code class="java keyword" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">default</code><code class="java plain" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">[</code><code class="java string" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">"1234"</code><code class="java plain" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">](</code><code class="java string" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">"default"</code><code class="java plain" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">, </code><code class="java string" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">"1234"</code><code class="java plain" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; text-align: left; vertical-align: baseline !important; white-space: nowrap; width: auto !important;">)</code></div><div style="text-align: justify;"><br /></div><h3 style="text-align: left;">Lua Script Lifetime</h3><div style="text-align: justify;">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.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Aplicativos, funções e variáveis</h3><div style="text-align: justify;">Detalhes sobre como acessar aplicações e funções do Dialplan LUA e variáveis de canal podem ser encontrados na página <a href="https://www.delphini.com.br/2020/12/asterisk-scf-lua-configuracao-do-lua_25.html" target="_blank">Interagindo com o Asterisk® SCF™ LUA</a> (aplicativos, variáveis e funções) .</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">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 <b><span style="color: red;">:get( )</span></b> e <b><span style="color: red;">:set( )</span></b>.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="code panel pdl" style="background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b>Variável de canal (channel): var é o objeto do espaço reservado</b></div><div class="codeContent panelContent pdl" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_30582" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1236px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1221px;"><div class="container" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">var = channel.my_variable</code></div><div class="line number2 index1 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">var:set(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"my value"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number3 index2 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">value = var:get(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"my value"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div></div></td></tr></tbody></table></div></div></div></div><div class="code panel pdl" style="background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b>Função Dialplan: fax_modems é o objeto placeholder</b></div><div class="codeContent panelContent pdl" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_959206" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1236px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1221px;"><div class="container" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">fax_modems = channel.FAXOPT(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"module"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number2 index1 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number3 index2 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">-- the function arguments are stored in the placeholder</code></div><div class="line number4 index3 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number5 index4 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">fax_modems:set(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"v17"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div><div class="line number6 index5 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">value = fax_modems:get()</code></div></div></td></tr></tbody></table></div></div></div></div><div class="code panel pdl" style="background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b>Aplicação Dialplan: Dial é o objeto placeholder</b></div><div class="codeContent panelContent pdl" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_631636" style="font-size: 1em !important; margin: 0px !important; overflow: auto !important; padding: 0px; position: relative !important; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: #333333; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-size: 14px !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: 1236px;"><tbody style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><tr style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-color: initial !important; border-image: initial !important; border-radius: 0px !important; border-style: dashed; border-width: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 0px 15px !important; position: static !important; vertical-align: baseline !important; width: 1221px;"><div class="container" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 15px 0px 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 0px 15px !important; position: relative !important; vertical-align: baseline !important; white-space: pre-wrap !important; width: auto !important;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">dial = app.dial</code></div><div class="line number2 index1 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"> </div><div class="line number3 index2 alt2" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">-- the only thing we can </code><code class="java keyword" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(51, 102, 153) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; font-weight: bold !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">do</code> <code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">with it is execute it</code></div><div class="line number4 index3 alt1" style="background-attachment: initial !important; background-clip: initial !important; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; float: none !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px 1em 0px 0px !important; position: static !important; vertical-align: baseline !important; white-space: nowrap !important; width: auto !important;"><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">dial(</code><code class="java string" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 51, 102) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">"SIP/100"</code><code class="java plain" style="background: none !important; border-radius: 0px !important; border: 0px !important; box-sizing: content-box !important; color: rgb(0, 0, 0) !important; float: none !important; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace !important; height: auto !important; inset: auto !important; line-height: 20px !important; margin: 0px !important; min-height: auto !important; outline: 0px !important; overflow: visible !important; padding: 0px !important; position: static !important; vertical-align: baseline !important; width: auto !important;">)</code></div></div></td></tr></tbody></table></div></div></div></div></div><br /><div style="text-align: justify;">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.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><b style="background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">Tkat's All Folks!</b> (É por hoje é só, pessoal!).</div><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><br style="outline: 0px; transition: all 0.3s ease 0s;" /></div><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><a href="https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html" style="background: 0px 0px; border: 0px; color: #446cb3; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;" target="_blank">Aprenda Lua em 15 minutos!</a></div><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"> </div><span style="background: 0px 0px white; border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: </span><a href="https://t.me/asteriskluabr" style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #446cb3; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;" target="_blank">https://t.me/asteriskluabr</a><span style="background: 0px 0px white; border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">).</span></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-62874889391616887052020-12-25T15:50:00.003-03:002020-12-26T14:39:40.737-03:00Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 02)<p><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">Criado por </span><b style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;">Matthew Nicholson</b><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">, modificado pela última vez por </span><b style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;">Rusty Newton</b><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">, tradução técnica e adaptação para o Brasil por </span><b style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;">Angelo Delphini</b><span style="background-color: white; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; text-align: justify;">.</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s1024/AstLUA-BR.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s320/AstLUA-BR.png" /></a></div><div style="text-align: justify;"><br /></div><h3>Interagindo com o Asterisk® SCF™ Dialplan LUA (aplicativos, variáveis e funções)</h3><div style="text-align: justify;">A é feita com interação por meio de uma série de objetos predefinidos fornecidos por <b><span style="color: red;">pbx_lua</span></b>. A tabela <b>app</b> é usada para <b>acessar</b> aplicativos do Dialplan. Qualquer aplicativo do Asterisk® SCF™ pode ser <b>acessado</b> e <b>executado</b> como se fosse uma <b>função</b> anexada à tabela <b>app</b>. <b>Variáveis</b> e <b>funções</b> do Dialplan são acessadas e executadas através da tabela <b>channel</b>.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: left;">Conflitos de nomenclatura entre LUA e <span style="text-align: justify;">Asterisk® SCF™</span></h3>Aplicativos do <span style="text-align: justify;">Asterisk® SCF™</span>, <b>variáveis</b> ou <b>funções</b> cujos nomes entram em <b>conflito</b> com palavras <b>reservadas</b> de LUA ou contêm caracteres especiais devem ser referenciados usando o<b><span style="color: red;"> [ ]</span></b> operador. Por exemplo, LUA 5.2 introduziu a GoTo instrução de controle que conflita com a aplicação GoTo() do Dialplan do <span style="text-align: justify;">Asterisk® SCF™</span>. Então...<p></p><div style="text-align: justify;">O seguinte fará com que <b><span style="color: red;">pbx_lua.so</span></b> falhe ao carregar com LUA 5.2 ou posterior porque <b><span style="color: red;">GoTo</span></b> é uma palavra reservada.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">app.</code><code class="java keyword" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">goto</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">(</code><code class="java string" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">"default"</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">, </code><code class="java value" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">1000</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">, </code><code class="java value" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">1</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;">)</code></div><div style="text-align: justify;"><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><br /></code></div>A seguinte instrução funcionará com todas as versões LUA e o Dialplan do <span style="text-align: justify;">Asterisk® SCF™.</span><div><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><br /></code></div><div><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">app[</code><code class="java string" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">"goto"</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">](</code><code class="java string" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">"default"</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">, </code><code class="java value" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">1000</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">, </code><code class="java value" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">1</code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">)</code></div><div><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><br /></code></div><h3 style="text-align: left;">Aplicativos do Dialplan</h3><div><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b>extensions.lua</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_798457" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">app.playback(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"please-hold"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">)</code></div><div class="line number2 index1 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">, nil, </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"m"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">)</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;">Qualquer aplicativo do Dialplan pode ser executado usando a tabela app. Os nomes dos aplicativos não diferenciam maiúsculas de minúsculas. Mas lembre que as melhores praticas de desenvolvimento de Dialplan, recomenda que seja <b><span style="color: red;">app.HangUp( )</span></b> do que <b>app.hangup( )</b>. Os argumentos são passados para aplicações do Dialplan assim como os argumentos são passados para funções em LUA. Os argumentos de <b>string</b> devem ser colocados entre <b>aspas</b>, pois são <b>strings</b> LUA. Argumentos vazios podem ser passados como strings vazias,<b> nil</b> ou <b>empty</b>.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: left;">Variáveis de Canal</h3><div><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b style="color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px;">Definir uma </b><span style="background-color: transparent; font-size: 14px;"><span face="Helvetica Neue, Helvetica, Arial, sans-serif" style="color: #333333;"><b>variável</b></span></span></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_253781" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">channel.my_variable = </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"my_value"</code></div></div></td></tr></tbody></table></div></div></div></div><div><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; vertical-align: inherit;"><span style="vertical-align: inherit;">Depois disso, a variável de canal </span></span><code style="background-color: white; color: #333333; font-size: 14px;">${my_variable</code><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; vertical-align: inherit;"><span style="vertical-align: inherit;">} contém o valor "my_value".</span></span></div><div><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; vertical-align: inherit;"><span style="vertical-align: inherit;"><br /></span></span></div><div><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b style="color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px;">Lendo uma </b><span style="background-color: transparent; font-size: 14px;"><span face="Helvetica Neue, Helvetica, Arial, sans-serif" style="color: #333333;"><b>variável</b></span></span></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_24415" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">value = channel.my_variable:get()</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;">Qualquer variável de canal pode ser lida e configurada usando a tabela <b>channel</b>. Variáveis LUA, <b>locais</b> e <b>globais</b> podem ser usadas como normalmente fariam e não estão completamente relacionadas com variáveis de canal.</div><div style="text-align: justify;"><br /></div>A seguinte instrução NÃO funcionará.<div><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><br /></code></div><div><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">value = channel.my_variable </code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">-- não funciona como o esperado --</code></div><div><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">-- (value:get() </code><code class="java plain" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><span style="font-family: Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace;"><span style="font-size: 14px; white-space: nowrap;">pode ser usado para obter o valor após esta linha) --</span></span></code></div><div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Se o nome da variável for uma palavra reservada para LUA ou contiver caracteres que LUA considera especiais, devemos usar o <b><span style="color: red;">[ ]</span></b> operador para acessá-los.</div><div style="text-align: justify;"><br /></div><div><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">channel[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"my_variable"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">] = </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"my_value"</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">value = channel[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"my_variable"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">]:get()</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><br /></code></div><h3 style="text-align: left;">Funções Dialplan</h3></div><div><h3 style="text-align: justify;"><div class="code panel pdl" style="background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b>Escrevendo uma função no Dialplan</b></div><div class="codeContent panelContent pdl" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_999749" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">channel.FAXOPT(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"modems"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">):set(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"v17,v27,v29"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">)</code></div></div></td></tr></tbody></table></div></div></div></div><div class="code panel pdl" style="background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; margin: 10px 0px; overflow: auto; padding: 0px; text-align: start;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative;"><b>Lendo uma função do Dialplan</b></div><div class="codeContent panelContent pdl" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_408171" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">value = channel.FAXOPT(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"modems"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">):get()</code></div></div></td></tr></tbody></table></div></div></div></div></h3><h3 style="text-align: justify;"><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;"><span style="vertical-align: inherit;">Observe o uso do </span></span><code style="background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start;">:</code><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;"><span style="vertical-align: inherit;">operador com os </span><span style="vertical-align: inherit;">métodos </span></span><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">get() </code><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;"><span style="vertical-align: inherit;">e </span></span><code style="background-color: white; color: #333333; font-size: 14px; text-align: start;">set()</code><span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; font-weight: 400; text-align: start; vertical-align: inherit;"><span style="vertical-align: inherit;">.</span></span></h3><div style="text-align: justify;">Se o nome da função for uma palavra reservada para LUA ou contiver caracteres que LUA considera especiais, devemos usar o <b><span style="color: red;">[ ]</span></b> operador para acessá-los.</div><h3><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 400; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">channel[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"FAXOPT(modems)"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">] = </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"v17,v27,v29"</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 400; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">value = channel[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"FAXOPT(modems)"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">]:get()</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 400; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><br /></code></div><div style="text-align: left;"><span style="font-weight: normal;">As seguintes instruções NÃO funcionarão.</span></div></h3><h3 style="text-align: justify;"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 400; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">channel.FAXOPT(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"modems"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">) = </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"v17,v27,v29"</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">-- erro de sintaxe --</code></div><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 400; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">value = channel.FAXOPT(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"modems"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">) -- não funciona como esperado -- </code></div><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-weight: 400; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;">-- (value:get() </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><span style="font-family: Consolas, Bitstream Vera Sans Mono, Courier New, Courier, monospace;"><span style="font-size: 14px; font-weight: 400; white-space: nowrap;">pode ser usado para obter o valor após esta linha</span><span style="font-size: 14px; font-weight: 400; white-space: nowrap;">) --</span></span></code></div></h3>Os nomes das funções do Dialplan diferenciam <b>maiúsculas</b> de <b>minúsculas</b>.<br /><h3>Dialplan LUA, dicas e trunques</h3><h3 style="text-align: left;">Operações de longa duração (AutoService)</h3><div style="text-align: justify;">Antes de iniciar operações de longa duração, um <b>AutoService</b> deve ser iniciado usando a função <b><span style="color: red;">autoservice_start( )</span></b>. Um <b>AutoService</b> garantirá que o usuário ouça um fluxo contínuo de áudio enquanto seu código LUA funciona em segundo plano. Este <b>AutoService</b> será interrompido automaticamente antes de executar <b>aplicativos</b> e <b>funções</b> do Dialplan e será reiniciado posteriormente. O AutoService pode ser interrompido usando <b><span style="color: red;">autoservice_stop( )</span></b> e a função <b><span style="color: red;">autoservice_status( )</span></b> retornará <b><span style="color: red;">true</span></b> um <b>AutoService</b> estiver em execução.</div><div style="text-align: justify;"><br /></div><div><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">app.startmusiconhold()</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">autoservice_start()</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">do_expensive_db_query()</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">autoservice_stop()</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">app.stopmusiconhold()</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><br /></code></div><div style="text-align: justify;">No Asterisk® SCF™ 10 e posteriores, um <b>AutoService</b> é iniciado automaticamente para você por padrão.</div><div style="text-align: justify;"><span face="MuseoSans500, sans-serif" style="background-color: white; color: #857866; font-size: 20px; text-align: start;"><br /></span></div><h3 style="text-align: justify;">Definindo Extensões Dinamicamente</h3><div style="text-align: justify;">Como as extensões são <b>funções</b> em <b><span style="color: red;">pbx_lua</span></b>, qualquer função pode ser usada, incluindo encerramentos. Uma função pode ser definida para retornar funções de extensão e usada para preencher a tabela de extensões.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><b>extensions.lua</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_610185" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">extensions = {}</code></div><div class="line number2 index1 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">default</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">= {}</code></div><div class="line number3 index2 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">function sip_exten(e)</code></div><div class="line number5 index4 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">return</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">function()</code></div><div class="line number6 index5 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"SIP/"</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">.. e)</code></div><div class="line number7 index6 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">end</code></div><div class="line number8 index7 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">end</code></div><div class="line number9 index8 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number10 index9 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">[</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">] = sip_exten(</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">)</code></div><div class="line number11 index10 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">[</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">101</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">] = sip_exten(</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">101</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">)</code></div></div></td></tr></tbody></table></div></div></div></div><h3 style="text-align: justify;">Criação de 'aliases' personalizados para construções integradas</h3><div style="text-align: justify;">Se você não gosta que a tabela app seja chamada de '<b>app</b>' ou se acha que digitar '<span face=""Helvetica Neue", Helvetica, Arial, sans-serif" style="background-color: white; color: #333333; font-size: 14px; text-align: start;"><b>channel</b></span>' para acessar a tabela channel é muito trabalhoso, você pode renomeá-los.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><b>Eu prefiro digitar menos</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_207423" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">function my_exten(context, extensions)</code></div><div class="line number2 index1 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">c = channel</code></div><div class="line number3 index2 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">a = app</code></div><div class="line number4 index3 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number5 index4 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">c.my_variable = </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"minha nova variável de canal"</code></div><div class="line number6 index5 alt1" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">a.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">)</code></div><div class="line number7 index6 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">end</code></div></div></td></tr></tbody></table></div></div></div></div><h3 style="text-align: justify;">Redefinindo a função print</h3><div style="text-align: justify;">LUA tem uma função "<b>print</b>" embutida que envia as coisas para o "<b>stdout</b>", mas para o Asterisk® SCF™, preferimos que a saída vá para o log detalhado. Para fazer isso, poderíamos reescrever a função print da seguinte maneira.</div><div style="text-align: justify;"><br /></div><div><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">function print(...)</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">local msg = </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">""</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">for</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">i=</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">,select(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">'#'</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">, ...) </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">do</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">if</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">i == </code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">1</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">then</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">msg = msg .. tostring(select(i, ...))</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">else</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">msg = msg .. </code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">"\t"</code> <code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">.. tostring(select(i, ...))</code></div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">end</code></div><div class="line number9 index8 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">end</code></div><div class="line number10 index9 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number11 index10 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">app.verbose(msg)</code></div><div class="line number12 index11 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">end</code></div><div class="line number12 index11 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><br /></code></div><h3 style="text-align: justify;">Dividindo a configuração em vários arquivos</h3><div style="text-align: justify;"><br /></div><div style="text-align: justify;">O método <b><span style="color: red;">require</span></b> pode ser usado para carregar módulos LUA localizados em <b><span style="color: red;">LUA_PATH</span></b>. O método <b><span style="color: red;">dofile</span></b> pode ser usado para incluir qualquer arquivo por nome de caminho.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Usando Módulos Externos</h3><div style="text-align: justify;">Os módulos LUA podem ser carregados usando o método <b><span style="color: red;">require</span></b> LUA padrão. Algumas das funcionalidades fornecidas por vários módulos LUA já estão incluídas no Asterisk® SCF™ (por exemplo, <b>func_odbc</b> que fornece o que <b>LuaSQL</b> fornece). Geralmente é melhor usar código embutido no Asterisk® SCF™ em vez de módulos LUA externos. Especificamente, o módulo <b><span style="color: red;">func_odbc</span></b> usa um pool de conexão para fornecer recursos de banco de dados, onde, como com <b><span style="color: red;">LuaSQL</span></b>, cada canal teria que fazer uma nova conexão com o banco de dados por conta própria.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Compilando extensions.lua</h3><div style="text-align: justify;">O programa <b><span style="color: red;">luac</span></b> pode ser usado para compilar seu arquivo <b><span style="color: red;">extensions.lua</span></b> em bytecode LUA. Isso aumentará um pouco o desempenho, pois o <b>pbx_lua</b> não precisará mais analisar <b><span style="color: red;">extensions.lua</span></b> durante o carregamento. O compilador <b><span style="color: red;">luac</span></b> também detectará e relatará quaisquer erros de sintaxe. Para usar <b>luac</b>, renomeie seu arquivo extensions.lua e execute o seguinte.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1em; margin: 0px; overflow: hidden; padding: 5px 15px; position: relative; text-align: left;"><b>Suponha que você nomeie seu arquivo extensions.lua para extensions.lua.lua</b></div><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_198832" style="font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1236px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: 1236px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; vertical-align: baseline; width: 1221px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background-attachment: initial; background-clip: initial; background-image: none; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; vertical-align: baseline; width: auto;">luac -o extensions.lua extensions.lua.lua</code></div></div></td></tr></tbody></table></div></div></div></div><div style="text-align: justify;">O módulo <b><span style="color: red;">pbx_lua</span></b> reconhece automaticamente a diferença entre um arquivo de texto LUA e um arquivo de bytecode LUA.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><b style="background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">Tkat's All Folks!</b> (É por hoje é só, pessoal!).</div><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><br style="outline: 0px; transition: all 0.3s ease 0s;" /></div><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><a href="https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html" style="background: 0px 0px; border: 0px; color: #446cb3; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;" target="_blank">Aprenda Lua em 15 minutos!</a></div><div style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #5e5e5e; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"> </div><span face=""Open Sans", sans-serif" style="background-color: white; color: #5e5e5e; font-size: 15px;">Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: </span><a href="https://t.me/asteriskluabr" style="background: 0px 0px rgb(255, 255, 255); border: 0px; color: #446cb3; font-family: "Open Sans", sans-serif; font-size: 15px; outline: 0px; padding: 0px; text-decoration-line: none; transition: all 0.3s ease 0s; vertical-align: baseline;" target="_blank">https://t.me/asteriskluabr</a><span face=""Open Sans", sans-serif" style="background-color: white; color: #5e5e5e; font-size: 15px;">).</span></div></div></div></div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-47730796871918233712020-12-24T12:58:00.006-03:002020-12-26T14:43:22.262-03:00Asterisk® SCF™ + LUA: Configuração do LUA Dialplan (parte 01)<div style="text-align: justify;"><div class="separator" style="clear: both; text-align: left;"><span style="text-align: justify;">Criado por </span><b style="text-align: justify;">Matthew Nicholson</b><span style="text-align: justify;">, modificado pela última vez por </span><b style="text-align: justify;">Rusty Newton</b><span style="text-align: justify;">, tradução técnica e adaptação para o Brasil por </span><b style="text-align: justify;">Angelo Delphini</b><span style="text-align: justify;">.</span></div><div class="separator" style="clear: both; text-align: center;"><span style="text-align: justify;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s1024/AstLUA-BR.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s320/AstLUA-BR.png" /></a></div><br />O Asterisk® SCF™ suporta a habilidade de escrever instruções de Dialplan na linguagem de programação <b><a href="https://www.lua.org/portugues.html" target="_blank">LUA</a></b>. Este método pode ser usado como alternativa ou em combinação com <span style="color: #2b00fe;"><b>extensions.conf </b></span>e/ou <span style="color: #2b00fe;"><b>AEL</b></span>. O PBX LUA permite que os usuários usem todo o poder de <span style="color: #2b00fe;"><b>LUA</b></span> para desenvolver aplicativos de telefonia usando o Asterisk® SCF™. A configuração do Dialplan LUA é feita no arquivo <span style="color: red;"><b>extensions.lua</b></span>. Lembro que o CORE/PBX do Asterisk® SCF™ aceita que os três arquivos seja utilizado pelo Dialplan simultaneamente <b>extensions.conf</b>, <b>extensions.ael</b> e <b>extensions.lua</b>. </div><br /><h3 style="text-align: left;">Dependências</h3><div style="text-align: justify;">Para usar o <span style="color: red;"><b>pbx_lua</b></span>, as bibliotecas de desenvolvimento lua devem ser instaladas antes que o Asterisk® SCF™ seja configurado e compilado. Você pode obter essas bibliotecas diretamente em <a href="http://lua.org" target="_blank">http://lua.org</a> , mas é mais fácil instalá-las usando a ferramenta de gerenciamento de pacotes da sua distribuição. O pacote provavelmente é denominado <span style="color: red;"><b>liblua5.1-dev</b></span>, <span style="color: red;"><b>liblua-dev</b></span> ou <span style="color: red;"><b>lua-devel</b></span>, dependendo de sua distribuição <b>GNU/Linux</b>.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><h3>PBX LUA Básico </h3></div><div style="text-align: justify;">O arquivo <span style="color: red;"><b>extensions.lua</b></span> é usado para configurar <b>PBX LUA</b> e é um Script LUA (em oposição a ser um arquivo de configuração de Asterisk® SCF™ padrão). Qualquer coisa que seja um código LUA adequado é permitido neste arquivo. O Asterisk® SCF™ espera encontrar uma tabela global chamada '<span style="color: red;"><b>extensions</b></span>' quando o arquivo for carregado. Esta tabela pode ser gerada como você desejar. A maneira mais simples é definir todas as extensões em linha, mas para Dialplans mais complexos podem ser necessários métodos alternativos.<br /><br />Cada extensão é uma <b>função</b> LUA que é executada quando um canal chega a essa extensão. A função de extensão recebe o contexto atual e a extensão como os dois primeiros argumentos. Eles podem ser ignorados com segurança, se desejado. Não há prioridades (cada função de extensão é tratada como prioridade 1 pelo resto do Asterisk® SCF™). Os padrões são permitidos exatamente como em <span style="color: red;"><b>extensions.conf</b></span> e a <b>ordem de correspondência é idêntica</b>. </div><div style="text-align: justify;"> </div><div style="text-align: justify;"><div class="codeHeader panelHeader pdl" style="-webkit-text-stroke-width: 0px; background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1em; margin: 0px; orphans: 2; overflow: hidden; padding: 5px 15px; position: relative; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><b style="color: #333333;">extensions.lua</b></div><div class="codeContent panelContent pdl" style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 20px; margin: 0px; orphans: 2; overflow: hidden; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_254150" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1639.77px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none 0% 0% repeat scroll rgba(0, 0, 0, 0); border-radius: 0px; border: 0px none; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 1638.75px;"><tbody style="background: none 0% 0% repeat scroll rgba(0, 0, 0, 0); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none 0% 0% repeat scroll rgba(0, 0, 0, 0); border-radius: 0px; border: 0px none; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 1623.77px;"><div class="container" style="background: none 0% 0% repeat scroll rgba(0, 0, 0, 0); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions = {</code></div><div class="line number2 index1 alt1" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">= {</code></div><div class="line number3 index2 alt2" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function(context, extension)</code></div><div class="line number4 index3 alt1" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.playback(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"please-hold"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number5 index4 alt2" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,<span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">60</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number6 index5 alt1" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end;</code></div><div class="line number7 index6 alt2" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number8 index7 alt1" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"101"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function(c, e)</code></div><div class="line number9 index8 alt2" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/101"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,<span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">60</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number10 index9 alt1" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end;</code></div><div class="line number11 index10 alt2" style="background: none 0% 0% repeat scroll rgb(255, 255, 255); border-radius: 0px; border: 0px none; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: currentcolor none 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">}</code></div></div></td></tr></tbody></table></div></div></div>O arquivo extensions.lua pode ser recarregado, recarregando o módulo <span style="color: red;"><b>pbx_lua</b></span>.</div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: nowrap; widows: 2; word-spacing: 0px;"> </span></div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: white; color: black; display: inline; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: nowrap; widows: 2; word-spacing: 0px;">*CLI> module reload pbx_lua</span> <br /></div><div style="text-align: justify;"> </div><div style="text-align: justify;">Se houver erros no arquivo, eles serão relatados (no *CLI>) e o arquivo <span style="color: red;"><b>extensions.lua</b></span> existente permanecerá em uso (tal como é com o <b>CONF</b> e <b>AEL</b>). </div><div style="text-align: justify;"> </div><div style="text-align: justify;">Os canais que existiam antes do comando <span style="color: red;"><b>reload</b></span> ser emitido também continuarão a usar o arquivo <span style="color: red;"><b>extensions.lua</b></span> <b>existente</b>. </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Somente após o arquivo ser validado pelo módulo pbx_lua.so que será carregado no CORE/PBX em produção. Lembrando que é altamente recomendado que faça uso somente da versão <a href="https://downloads.asterisk.org/pub/telephony/certified-asterisk/" target="_blank">Certified</a> do Asterisk® SCF™ para produção junto ao seu cliente. <br /></div><div><br /> <div style="text-align: justify;"></div><div style="text-align: justify;">OBS: Os erros de tempo de execução são registrados e o canal no qual o erro ocorreu é desligado. Logo nunca faça manutenção em seu Dialplan em produção. </div><div style="text-align: justify;"> </div><div style="text-align: justify;"><h2>Referência Dialplan para LUA</h2></div><div style="text-align: justify;"></div><div style="text-align: justify;">Abaixo está uma referência rápida que pode ser usada para traduzir os conceitos tradicionais do Dialplan em extensions.conf para o poder do extensions.lua.</div><div style="text-align: justify;"><ul><li>Padrões de extensões (Extension Patternes);</li><li>Include em contextos (Context Includes);</li><li>Rotações (Loops);</li><li>Variáveis (Variables);</li><li>Formularios (Applications);</li><li>Macros/GoSub;</li><li>Goto;</li></ul><h3>Padrões de extensões (Extension Patternes)</h3><p>A sintaxe de correspondência de padrão de extensão na lógica funciona da mesma forma para extensions.conf e extensions.lua.</p><h2 id="DialplantoLuaReference-extensions.conf" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_987297" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[users]</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten => _1XX,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Dial(SIP/${EXTEN})</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten => _2XX,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Voicemail(${EXTEN:</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">})</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_415611" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions = {}</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.users = {}</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.users[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"_1XX"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function(c, e)</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/"</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">.. e)</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.users[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"_2XX"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function(c, e)</code></div><div class="line number9 index8 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.voicemail(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"1"</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">.. e:sub(</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">2</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">))</code></div><div class="line number10 index9 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div></div></td></tr></tbody></table></div></div></div></div><h3>Include em contextos (Context Includes) <br /></h3><h2 id="DialplantoLuaReference-extensions.conf.1" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_819944" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[users]</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Noop</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,Dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[demo]</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten => s,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Noop</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten => s,n,Playback(demo-congrats)</code></div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number9 index8 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">]</code></div><div class="line number10 index9 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">include => demo</code></div><div class="line number11 index10 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">include => users</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua.1" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_716414" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions = {</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">users = {</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function()</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end;</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">};</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">demo = {</code></div><div class="line number9 index8 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"s"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function()</code></div><div class="line number10 index9 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.playback(demo-congrats)</code></div><div class="line number11 index10 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end;</code></div><div class="line number12 index11 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">};</code></div><div class="line number13 index12 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code> </div><div class="line number14 index13 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">= {</code></div><div class="line number15 index14 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">include = {</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"demo"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,<span> </span></code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"users"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">};</code></div><div class="line number16 index15 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">};</code></div><div class="line number17 index16 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">}</code></div></div></td></tr></tbody></table></div></div></div></div><p> </p><h3>Rotações (Loops) <br /></h3><h2 id="DialplantoLuaReference-extensions.conf.2" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_179152" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Noop</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,Set(i=</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">0</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,While($[i <<span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">10</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">])</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,Verbose(i = ${i})</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,EndWhile</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua.2" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_31724" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">i =<span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">0</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">while</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">i <<span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">10</code><span> </span><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">do</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.verbose(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"i = "</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">.. i)</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div></div></td></tr></tbody></table></div></div></div></div> </div><div style="text-align: justify;"><h3>Variáveis (Variables)</h3><h2 id="DialplantoLuaReference-extensions.conf.3" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_340006" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Set(my_variable=my_value)</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,Verbose(my_variable = ${my_variable})</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua.3" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_3170" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">channel.my_variable =<span> </span></code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"my_value"</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.verbose(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"my_variable = "</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">.. channel.my_variable:get())</code></div></div></td></tr></tbody></table></div></div></div></div><p> </p><h3>Formularios (Applications) <br /></h3><h2 id="DialplantoLuaReference-extensions.conf.4" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_111794" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,,m)</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua.4" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_380272" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">, nil,<span> </span></code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"m"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div></div></td></tr></tbody></table></div></div></div></div><h3>Macros/GoSub <br /></h3><p>As MACROS pode ser definidas em pbx_lua nomeando um contexto "macro-*" assim como em extensions.conf, mas geralmente onde você usaria macros ou GoSub em extensions.conf você simplesmente usaria uma função em LUA.</p><p></p><h2 id="DialplantoLuaReference-extensions.conf.5" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_741198" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[macro-dial]</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten => s,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Noop</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten => s,n,Dial(${ARG1})</code></div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">]</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Macro(dial,SIP/</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua.5" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_996658" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions = {}</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">= {}</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">function dial(resource)</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.dial(resource)</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function()</code></div><div class="line number9 index8 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">dial(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"SIP/100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number10 index9 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div></div></td></tr></tbody></table></div></div></div></div><p> </p><p>GoTo</p><p>Embora <b>GoTo</b> seja um STAPLE (grampo) extensions.conf, geralmente deve ser evitado em PBX_LUA em favor de funções.</p><h2 id="DialplantoLuaReference-extensions.conf.6" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.conf</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_60988" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 796.291px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 796.252px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 781.271px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">]</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Goto(</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">102</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">102</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,Playback(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"demo-thanks"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">exten =><span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">102</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,n,Hangup</code></div></div></td></tr></tbody></table></div></div></div></div><h2 id="DialplantoLuaReference-extensions.lua.6" style="-webkit-text-stroke-width: 0px; background-color: #f0f0f0; border-bottom-color: rgb(204, 204, 204); color: #857866; font-family: MuseoSans500, sans-serif; font-size: 20px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; line-height: 1.5; margin: 0px; orphans: 2; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;">extensions.lua</h2><div class="code panel pdl" style="-webkit-text-stroke-width: 0px; background-color: white; border-radius: 5px; border: 1px dashed rgb(187, 187, 187); color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; margin: 10px 0px; orphans: 2; overflow: auto; padding: 0px; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div class="codeContent panelContent pdl" style="background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-size: 14px; line-height: 20px; margin: 0px; overflow: hidden; padding: 0px; text-align: left;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_704651" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 775.061px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 775.002px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 760.021px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions = {}</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">= {}</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">function do_hangup()</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.playback(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"demo-thanks"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.hangup()</code></div><div class="line number7 index6 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div><div class="line number8 index7 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number9 index8 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">extensions.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">default</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">[</code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">100</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">] = function()</code></div><div class="line number10 index9 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">do_hangup()</code></div><div class="line number11 index10 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div></div></td></tr></tbody></table></div></div></div></div><p>A função app.goto() não funcionará como esperado em pbx_lua em Asterisk® SCF™ versão 1.8 ou inferior. Se você precisar usar a função app.goto() deve retornar manualmente o controle para o Asterisk® SCF™ usando o return para a função de extensão do Dialplan, caso contrário, a execução continuará após a chamada para app.goto(). As chamadas para app.goto() devem funcionar como esperado para o Asterisk® SCF™ versão 10 e superiores, mas ainda não devem ser necessarias na maioria dos casos.</p><div class="codeHeader panelHeader pdl" style="-webkit-text-stroke-width: 0px; background: rgb(245, 245, 245); border-bottom: 1px solid rgb(204, 204, 204); border-top-left-radius: 5px; border-top-right-radius: 5px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 1em; margin: 0px; orphans: 2; overflow: hidden; padding: 5px 15px; position: relative; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><b style="color: #333333;">In Asterisk 1.8, use return</b></div><div class="codeContent panelContent pdl" style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255); border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; color: #333333; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; line-height: 20px; margin: 0px; orphans: 2; overflow: hidden; padding: 0px; text-align: left; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;"><div style="margin: 0px; padding: 0px;"><div class="syntaxhighlighter nogutter java" id="highlighter_754224" style="background-color: white; font-size: 1em; margin: 0px; overflow: auto; padding: 0px; position: relative; width: 1591.29px;"><table border="0" cellpadding="0" cellspacing="0" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: 1591.25px;"><tbody style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><tr style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"><td class="code" style="background-attachment: initial !important; background-clip: initial !important; background-color: white; background-image: none !important; background-origin: initial !important; background-position: initial !important; background-repeat: initial !important; background-size: initial !important; background: none white; border-color: initial !important; border-image: initial !important; border-radius: 0px; border-style: dashed; border-width: 0px !important; border: 0px dashed; box-sizing: content-box; color: #333333; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 0px 15px; position: static; text-align: left; vertical-align: baseline; width: 1576.27px;"><div class="container" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 15px 0px 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 0px 15px; position: relative; text-align: left; vertical-align: baseline; white-space: pre-wrap; width: auto;" title="Hint: double-click to select code"><div class="line number1 index0 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">function extension_function(c, e)</code></div><div class="line number2 index1 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">return</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.</code><code class="java keyword" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #336699; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: bold; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">goto</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"default"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,<span> </span></code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"100"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">,<span> </span></code><code class="java value" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #009900; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">1</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number3 index2 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"> </div><div class="line number4 index3 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">-- without that<span> </span></code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">'return'</code><span> </span><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">the rest of the function would execute normally</code></div><div class="line number5 index4 alt2" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java spaces" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;"> </code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">app.verbose(</code><code class="java string" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: #003366; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">"Did you forget to use 'return'?"</code><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">)</code></div><div class="line number6 index5 alt1" style="background: none rgb(255, 255, 255); border-radius: 0px; border: 0px; box-sizing: content-box; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px 1em 0px 0px; position: static; text-align: left; vertical-align: baseline; white-space: nowrap; width: auto;"><code class="java plain" style="background: none; border-radius: 0px; border: 0px; box-sizing: content-box; color: black; float: none; font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; font-size: 14px; font-style: normal; font-weight: normal; height: auto; inset: auto; line-height: 20px; margin: 0px; min-height: auto; outline: 0px; overflow: visible; padding: 0px; position: static; text-align: left; vertical-align: baseline; width: auto;">end</code></div></div></td></tr></tbody></table></div></div></div><p></p><div style="text-align: justify;"><b>Tkat's All Folks!</b> (É por hoje é só, pessoal!).</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html" target="_blank">Aprenda Lua em 15 minutos!</a></div><div style="text-align: justify;"> </div>Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos
em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: <a href="https://t.me/asteriskluabr" target="_blank">https://t.me/asteriskluabr</a>).</div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-65631348477720068402020-12-23T14:57:00.002-03:002020-12-23T14:57:16.682-03:00Asterisk® SCF™ + LUA: IVR e alguns outros pontos<div style="text-align: justify;"></div><p style="text-align: left;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s1024/AstLUA-BR.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://1.bp.blogspot.com/-9hxE8FE-TH0/V9hTk9I3lYI/AAAAAAAAC1U/TiX9toyjmAoCHduaDwhpU470o5YBOvSAwCPcBGAYYCw/s320/AstLUA-BR.png" /></a></div><div style="text-align: justify;">Olá de novo! IVR - hoje não é nem um recurso, mas um certo padrão para as empresas. Em alguns casos, essencial, tanto para clientes, quanto para as empresas, os concorrentes, acreditam que, se esse IVR não estiver lá, então “lá” a qualidade dos serviços prestados é baixa ou de nenhuma qualidade. Você não vai surpreender ninguém se não tiver um IVR, pelo menos básico, hoje em dia. No entanto, estamos falando sobre a implementação do IVR na linguagem LUA sob o Asterisk® SCF™. E se você está mudando de um Dialplan regular (<span style="color: #2b00fe;"><b>extensions.conf</b></span>) para LUA, há algo a esclarecer aqui.<br /><br />Suponha que você já tenha os arquivos necessários (prompt de áudios) para o menu e eles estejam na pasta certa. É importante ter certeza que eles estão na configuração correta de áudio para telefonia. Você pode fazer isso usando o <a href="https://wiki.bicomsystems.com/PBXware_Sound_Converter_Wizard" target="_blank"><span style="color: #2b00fe;"><b>PBXware Sound Converter Wizard</b></span></a>. Então, ao descrever o menu de voz (ou Portal de Voz) em LUA, fazemos (eu fiz) o seguinte:<br /><br />Descrevemos em algum lugar no início do arquivo uma pasta com os arquivos (prompt de áudios). Tudo é mais conveniente em um lugar para mudar, se necessário:</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">mhold = {
m_hello = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/message_01"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Cumprimento --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
m_menu = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/message_02"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Descrição do menu --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
m_thx = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/message_05"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Obrigado por escolher nossa empresa --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
good_day = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/wav_gd_2"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Tenha um bom dia --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
comerc = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/com_1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Digite 1 para algo --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
live = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/live_2"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Bem, etc. Outras escolhas e Dígitos --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
other = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"custom/other_3"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
}</span></div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span></div><div style="text-align: justify;">Assim, você descreveu nesse bloco, a pasta, e os campos que indicam os arquivos utilizados. No meu caso - arquivos com uma saudação, algumas palavras de agradecimento e uma seleção do menu. Havia também uma opção de backup (por precaução), em que cada menu era dividido em seu próprio arquivo ...<br /><br />Além disso, no primeiro artigo, na descrição das chamadas recebidas, na função <b>foo()</b> indiquei a chamada <b>ivr()</b>. Então, na verdade, no meu exemplo funcionou assim: <b>Evento => Chamada de entrada</b>. Chamando <b>foo()</b>. Verificando <b>algumas condições</b> => <b>tocando saudação</b> => <b>chamando ivr()</b>. Toquei a saudação antes de chamar <b>ivr()</b>. <br /></div><div style="text-align: left;"> <div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span> </div><div style="text-align: justify;"><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-title" style="color: #4078f2;">ivr</span><span class="hljs-params">(d)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Portal de Voz Ativado!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DID: "</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..d)
app.background(mhold.m_menu,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"menu"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.waitexten(</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">3</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">return</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span></div><div style="text-align: justify;"></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Não é um recurso tão sofisticado. <span style="color: #2b00fe;"><b>app.background</b></span> aqui é uma chamada do núcleo (CORE/LOCAL) do Asterisk® SCF™, usado no <b>Portal de Voz/IVR/URA</b>. Mas, ao mesmo tempo, você também precisa fazer uma descrição do evento do menu nas extensões:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">menu = {
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">(c,e)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Calling from menu by 1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.playback(mhold.m_thx)
CallSKS() </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Para o manipulador de chamadas SAC --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"2"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">(c,e)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Calling from menu by 2"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.playback(mhold.m_thx)
app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4690"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Aqui é onde eu ligo para assinantes em grupos ao mesmo tempo --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"3"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">(c,e)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Calling from menu by 3"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.playback(mhold.m_thx)
app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4579"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">(c,e)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Calling from menu by 4"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.playback(mhold.m_thx)
CallSKS() </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Também é uma opção para entrar em contato com o SAC --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
};</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Ao mesmo tempo, na descrição das chamadas recebidas <b>from_trunk</b>, você precisa adicionar processamento de tempo limite (TIMING), caso contrário, se o cliente não fez uma escolha dentro do tempo exigido, o cliente ouvirá bipes curtos e no console do Asterisk® SCF™ você verá um erro de execução de código.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">from_trunk = {
t = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">()</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.playback(mhold.m_thx)
app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"7090"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
</span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Além do resto da descrição dos eventos --</span> <br /></div><div style="text-align: justify;"> </div><div style="text-align: justify;">Tudo parece ser sobre Portal de Voz/IVR/URA. Agora mais uma coisa: o tempo limite da ligação (TIMING). Sim, infelizmente eu também tive que fazer isso. Havia pessoas na empresa que adorava longa distância (DDD), por mês, dezenas de minutos de DDD foram pagos. - conversando por horas com amigos, namoradas, irmãos, etc. Claro, essas pessoas eram punidas, além de pagar a conta que é um uso particular, mas a posição da administração era tal que era preciso trabalhar durante o horario de trabalho. Eles pediram para limitar os usários durante o periodo de trabalho O exemplo a seguir mostrará como você pode fazer isso globalmente, com a devida aprovação da diretoria da empresa (acredito que tenha uma melhor opção que a adotada).</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Em algum lugar dentro da função trunk_test -- </span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">len</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(num) > </span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">7</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">and</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">not</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">find</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">sub</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(num,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">4</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">),</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"8383"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"A duração da chamada é limitada a 10 minutos!!!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.dial(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"%s%s,60,tTL(600000:480000:60000)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,trunk.startel,num))
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">else</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Chamada Cidade - LDD."</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.dial(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"%s%s,60,tT"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline !important; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,trunk.startel,num))
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span> </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Nesse caso, fiz uma seleção pelo número de caracteres do número discado. Se o número de caracteres exceder o número de caracteres em nossa cidade (LDD - Local Direct Dialing), excluindo nosso código de cidade, então esta é uma chamada de longa distância (DDD - Discagem Direta a Distância). Os celulares locais são processados separadamente, portanto, esta regra não se enquadra nesta regra (no artigo sobre códigos DEF deixo isso mais claro). Mas o celular intermunicipal - bateu. No meu exemplo, o limite é de 10 minutos. em 7 (ou 8?) minutos, o assinante ouve um leve bipe. Nesta função, você pode adicionar o processamento de apenas "informações" específicos. Você pode colocar esses áudios informativos na tabela e pegar eles via UnixODBC via banco de dados mysql, ou o que quiser.</div><div style="text-align: justify;"><br style="-webkit-text-stroke-width: 0px; background-color: white; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;" /></div><div style="text-align: justify;"><div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-family: "Open Sans", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; outline: currentcolor none 0px; padding: 0px; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; transition: all 0.3s ease 0s; vertical-align: baseline; white-space: normal; word-spacing: 0px;"><span style="color: black;"><b style="background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">Tkat's All Folks!</b><span> </span>(É por hoje é só, pessoal!).</span></div><div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-family: "Open Sans", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; outline: currentcolor none 0px; padding: 0px; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; transition: all 0.3s ease 0s; vertical-align: baseline; white-space: normal; word-spacing: 0px;"><span style="color: black;"><br style="outline: 0px; transition: all 0.3s ease 0s;" /></span></div><div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-family: "Open Sans", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; outline: currentcolor none 0px; padding: 0px; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; transition: all 0.3s ease 0s; vertical-align: baseline; white-space: normal; word-spacing: 0px;"><span style="color: black;"><a href="https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; text-decoration: none; transition: all 0.3s ease 0s; vertical-align: baseline;" target="_blank">Aprenda Lua em 15 minutos!</a></span></div><div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-family: "Open Sans", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; outline: currentcolor none 0px; padding: 0px; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; transition: all 0.3s ease 0s; vertical-align: baseline; white-space: normal; word-spacing: 0px;"><span style="color: black;"> </span></div><div style="-webkit-text-stroke-width: 0px; background: rgb(255, 255, 255) none repeat scroll 0px 0px; border: 0px none; font-family: "Open Sans", sans-serif; font-size: 15px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; outline: currentcolor none 0px; padding: 0px; text-align: justify; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; transition: all 0.3s ease 0s; vertical-align: baseline; white-space: normal; word-spacing: 0px;"><span style="color: black;">Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: <a href="https://t.me/asteriskluabr" style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; outline: currentcolor none 0px; padding: 0px; text-decoration: none; transition: all 0.3s ease 0s; vertical-align: baseline;" target="_blank">https://t.me/asteriskluabr</a>)</span></div></div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-78258244297556509712020-12-18T14:19:00.004-03:002020-12-18T14:23:45.593-03:00Asterisk® SCF™ + LUA: Dialplan em LUA<div class="separator" style="clear: both; text-align: center;"><a href="https://1.bp.blogspot.com/-k_FBVZD0Syg/X9zlJa1SQBI/AAAAAAAAEh0/ZAkEOCwyer86LXHKxX9GiDzDKpn-0T20QCNcBGAsYHQ/s1024/AstLUA-BR.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1024" height="320" src="https://1.bp.blogspot.com/-k_FBVZD0Syg/X9zlJa1SQBI/AAAAAAAAEh0/ZAkEOCwyer86LXHKxX9GiDzDKpn-0T20QCNcBGAsYHQ/s320/AstLUA-BR.png" /></a></div><div style="text-align: center;"></div><div style="text-align: left;"><div style="text-align: justify;"></div><p style="text-align: justify;"> Saudações a todos. Era uma vez, um tópico de usar a linguagem de programação LUA para escrever um Dialplan no Asterisk® SCF™, era muito difícil para mim. O fato é que eu não gosto muito de trabalhar com GUIs (como FreePBX, Issabel, Trixbox, etc.) ao configurar o Asterisk® SCF™.<br /><br />Quando configurei tudo pela primeira vez, funcionou com as extensões lineares usuais (<span style="color: #2b00fe;"><b>extensions.conf</b></span>). Com o passar do tempo, a demanda por funcionalidade de telefonia cresceu. Aos poucos fui aprendendo a linguagem LUA. E então comecei a trabalhar como administrador em uma grande empresa em nossa cidade (uma grande imobiliária) - havia cerca de 45 filiais naquela época, cerca de 650-700 usuários, incluindo intermunicipais, etc. O Asterisk® SCF™, já estava lá, mas tudo foi configurado usando o FreePBX. Uma lastima!</p><div style="text-align: justify;">Quase imediatamente, a gerência começou a me bombardear com várias perguntas sobre os sinos, apitos e renas do Asterisk® SCF™. Por exemplo, eles queriam distribuir chamadas aleatoriamente dentro da agência quando uma chamada era recebida em uma agência. Queríamos ter uma gravação das conversas em MP3, queríamos fazer um grupo geral, onde todos os ramos pudessem ser incluídos em geral, e ao discar um determinado número, para chegar acidentalmente a um dos ramos, etc. As tarefas parecem ser simples, mas eu pessoalmente não estava muito interessado em sentar para resolver até mesmo essas questões usando uma interface gráfica.</div><div style="text-align: justify;"> </div><div style="text-align: justify;">Havia mais um ponto importante - a qualidade do trabalho de telefonia em geral naquela época era simplesmente terrível. A voz gorgolejava constantemente, as chamadas eram interrompidas, o assinante não era ouvido, o próprio Asterisk® SCF™ travava com frequência (problemas com o channel_sip.so), etc. Eu vejo o arquivo Dialplan (extensions.conf), e ele tem <b>16 MB</b>. Abri com um editor de texto - <b>e o que posso fazer?</b> Existem vários milhões de linhas.</div><div style="text-align: justify;"> </div><div style="text-align: justify;">Resolvi refazer, jogando tudo para LUA (<span style="color: #2b00fe;"><b>extensions.lua</b></span>). Cerca de alguns dias após o início do desenvolvimento, já consegui apresentar o primeiro protótipo de um Dialplan em LUA, bastante funcional, mas sem os "<b>recursos</b>" e "<b>ajustes</b>" existentes. Substituí toda a configuração antiga por ele e, em uma semana, acrescentei os recursos básicos que a gerência queria ver. Eu também atualizei o próprio Asterisk® SCF™ para a versão 11ª (na época 11.3.0, ao que parece). Além disso, no processo de trabalho, às vezes eu olhava para o arquivo Dialplan e analisava o que de fato a gerência queria ou não queria. Como resultado, o Asterisk® SCF™ com o Dialplan LUA funcionou muito mais rápido e mais estável do que o anterior. Acredito que por não ter o LAMP instalado, e nem a GUI pesada do FreePBX.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: left;">As condições em que a "estação" funcionou:</h3><div style="text-align: justify;"><ul><li><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">CPU: intel xeon e5520 (se não me engano);</span></span><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;"> <br /></span></span></li><li><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">RAM: 24gb;</span></span><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;"> </span></span></li><li><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">E outros parâmetros de "hardware", incluindo duas interfaces de rede Gigabit e </span></span><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">e uma rede VPN;</span></span></li><li><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">A</span><span style="vertical-align: inherit;">ssinantes internos: cerca de 700;</span></span><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;"> </span></span></li><li><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">Número de troncos: cerca de 10 (dos quais 2 são ITSP/VoIP, o resto são Gateways GSM/GoIP);</span></span><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;"> </span></span></li><li><span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif" style="-webkit-text-stroke-width: 0px; background-color: white; color: #222222; font-size: 16px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; vertical-align: inherit; white-space: normal; widows: 2; word-spacing: 0px;"><span style="vertical-align: inherit;">O número de "cidades": cerca de 200 (150 números de um ITSP/VoIP e cerca de 50 ou um pouco mais do segundo ITSP/VoIP).</span></span></li></ul></div><p style="text-align: left;">Os números das cidades aqui foram atribuídos a cada filial. Alguns ramos têm até dois ou três números. Como todas as chamadas da cidade chegaram em contexto, analisei por DID e passei a chamada para a agência desejada.</p><p style="text-align: justify;">Usando APPs no Dialplan LUA, implementei grupos de toque, fiz duas opções para ligar para um assinante - aleatório e na ordem de listagem no grupo (exceto para assinantes ocupados). Eu configurei o LUA-SQL para gravar minha própria base de chamadas (além do CDR em ARA). Isso foi feito pelo seguinte motivo: o funcionário liga para o cliente no celular, o cliente não quer falar agora (ocupado ou outra coisa); depois de um tempo, ele liga para um número previamente definido e deve falar com o mesmo funcionário que ligou para ele antes. Eu fiz um registro do evento "<span style="color: red;"><b>call to mobile</b></span>" em um banco de dados separado. Quando um cliente liga de volta de seu celular, eu atendo a última ligação do evento “<span style="color: red;"><b>ligação de celular</b></span>” e mando o cliente para o funcionário certo. Apenas um desses funcionários foi lembrado. Essa. se outro funcionário ligar para este cliente. então, consequentemente, a chamada retornará para ele.</p><p style="text-align: justify;">Agora não trabalho mais naquela empresa, e onde estou agora, mudei o antigo PABX para um Softswitch PBX IP baseado em Asterisk® SCF™ e, claro, usei meu desenvolvimento do meu antigo trabalho. Lembrei-me que o assunto não era interessante só para mim. Bom, como há muito pouca informação sobre esse assunto, resolvi postar esse post aqui, de repente ele vai ser útil para alguém. Ou até mesmo para mim. Quem sabe?</p><p style="text-align: justify;">Agora, irei ao cerne do assunto - codificação em LUA. Não vou descrever o estágio de ativação do módulo <span style="color: red;"><b>pbx_lua.so</b></span> - há muitas informações <b><a href="https://wiki.asterisk.org/wiki/display/AST/Lua+Dialplan+Configuration" target="_blank">aqui</a></b>. Por exemplo, agora que tenho Centos 7.8, já tem LUA no repositório do mesmo. Eu apenas adicionei o pacote <span style="color: red;"><b>LUA-DEVEL</b></span> e incluí o módulo <span style="color: red;"><b>pbx_lua.so</b></span> em <span style="color: red;"><b>menuselect</b></span>.<br /><br />Além disso, se alguém vai usar uma conexão manual com o mysql (ou com outro banco de dados), então é melhor baixar o pacote <span style="color: red;"><b>LUA-SQL</b></span>, tendo instalado o <span style="color: red;"><b>LUAROCKS</b></span> previamente e baixando este add-on de lá.<br /><br />Mais adiante no próprio plano de discagem, você pode descrever usuários e regras de discagem, algo assim:</p><p style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">extensions = {
};
local_ext = { </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Quando um assinante externo pegou o telefone e discou para outro assinante externo --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
h = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">()</span></span> <span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Manipulador do HangUp() --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.stopmixmonitor()
d_status = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DIALSTATUS"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> d_status ~= </span><span class="hljs-literal" style="-webkit-text-stroke-width: 0px; color: #0184bb; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">nil</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Status do Dial...:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..d_status)
</span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Por exemplo, se o assinante não conseguir, então sobrescreveremos o nome do arquivo no bando de dados (CDR) --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> d_status ~= </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"ANSWER"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CDR(recordingfile)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:set(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Boa Compra!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.hangup()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
app.hangup()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"_14XXX"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = call_local;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"_21XX"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = call_local;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"_4595"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = call_all; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Esta não é a descrição de um número, mas um grupo de números. Ao discar, ligamos para um número aleatório do grupo --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"_*99"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">()</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Isso foi adicionado especialmente para forçar a ativação do DND (muito interessante). -- </span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">local</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> cid, dnd
app.answer()
cid = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CALLERID(num)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
dnd = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DB(DND/"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..cid..</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"/)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DND:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..dnd)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> dnd == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DB_DELETE(DND/"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..cid..</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"/)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.playback(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"beep"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.playback(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"beep"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.hangup()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">else</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DB(DND/"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..cid..</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"/)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:set(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.playback(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"beep"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.wait(</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.hangup()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
include = {</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"mobile_out"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">};
};</span> </p><br /><br /></div><div style="text-align: justify;">Aqui <span style="color: #2b00fe;"><b>["_XXnumber"]</b></span> é um modelo. Esse é tudo igual ao arquivo <span style="color: red;"><b>extensions.conf</b></span> usual. <span style="color: #2b00fe;"><b>call_local</b></span> - a função à qual esta descrição se refere. Essa envia ao discar um número, digamos 14555, a função <span style="color: #2b00fe;"><b>call_local</b></span> será chamada. Além disso, essa função pode ser chamada em uma chamada externa de entrada.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-title" style="color: #4078f2;">call_local</span><span class="hljs-params">(ctx,ext)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">local</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> callerid,cf,uniq,chn
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">local</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> n,j,i
n = </span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">sub</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(ext,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">3</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Pegamos os dois últimos caracteres do número --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> n == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"90"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">or</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> n == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"79"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">or</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> n == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"80"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then </span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"></span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Se terminar em 90, etc. Então essa é uma chamada para um dos grupos de filiais --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
j = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CALLERID(num)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Usando o grupo de toque %s de %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,ext,j))
dial_rg(shuffle(r_group[ext],</span><span class="hljs-literal" style="-webkit-text-stroke-width: 0px; color: #0184bb; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">nil</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)) </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Misture os números do grupo e ligue -- </span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Se o usuário ativou o modo "ausente", a chamada será enviada para ele em seu smartphone via operadora GSM do usuario, como rota de menor custo. --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
cf = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DB(CF/"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..ext..</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"/"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">")"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CF:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..cf)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> cf ~= </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Encaminhamento de chamada detectado de %s para %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,ext,cf))
app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"mobile_out"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,cf,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
callerid = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CALLERID(num)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Tentando fazer uma ligação local %s de %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,ext,callerid))
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> ext ~= </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4550"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">and</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> (CheckChannel(ext)) ~= NOT_INUSE </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">return</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
uniq = channel.UNIQUEID:get()
chn = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CHANNEL"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"UNIQUEID: %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,uniq))
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CHANNEL: %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,chn))
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CALLERID_name: %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,callerid))
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"EXTEN: %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,ext))
app.noop(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CONTEXT: %s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,ctx))
record(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"%s-%s-%s"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,callerid,ext,uniq))
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> ext == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4550"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">local</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> support = CallSupport(callerid)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> support == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"failed"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">return</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> ext == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4514"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">or</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> ext == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4592"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Redirecionar!!!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.dial(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"SIP/4591,60,tT"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.dial(</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">format</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"SIP/%s,60,tT"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,ext))
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span> <br /></div><div style="text-align: justify;"> </div><div style="text-align: justify;">Existem várias verificações para alguns grupos e status. Por exemplo, 4550 é uma equipe de suporte técnico. Para tal, existe uma função própria, na qual se procede ao processamento da contratação dos colaboradores, informando o “cliente externo”, gravando um log e repondo o aviso de chamada perdida ao suporte técnico via jabber.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;"></div><div style="text-align: justify;">Se a parte chamada for um grupo, misture a lista e ligue para a parte aleatória.<br /><br />Por que uso o método aleatório de chamar chamadores de grupos? As filiais são, em essência, gerentes de vendas. Se você incluir uma chamada sequencial para funcionários da filial, o primeiro da lista sempre terá mais vendas do que os outros (isso seria uma trapaça). A situação é semelhante com o método mem-primari (ao que parece), em que o usuário que respondeu pela última vez será ignorado. O método de mistura aleatória é mais honesto e coloca todos os vendedores em pé de igualdade. Você pode, claro, ligar para todos (ligar para todos ao mesmo tempo), mas aí as filiais começam a reclamar que todos os telefones da filial “gritam” ao mesmo tempo, isso não é conveniente, barulhento, etc.<br /><br />Você também pode usar filas para uma chamada aleatória, mas dificilmente as uso. Não sei porque não confio no metodo round robin.</div><div style="text-align: justify;"> </div><div style="text-align: justify;">Além disso, entrando na cidade, descrição:</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">from_trunk = {
h = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">()</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"BBBBBBBLLLLAAAAHHHHHH!!!!!!!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.stopmixmonitor()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> d_status ~= </span><span class="hljs-literal" style="-webkit-text-stroke-width: 0px; color: #0184bb; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">nil</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
d_status = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DIALSTATUS"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Status da Discagem...:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..d_status)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> d_status ~= </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"ANSWER"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CDR(recordingfile)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:set(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
exten = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
uniqid = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">""</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Boa compra!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.hangup()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Algum problema!!!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.hangUP()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"f1"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = </span><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span><span class="hljs-params">(e)</span></span> <span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Para ser sincero, não me lembro o que estava fazendo aqui --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,e,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">;
[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"_."</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">] = foo; </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Sim Sim, essa função é chamada foobar, rsrsrsr--</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
include = {</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">}
}</span> <br /></div><div style="text-align: justify;"> <br />Aqui, envolvo todas as entradas externas em foo.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><span class="hljs-function" style="-webkit-text-stroke-width: 0px; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-title" style="color: #4078f2;">foo</span><span class="hljs-params">(ctx,ext)</span></span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">local</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> chn
tmptab.did = ext
tmptab.rg = g_tab[ext]
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> tmptab.did == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"99051000227736"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Aqui fiz uma experiência com o recebimento do Skype, Laboratorios. --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Teste com Skype!!!"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
app.dial(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"SIP/14553,,tT,M(bar)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
tmptab.callerid = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CALLERID(num)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">find</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(tmptab.callerid,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"88005550678"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> app.hungup() </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Baniu alguém... --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">find</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(tmptab.callerid,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"79"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Aqui eu também esqueci algo relacionado à determinação do número de células --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
tmptab.callerid = </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"8"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">sub</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(tmptab.callerid,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">2</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CALLERID(all)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:set(tmptab.callerid)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
chn = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CHANNEL"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CHANNEL:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..chn)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">string</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">.</span><span class="hljs-built_in" style="-webkit-text-stroke-width: 0px; color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">find</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(chn,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"SIP/gsm_"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Aqui eu pego os portais entrando pelo GSM/GoIP --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Canal encontrado "</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..chn)
</span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Aqui eu pego os gateways entrando pelo GSM através do bando de dados simples criado anteriormente no MySQL pegou o assinante e enviou o cliente para ele. --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
num = sql.mobile_get(tmptab.callerid)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> num </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,num,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CallerID(num):"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..tmptab.callerid)
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"by context:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..ctx)
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DID:"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..tmptab.did)
app.set(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"CDR(did)="</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..tmptab.did)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> tmptab.did == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4595"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> call_all(tmptab.did) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- 4595 é um grupo global para todos os ramos --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.answer()
app.wait(</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
j = channel[</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"DB(ENUM/"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..tmptab.did..</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"/)"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">]:get()
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"tag = "</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">..j)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> j == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"ngs_rec"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
dial_rg(shuffle(tmptab.rg),</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">else</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> tmptab.did ~= </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"3471234"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Lembre-se que todos os números aqui são fictícios!!! --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.playback(mhold.comp_hello)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">if</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> tmptab.did == </span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"3472345"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">then</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;"> app.</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">goto</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"local_ext"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"4591"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">,</span><span class="hljs-number" style="-webkit-text-stroke-width: 0px; color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">1</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
ivr(tmptab.did) </span><span class="hljs-comment" style="-webkit-text-stroke-width: 0px; color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">-- Sim, tem um menu de voz aqui também, mas não vou mostrar neste post... --</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
dial_rg(shuffle(tmptab.rg),</span><span class="hljs-literal" style="-webkit-text-stroke-width: 0px; color: #0184bb; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">nil</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">else</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Algo Detectado"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
dial_rg(tmptab.rg,</span><span class="hljs-literal" style="-webkit-text-stroke-width: 0px; color: #0184bb; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">nil</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">) </span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">
app.noop(</span><span class="hljs-string" style="-webkit-text-stroke-width: 0px; color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">"Desligar?"</span><span style="-webkit-text-stroke-width: 0px; background-color: #fbfdff; color: #383a42; display: inline; float: none; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">)
</span><span class="hljs-keyword" style="-webkit-text-stroke-width: 0px; color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-decoration-color: initial; text-decoration-style: initial; text-decoration-thickness: initial; text-indent: 0px; text-transform: none; white-space: pre-wrap; widows: 2; word-spacing: 0px;">end</span> </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Nesse caso, defino os números das células e os números externos (DID). Se o chamador liga para um celular local (cartão SIM no gateway gsm), então eu atendo o último chamador e mando este cliente para ele. Também existe uma definição da lista <span style="color: red;"><b>ngs_rec</b></span>. Aqui, os números são predefinidos como "publicidade". Era um método antigo (mudei-o mais tarde, mas esta versão do arquivo do qual tirei o código não contém esta revisão). Envio todos os números de publicidade para números especiais do escritório e anoto na base de dados que houve uma chamada para o número indicado no anúncio.<br /><br />Por enquanto, acho que é código suficiente para dar uma luz sobre o Dialplan em LUA. Se alguém tiver interesse em migrar do antigo Dialplan para a LUA, acho que em um proximo post, consiga esclarecer algumas coisas com mais detalhes. Porém, se alguém já sabe programar em LUA, não haverá problema algum.<br /><br />Para concluir, quero dizer que, claro, hoje existe um monte de diferentes soluções sofisticadas, como VoxImplant e similares. Muitas pessoas geralmente não estão acostumadas a trabalhar no console e a programar algo próprio. Mas quero observar que, quando o tamanho da empresa é grande (de 50 assinantes ou mais), construir a lógica da "estação" usando botões e caixas de seleção na interface gráfica pode levar a problemas. Acima, no início do artigo, dei exemplos sobre gorgolejos e penhascos. O Dialplan LUA deste projeto ficou com um peso de apenas 24kb, 968 linhas.<br /><br />Quase 700 assinantes trabalharam nele sem problemas.</div><div style="text-align: justify;"> </div><div style="text-align: justify;"><b>Tkat's All Folks!</b> (É por hoje é só, pessoal!).</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html" target="_blank">Aprenda Lua em 15 minutos!</a></div><div style="text-align: justify;"> </div><div style="text-align: justify;">Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos
em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: <a href="https://t.me/asteriskluabr" target="_blank">https://t.me/asteriskluabr</a>) <br /></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-7896359818387442982020-12-17T18:16:00.004-03:002020-12-17T18:16:18.507-03:00Asterisk® SCF™ + LUA: início rápido<div style="text-align: justify;">Faz alguns anos, que venho postando vários artigos sobre o uso do Dialplan em LUA (extensions.lua) no Asterisk® SCF™. Esta é uma maneira divertida de escrever Dialplans flexíveis e poderosos. Mas para tentar esta forma de escrever Dialplans, você precisa gastar um certo tempo: instalando as bibliotecas necessárias, reconstruindo no Asterisk® SCF™ as opções necessárias.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Além disso, muitos usuários do Asterisk® SCF™ têm experiências diferentes: alguns estão mais próximos da administração do sistema, ou mesmo da telefonia tradicional, do que da programação. Além das especificidades da telefonia - é melhor não carregar sistemas em execução com experimentos desconhecidos, mas você realizar testes e experimentos em seu laptop - você tem que bagunçar o sistema. Em geral, há muitos motivos para "estudar e colocar a mão na massa!".</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Neste post, quero mostrar a todos que desejam e trabalham com Asterisk® SCF™, como, usar o docker, para você poder obter rapidamente uma amostra dos scripts flexíveis em LUA. E então decida se vai usar ou não na prática.</div><div style="text-align: center;"><a href="https://1.bp.blogspot.com/-DzuShQ-n9WY/X9u4i0AFiMI/AAAAAAAAEho/L5d4COrIecgYsxNM57WilhlYZ2hdwoIpACNcBGAsYHQ/s450/2ca6682ead5b4f3cbd0a5eca2990e112.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="331" data-original-width="450" height="294" src="https://1.bp.blogspot.com/-DzuShQ-n9WY/X9u4i0AFiMI/AAAAAAAAEho/L5d4COrIecgYsxNM57WilhlYZ2hdwoIpACNcBGAsYHQ/w400-h294/2ca6682ead5b4f3cbd0a5eca2990e112.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;">Fonte: Internet, imagens free</div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><h3 style="text-align: left;">Palavra introdutória</h3><div><span style="vertical-align: inherit;"><br /></span></div><div style="text-align: justify;">No âmbito do trabalho em vários dos meus projetos, seguindo a tendência moderna de embalar tudo em contentores, preparei uma imagem <a href="https://hub.docker.com/r/antirek/astolua/" target="_blank">astolua</a> (Asterisk® SCF™ + LUA). O Dockerfile contém comandos para instalar Asterisk® SCF™ na sua versão 11, e LUA na sua versão 5.1, luarocks (gerenciador de pacotes para lua), luamongo (driver para acessar mongodb), alguns pacotes LUA Rocks. No futuro, você pode pegar apenas coisas úteis no repositório <a href="https://github.com/antirek/docker-asterisk-lua" target="_blank">docker-astolua</a> e construir seu burro de carga.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Sem dúvida, a vantagem do docker é a capacidade de baixar a imagem, realizar testes-experimentos-testes e, em seguida, excluir as imagens, deixando seu sistema operacional limpo e na ordem usual.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Com base na imagem <b>astolua</b>, criaremos nossa própria imagem de trabalho, na qual usaremos os arquivos de teste de configuração do Asterisk® SCF™ e o Dialplan fazendo uso do extensions.lua.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Preparação</h3><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Precisamos do docker. Se você não o instalou, instale primeiro o docker (<a href="https://www.blogger.com/u/2/#">documentação oficial</a>). Também precisamos do git instalado. Além disso, informo que este post foi elaborado sobre o sistema operacional Ubuntu 14.04. Logo acredito que para as versões mais atuais (20.04), será necessário algumas adaptações. Se você estiver usando outro Linux, em teoria não deve haver diferenças nos comandos, mas as nuances não são excluídas.</div><div style="text-align: justify;"><span style="background-color: white; color: #222222; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; font-size: 16px; text-align: start; vertical-align: inherit;"><span class="" style="vertical-align: inherit;"><br /></span></span></div><h3 style="text-align: justify;">Baixe a imagem astolua</h3><div style="text-align: justify;">Nós compactamos a imagem (atenção, a imagem será baixada do repositório <a href="http://hub.docker.com" target="_blank">hub.docker.com</a> com um tamanho de ~600 MB).</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"># docker pull antirek/astolua</span></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Amostra</h3>Clone <a href="https://github.com/antirek/docker-astolua-sample" target="_blank">docker-astolua-sample</a> - este é um conjunto de arquivos pré-preparado para este artigo.<br /><br /><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; white-space: pre-wrap;"># git </span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; white-space: pre-wrap;">clone</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; white-space: pre-wrap;"> https://github.com/antirek/docker-astolua-sample.git
</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; white-space: pre-wrap;"># cd</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; white-space: pre-wrap;"> docker-astolua-sample</span><br /><br /><div style="text-align: justify;">Agora vamos parar na amostra e ver o conteúdo do diretório. Arquivo</div><h3 style="text-align: justify;">Dockerfile</h3><div style="text-align: justify;">Para construir nossa imagem de trabalho. Nele, indicamos que estamos tomando <b>astolua</b> como base. Em seguida, adicionamos o script autoload after_start.sh, que será executado quando o contêiner iniciar. O log do console do Asterisk® SCF™ será exibido no console onde iniciamos o contêiner.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Crie um arquivo</h3><div style="text-align: justify;">Dentro do container do Docker vamos criar um arquivo para construir a imagem de nosso Dockerfile de amostra.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"># docker build -t </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"astolua:sample"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> .</span></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">O arquivo de execução</h3><div style="text-align: justify;">Dentro do arquivo está um comando docker para iniciar um contêiner com base na imagem de amostra, devemos configurar alguns recursos necessários.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">docker run \
-v /etc/localtime:/etc/localtime:ro \
-v $(</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">pwd</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">)/store/etc/asterisk:/etc/asterisk \
-v $(</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">pwd</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">)/store/var/</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">log</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">/asterisk:/var/</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">log</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">/asterisk \
-v $(</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">pwd</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">)/store/var/menu:/var/menu/ \
--net=host \
-i -t </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"astolua:sample"</span></div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">A pasta de armazenamento </h3><div style="text-align: justify;">A pasta de armazenamento contém arquivos de configuração do Asterisk® SCF™ (aqueles que geralmente estão localizados em <b><span style="color: red;">/etc/asterisk</span></b>) e pastas para registros e menus de voz.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">O comando <b><span style="color: red;">run</span></b> é o mais interessante porque os recursos necessários para o contêiner são especificados aqui. Por exemplo, com a opção <b><span style="color: red;">-v $(pwd)/store/etc/asterisk:/etc/asterisk</span></b>, especificamos que os arquivos de configuração de nossa pasta de armazenamento devem estar dentro do contêiner em seu lugar em <b><span style="color: red;">/etc/asterisk</span></b>.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Por que os comandos estão em arquivos? É conveniente editar comandos em arquivos, uma vez que isso acelera o tempo para testar mudanças em comandos com opções diferentes, e também todas as mudanças estão sob controle de versão. E também é conveniente transferir as opções para <b><span style="color: #2b00fe;">docker-compose</span></b> mais tarde se a imagem for compartilhada com outras pessoas.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Vamos voltar ao console.</h3><div style="text-align: justify;">Vamos fazer uma imagem de<b> astolua</b>: sample (no diretório onde clonamos <b><span style="color: #2b00fe;">docker-astolua-sample</span></b>)</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"># ./build</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Iniciamos o Asterisk® SCF™ (se você já tiver um Asterisk® SCF™ ou outro serviço em execução nas portas 5060, 5061 e 5062 de sua máquina, é melhor interrompê-lo primeiro).</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">./run</span></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"><br /></span></div><div style="text-align: justify;">O log de inicialização do Asterisk® SCF™ deve cair no console. Você pode testar a conexão.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">O arquivo de configuração do Asterisk® SCF™, <b><span style="color: #2b00fe;">sip.conf</span></b> contém dois assinantes 101 e 102 (senha 1234), e o arquivo <b><span style="color: #2b00fe;">queues.conf</span></b> contém a fila 1234 à qual esses dois assinantes são adicionados. Configure seu EndPoint/EndDevice (softphone ou hardphone) para os assinantes e tente fazer uma chamada do assinante 101 para o assinante 102. (Não há troncos para conexão com serviços de ITSP/VoIP externos ou quaisquer configurações de hardware, portanto, testaremos o Dialplan em chamadas locais). As informações sobre a chamada entre os assinantes devem aparecer no console Asterisk® SCF™.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Os assinantes estão funcionando, as chamadas estão sendo completadas? Ok, então o Asterisk® SCF™ no contêiner do docker funciona como deveria.</div><div style="text-align: justify;"><br /></div></div><span style="text-align: justify;"><div style="text-align: justify;">Dialplan em LUA (extensions.lua)</div></span><div style="text-align: justify;"><br /></div><div style="text-align: justify;">O Dialplan em lua está localizado no arquivo <b><span style="color: #2b00fe;">extensions.lua</span></b>. Nos arquivos de configuração do <span style="text-align: justify;">Asterisk® SCF™ </span>na pasta <b><span style="color: red;">store/etc/asterisk</span></b>, há um exemplo de um Dialplan em LUA 100% funcional.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Este arquivo deve descrever corretamente as extensões, variáveis e HITS (na terminologia LUA, são "tabelas").</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">A tabela de extensões contém contextos e extensões correspondentes. Tudo é como em um Dialplan tradicional. Mas cada extensão é processada por uma função própria, na qual você já pode fazer o que quiser em LUA, enquanto interage com o <span style="text-align: justify;">Asterisk® SCF™</span> através da app e das tabelas de canais.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">O exemplo mais simples</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">extensions = {
[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"internal"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">] = {
[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"_1XX"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">] = </span><span class="hljs-function" style="color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-params">(context, extension)</span></span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-comment" style="color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; text-align: start; white-space: pre-wrap;">-- faça alguma coisa --</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
app.dial(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'SIP/'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">..extension);
</span><span class="hljs-comment" style="color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; text-align: start; white-space: pre-wrap;">-- faça algo de novo --</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">end</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">;
}
}</span></div><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;"><div><div style="text-align: justify;"><br /></div></div></blockquote><div style="text-align: justify;">Você pode ver que o aplicativo Dialplan está disponível através do aplicativo, aceita todos os mesmos parâmetros do Dialplan tradicional. <a href="https://wiki.asterisk.org/wiki/display/AST/Asterisk+11+Dialplan+Applications" target="_blank">Todos os aplicativos do Dialplan</a> estão disponíveis via app .</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">A variável de canal dá acesso às variáveis de canal. É assim que, por exemplo, obtemos dialstatus.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">extensions = {
[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"internal"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">] = {
[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"_1XX"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">] = </span><span class="hljs-function" style="color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-params">(context, extension)</span></span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-comment" style="color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; text-align: start; white-space: pre-wrap;">-- faça alguma coisa -- </span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
app.dial(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'SIP/'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">..extension);
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">local</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> dialstatus = channel[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"DIALSTATUS"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">]:get();
app.noop(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'dialstatus: '</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">..dialstatus);
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">end</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">;
}
}</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Você pode alterar <b><span style="color: #2b00fe;">extensions.lua</span></b> e, em seguida, usar o comando <b><span style="color: red;">module reload pbx_lua.so</span></b> no *CLI> do Asterisk® SCF™ para reler <b><span style="color: #2b00fe;">extensions.lua</span></b>. O Asterisk® SCF™ irá verificar a sintaxe LUA, e se tudo estiver ok, então carregar para execução - você pode testar as mudanças.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">O que mais você pode fazer no dialplan lua?</h3><div style="text-align: justify;">Por exemplo, lidar com o <b><span style="color: red;">dialstatus</span></b> é flexível, ele sempre, será retornado pela função Dial(). Não há necessidade de reinventar esses Goto(s-${<a href="https://www.voip-info.org/asterisk-variable-dialstatus/" target="_blank">DIALSTATUS</a>},1). Agora você pode escrever uma verificação de status humanamente. </div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">extensions = {
[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"internal"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">] = {
[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"_1XX"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">] = </span><span class="hljs-function" style="color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-params">(context, extension)</span></span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
app.dial(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'SIP/'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">..extension);
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">local</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> dialstatus = channel[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"DIALSTATUS"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">]:get();
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">if</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> dialstatus == </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'BUSY'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">then</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-comment" style="color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; text-align: start; white-space: pre-wrap;">-- faça alguma coisa -- </span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">elseif</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> dialstatus == </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'CHANUNAVAIL'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">then</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-comment" style="color: #a0a1a7; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; font-style: italic; text-align: start; white-space: pre-wrap;">-- fazer outra coisa --</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">end</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">;
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">end</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">;
}
}</span></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: white; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; font-size: 16px; text-align: start;"><span style="color: #222222;">No exemplo </span><b><span style="color: #2b00fe;">extensions.lua</span></b><span style="color: #222222;">, há um exemplo de um IVR/URA simples: chamando 200, você ouvirá uma entrada do arquivo </span><b><span style="color: red;">/var/menu/demo</span></b><span style="color: #222222;"> e poderá prosseguir pressionando 1 ou 2.</span></span></div><div style="text-align: justify;"><span style="background-color: white; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif; font-size: 16px; text-align: start;"><span style="color: #222222;"><br /></span></span></div><div style="text-align: justify;"><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">local</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> ivr = </span><span class="hljs-function" style="color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"><span class="hljs-keyword" style="color: #a626a4;">function</span> <span class="hljs-params">(context, extension)</span></span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
app.</span><span class="hljs-built_in" style="color: #c18401; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">read</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"IVR_CHOOSE"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">, </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"/var/menu/demo"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">, </span><span class="hljs-number" style="color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">1</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">, </span><span class="hljs-literal" style="color: #0184bb; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">nil</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">, </span><span class="hljs-number" style="color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">2</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">, </span><span class="hljs-number" style="color: #986801; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">3</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">);
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">local</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> choose = channel[</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">"IVR_CHOOSE"</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">]:get();
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">if</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> choose == </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'1'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">then</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
app.queue(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'1234'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">);
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">elseif</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> choose == </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'2'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"> </span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">then</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
dial(</span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'internal'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">, </span><span class="hljs-string" style="color: #50a14f; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">'101'</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">);
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">else</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">
app.hangup();
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">end</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">;
</span><span class="hljs-keyword" style="color: #a626a4; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">end</span><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;">;</span></div><div style="text-align: justify;"><span style="background-color: #fbfdff; color: #383a42; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; font-size: 14px; text-align: start; white-space: pre-wrap;"><br /></span></div><div style="text-align: justify;">Para uma pessoa que escreveu algumas dezenas de linhas de um plano de discagem tradicional (<b><span style="color: #2b00fe;">extensions.conf</span></b>), tudo deve ser familiar aqui. Além disso, todo o poder dos pacotes LUA e <b>luarocks</b> aparece. Espero que seja óbvio que aqui no Dialplan você pode enviar SMS, e-mail, colocar dados no banco de dados, tirar dados do banco de dados, e o banco de dados pode ser qualquer um: MariaDB, PostgreSQL, MySQL, Oracle, SQLite e mongoDB, redis, etc., fazer uma chamada de comando, iniciar outra chamada, faça um roteamento bacana de uma chamada em troncos, etc., sem esquecer, é claro, que tudo funciona dentro do quadro de um asterisco, e é melhor resolver todas as tarefas "pesadas" separadamente.</div><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Qual é o próximo?</h3><div style="text-align: justify;">Eu sugiro:</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><ul><li>veja a documentação <a href="https://wiki.asterisk.org/wiki/display/AST/Lua+Dialplan+Configuration" target="_blank">oficial do Asterisk e LUA</a> - Nele tem exemplos e comparações suficientes para você começar;</li><li>veja <a href="https://gist.github.com/igmar/4066527" target="_blank">um exemplo de Dialplan em LUA do Igmar</a>, onde a maior parte da funcionalidade do PBX é implementada: ligações para assinantes, cadastro / cadastro de operadores de fila, webhooks para chamadas entrantes, roteamento dependendo do dia da semana e horário do dia.</li><li>"Corte" algo de sua autoria, ou seja recrie seu Dialplan em LUA, com as suas necessidades :)</li><li>Temos uma comunidade, ainda pequena no Telegram, para estudos exclusivos em Dialplan com LUA no Asterisk® SCF™, você é bem vindo! (Telegram: <a href="https://t.me/asteriskluabr" target="_blank">https://t.me/asteriskluabr</a>)</li></ul></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Espero que este post seja útil para um início rápido, e que você encontre uma noite de inverno agradável! E tente escrever seus Dialplans em LUA.</div><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><a href="https://www.delphini.com.br/2017/09/aprenda-lua-em-15-minutos.html" target="_blank">Aprenda Lua em 15 minutos!</a></div><div style="text-align: justify;"><br /></div><div style="text-align: justify;">Fonte: <a href="https://habr.com/ru/" target="_blank">Harb</a></div><div style="text-align: justify;"><br /></div>Tradução do post do <a href="https://habr.com/users/antirek/" target="_blank">Dmitriev Sergey</a> @Antirek para o site Harb da Russia em 30 de novembro de 2015.Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-80780240263511583172020-11-04T14:42:00.007-03:002020-11-04T14:47:44.278-03:00Atualização da biblioteca GLIBC no CentOS 7 Linux<p style="text-align: justify;"><b></b></p><div class="separator" style="clear: both; text-align: center;"><b><a href="https://1.bp.blogspot.com/-v36LZHieWXg/X6Lm5g_PedI/AAAAAAAAEdc/32jh1cleu_otd1Cg2EcZCiViSmocYGzlwCNcBGAsYHQ/s1000/shutterstock_213667126.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="667" data-original-width="1000" src="https://1.bp.blogspot.com/-v36LZHieWXg/X6Lm5g_PedI/AAAAAAAAEdc/32jh1cleu_otd1Cg2EcZCiViSmocYGzlwCNcBGAsYHQ/s320/shutterstock_213667126.jpg" width="320" /></a></b></div><p></p><p style="text-align: center;">fonte da imagem: <a href="https://threatpost.com" target="_blank">Threat Post</a><b><br /></b></p><p style="text-align: justify;"><b>Nota</b>: CentOS geralmente é critico para uso de versões estável da biblioteca <b>GLIBC</b>. Alguns programas precisam ser instalados dependendo da nova versão. A atualização da <b>GLIBC</b> precisa ser cautelosa, porque muitas pessoas falham na atualização e o sistema passa a não ser estável (utilizável) para uso.<br /><br />Eu pessoalmente testei e atualizei várias máquinas, todas as quais foram atualizadas com sucesso. Seguindo este procedimento descrito a seguir. </p><p style="text-align: justify;"></p><p style="text-align: justify;">Lembrando: O motivo que tenho que fazer atualização da GLIBC é devido o TIMING do Asterisk® SCF™ explicado neste <a href="https://www.delphini.com.br/2020/10/como-resolver-problemas-de-audio.html" target="_blank">post</a>. </p><p style="text-align: justify;"><b>RES_TIMING_TIMERFD</b>: <br /></p><ul style="text-align: justify;"><li>está disponível apenas em Sistemas Operacionais, com o Linux (Kernel)
usando uma versão de pelo menos <span style="color: red;"><b>2.6.25</b></span> e uma versão do GLIBC de pelo
menos <span style="color: red;"><b>2.8</b></span>;</li></ul><p style="text-align: justify;">Verificando este <a href="https://www.gnu.org/software/libc/" target="_blank">site</a>, verificamos que para a versão atual do Asterisk® SCF™ (16 LTS) devemos usar a versão GLIBC 2.31 (2020-02-01) ou 2.32 (2020-02-05). Então este post tem como finalidade orientar você a atualizar essa biblioteca que é importante para o TIMING do Asterisk® SCF™.</p><p><b>Introdução ao GLIBC</b>:</p><p style="text-align: justify;"><b>GLIBC</b> é a biblioteca <b>LIBC</b> lançada pela GNU, que é a biblioteca de tempo de execução C. <b>GLIBC</b> é a API de nível mais baixo no Linux (kernel) e quase qualquer outro tempo de execução depende da <b>GLIBC</b>. Além de encapsular os serviços do sistema fornecidos pelo sistema operacional GNU/Linux (e seus forks), a própria <b>GLIBC</b> fornece muitas outras implementações dos serviços funcionais necessários. Como a <b>GLIBC</b> cobre quase todos os padrões comuns ao UNIX, você pode imaginar que ela é abrangente. Assim como outros sistemas UNIX, o grupo de arquivos contido nele está espalhado na estrutura em árvore do sistema, como um colchete para suportar todo o sistema operacional.<br /><br />Para visualizar a versão da biblioteca <b>GLIBC</b> do sistema, use o seguinte comando:</p><pre class="prettyprint"><code class="has-numbering">$ strings /lib64/libc.so.6 |grep GLIBC_</code></pre><p style="text-align: justify;">Ao encontrar o problema da biblioteca <b>GLIBC</b>, você pode primeiro considerar por que deseja atualizar a biblioteca <b>GLIBC</b> e pode passar por outras maneiras relativamente insignificantes:</p><ul style="text-align: justify;"><li><span class="tlid-translation translation" lang="pt"><span title="">Compilar seu próprio produto em uma versão inferior do sistema, se o seu produto não exigir a nova versão para oferecer suporte a novos recursos;</span></span></li><li><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title="">Compile com um sistema de alto nível, como <b>Ubuntu</b>, e uma nova versão do CentOS 8 Linuux, mas pode ser necessário implantar para uma versão inferior, então você pode considerar o uso de uma simulação e outra tecnologia para fazer um pacote de instalação melhor e inserir a</span> <span title="">dependência no pacote.</span></span></span></span></li><li><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title="">Usando tecnologia de contêiner, como Docker, leve o isolamento de um ambiente de tempo de execução virtual para ajustar seu programa a uma versão inferior do sistema operacional. </span></span> </span></span> </span></span> </li></ul><p style="text-align: justify;"><span class="tlid-translation translation" lang="pt"><span title="">Confirmado que as opções passada não pode resolver seu problema de incompatibilidade de uso da biblioteca, então considere atualizar a biblioteca <b>GLIBC</b>, eu atualizei a biblioteca por causa do erro relatado no BUG <a href="https://bugs.launchpad.net/ubuntu/+source/asterisk/+bug/816287" target="_blank">#17255</a> do </span></span><span class="tlid-translation translation" lang="pt"><span title="">Asterisk® SCF™:</span></span></p><pre class="prettyprint"><code class="has-numbering"></code></pre><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering"><code class="has-numbering"></code></code><code class="has-numbering"><code class="has-numbering"><code class="has-numbering">ImportError: /lib64/libm.so.6: version `GLIBC_2.23' not found</code></code></code></span></pre><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title="">Etapa de Atualização:</span></span></p><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title=""><b>1, primeiro baixe a versão correspondente do pacote de instalação que deseje</b>:</span></span></p><p style="text-align: left;"><span style="font-family: courier;"><code class="has-numbering"></code></span></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering"># wget https://ftp.gnu.org/gnu/glibc/glibc-2.23.tar.gz</code></span></pre><p style="text-align: left;"><span style="font-family: courier;"><code class="has-numbering"></code></span></p><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title=""></span></span></p><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title=""><b>2, extrair, criar um novo diretório de diretório de compilação</b>;</span></span> <br /></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering"># tar xf glibc-2.23.tar.gz
# cd glibc-2.23/
# mkdir glibc-build
# cd glibc-build (</code><code class="has-numbering"><span class="tlid-translation translation" lang="pt"><span title="">deve estar no diretório recém-criado</span></span>)</code></span></pre><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title=""><b>3, instalação</b>;</span></span></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering"># ../configure --prefix=/usr
# make
# make install</code></span></pre><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title="">Pode haver um erro ao fazer a instalação (semelhante à versão errada do link simbólico)</span></span></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering">gawk '/\.gnu\.glibc-stub\./ { \
sub(/\.gnu\.glibc-stub\./, "", $2); \
stubs[$2] = 1; } \
END { for (s in stubs) print "#define __stub_" s }' > /root/glibc-2.23/glibc-build/math/stubsT
gawk: error while loading shared libraries: /lib64/libm.so.6: invalid ELF header
make[2]: *** [/root/glibc-2.23/glibc-build/math/stubs] Error 127
make[2]: Leaving directory `/root/glibc-2.23/math'
make[1]: *** [math/subdir_install] Error 2
make[1]: Leaving directory `/root/glibc-2.23'
make: *** [install] Error 2</code></span></pre><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title="">Solução (executada em outra janela/terminal):</span></span> </span></span> </p><p></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering"># cd /lib64
# unlink libm.so.6
# ln -s libm-2.23.so libm.so.6</code></span></pre><p><span class="tlid-translation translation" lang="pt"><span title="">Em seguida, execute novamente; make install;</span><br /><span title="">Veja a seguinte mensagem se a instalação foi bem sucedida;</span></span></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering">LD_SO=ld-linux-x86-64.so.2 CC="gcc" /usr/bin/perl scripts/test-installation.pl /root/glibc-2.23/glibc-build/
Your new glibc installation seems to be ok.
make[1]: Leaving directory `/root/glibc-2.23'</code></span></pre><p><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title=""><b>4, verificação</b>.</span></span></span></span></p><pre class="prettyprint"><span style="font-family: courier;"><code class="has-numbering"># ldd --version
ldd (GNU libc) 2.23
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.</code></span></pre><p><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title="">Parabéns </span></span></span></span><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title="">atualização bem-sucedida!</span></span></span></span></span></span></p><p><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title=""><span class="tlid-translation translation" lang="pt"><span title=""><span style="background: rgba(0, 0, 0, 0) none repeat scroll 0px 0px; border: 0px none; font-family: arial; outline: currentcolor none 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="background-color: initial;">Thats All FOLKS! (Isso é tudo, pessoal!)</span></span> </span></span> </span></span> </span></span> </p><p>Fonte: <a href="https://access.redhat.com/discussions/4496771" target="_blank">Installing a newer version of glibc RHEL 7.6</a><br /></p><p> </p><p style="text-align: left;"><span class="tlid-translation translation" lang="pt"><span title=""></span></span></p>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0tag:blogger.com,1999:blog-5351570291681062564.post-32669235249427581592020-10-28T11:56:00.018-03:002020-10-28T12:24:55.767-03:00Como resolver problemas de Áudio causados pela configuração de TIMING (tempo) do Asterisk® SCF™<p style="text-align: justify;"><span style="font-family: arial;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-family: arial;"><a href="https://1.bp.blogspot.com/-iUdl0YtIpag/X5mG4hkiISI/AAAAAAAAEc4/IGl7-bEVh0sOS-_YDHMxrbic9FAdJnRZwCNcBGAsYHQ/s512/Interface_TIMING.png" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="512" data-original-width="512" height="320" src="https://1.bp.blogspot.com/-iUdl0YtIpag/X5mG4hkiISI/AAAAAAAAEc4/IGl7-bEVh0sOS-_YDHMxrbic9FAdJnRZwCNcBGAsYHQ/s320/Interface_TIMING.png" /></a></span></div><span style="font-family: arial;"><br />O artigo atual descreve vários módulos de temporização e explica como eliminar problemas de áudio acionados pela maneira como a TIMING (temporização) do Asterisk® SCF™ é configurada no ambiente de produção.</span><p style="text-align: left;"></p><p style="text-align: justify;"><span style="font-family: arial;"><b>Afinal o que é TIMING?</b></span></p><p style="text-align: justify;"><span style="font-family: arial;">O TIMING afeta o fluxo RTP em chamadas que usam RTP (SIP, H323, MGCP). Uma vez que o sistema RTP é normalmente cronometrado em pacotes de entrada, em algumas situações você pode chegar a uma paralisação. É quando o TIMING (tempo) interno assume o controle, forçando o Asterisk® SCF™ a enviar pacotes com base no módulo carregado e não no fluxo de entrada.</span></p><p style="text-align: justify;"><span style="font-family: arial;">OBS: Uma paralisação ocorre quando ambos os sistemas estão esperando a chegada de um pacote e nenhum deles está enviando nada.</span></p><p style="text-align: justify;"><span style="font-family: arial;"><b>Interfaces TIMING:</b></span></p><p style="text-align: justify;"><span style="font-family: arial;">Em versões mais antigas do Asterisk (1.4.x), se o sistema Asterisk® SCF™ requeria TIMING interno, a única fonte aceitável era o DAHDI. A partir do Asterisk 1.6.1, há uma nova API de temporização, que permite que vários módulos de temporização (TIMING) sejam usados.</span></p><p style="text-align: justify;"><span style="font-family: arial;">Aqui estão os módulos de temporização incluídos no Asterisk® SCF™:</span></p><p style="text-align: justify;"><b>RES_TIMING_DAHDI:</b></p><p style="text-align: left;"></p><ul style="text-align: left;"><li>usa mecanismos de temporização (TIMING) fornecidos pelo DAHDI;</li><li>costuma ser o único meio pelo qual o Asterisk® SCF™ poderia receber o TEMPO (TIMING);</li><li>pode ser muito eficiente, especialmente se o sistema for usar hardware DAHDI;</li><li>pode não ser tão atraente se DAHDI for estritamente usado como uma fonte de temporização (TIMIG).</li></ul><b>RES_TIMING_TIMERFD</b>:<p style="text-align: left;"></p><p style="text-align: left;"></p><ul style="text-align: left;"><li>é um recurso relativamente novo no Linux (Kernel, não entenda Linux como Distribuição, pois o Sistema Operacional é GNU/Linux! Lembre-se disto.), o que significa que pode não ser amplamente divulgado;</li><li>está disponível apenas em Sistemas Operacionais, com o Linux (Kernel) usando uma versão de pelo menos 2.6.25 e uma versão do GLIBC de pelo menos 2.8;</li><li>começando com o Asterisk® SCF™ 1.6.2.2 usa um mecanismo de temporização (TIMIG) fornecido diretamente pelo Linux (Kernel).</li></ul><b>RES_TIMING_PTHREAD</b>:<p style="text-align: left;"></p><p style="text-align: left;"></p><ul style="text-align: left;"><li>usa a biblioteca POSIX PTHREADS para fornecer tempo (TIMING);</li><li>é portátil para muitos tipos de sistemas porque o código usa um conjunto de funções comumente implementado;</li><li>é a única fonte de tempo (TIMING), atualmente utilizável em um sistema não GNU/Linux (e seus forks);</li><li>é também a fonte de temporização (TIMING) menos EFICIENTE, conhecida por PERDER sua eficácia em um ambiente CRITICO (tal como é o de ToIP - Telephony Over IP, VoIP - Voice Over IP, TDMoIP - TDM Over IP e GoIP - GSM Over IP), ou muito carregado, porque um único encadeamento do espaço do usuário é usado para fornecer temporização (TIMING) para todos os usuários do temporizador (INTERFACE TIMING).</li></ul><b><span style="font-family: arial;">Comportamento do Asterisk® SCF™</span></b><p style="text-align: left;"></p><p style="text-align: justify;"><span style="font-family: arial;">Por padrão, no Asterisk® SCF™, é construido e carregado todas as interfaces de temporização (TIMING) definidas no arquivo /etc/asterisk/modules.conf; res_timing_pthread é o primeiro módulo a ser carregado e é seguido por res_timing_dahdi (quando existe o DAHDI instalado em seu ambiente de produção).</span></p><p style="text-align: justify;"><span style="font-family: arial;">Se você deseja a INTERFACE TIMING, você precisa editar o arquivo modules.conf conforme explicado abaixo:</span></p><p style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">Etapa 1</span></b>: veja na Command Line do Asterisk® SCF™ quais módulos estão disponíveis em sua produção:</span></p><pre style="text-align: left;"><div style="text-align: justify;"><span style="font-family: arial;">*CLI> </span><b style="font-family: arial;">module show like timing</b></div><span style="font-family: arial;"><div style="text-align: left;">Module <span> </span>Description Use Count </div>res_timing_pthread.so pthread Timing Interface 0
<div style="text-align: left;">res_timing_dahdi.so DAHDI Timing Interface 0 </div><div style="text-align: left;">res_timing_timerfd.so Timerfd Timing Interface 1 </div></span></pre><p style="text-align: justify;"><span style="font-family: arial;">OBS: no caso o DAHDI é apenas ilustrativo, já que 100% das soluções de mercado não fazem uso do DAHDI como INTERFACE TIMING.</span></p><p style="text-align: justify;"><span style="font-family: arial;"><b><span style="color: red;">Etapa 2:</span></b> Inclua no arquivo modules.conf as interfaces que não iremos utilizar, no caso do exemplo DAHDI e PTHREAD:</span></p><p style="text-align: justify;"><span style="font-family: arial;"># vim /etc/asterisk/modules.conf</span></p><pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Confluence" data-theme="Confluence" style="text-align: left;"><div style="text-align: justify;"><span style="font-family: arial;">[modules]</span></div><span style="font-family: arial;"><div style="text-align: justify;">noload => res_timing_dahdi.so</div><div style="text-align: justify;">noload => res_timing_pthread.so</div></span></pre><p style="text-align: left;"><span style="font-family: arial;"><span style="color: red;"><b>Etapa 3</b></span>: Pare e Reinicie o Asterisk e depois, repita a etapa 1, e veja se é este resultado:</span></p><pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Confluence" data-theme="Confluence"><br /># systemctl stop asterisk.service
# systemctl start asterisk.service
# rasterisk -vvvvgci
<br /></pre><pre class="syntaxhighlighter-pre" data-syntaxhighlighter-params="brush: java; gutter: false; theme: Confluence" data-theme="Confluence">*CLI> module show link timing
Module Description Use Count
res_timing_timerfd.so Timerfd Timing Interface 1 <br /></pre><p style="text-align: left;"><span style="font-family: arial;"></span></p><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;"><b>Um Conselho:</b></span></div><div style="text-align: justify;"><span style="font-family: arial;"><br /></span></div><div style="text-align: justify;"><span style="font-family: arial;">Para entender melhor como o temporizador (TIMING) do Asterisk® SCF™, funciona, provavelmente seria melhor ler mais sobre isso <a href="https://wiki.asterisk.org/wiki/display/AST/Timing+Interfaces" target="_blank">aqui</a>.</span></div><span style="font-family: arial;"><div style="text-align: justify;"><br /></div><div style="text-align: justify;">No entanto, se você já usou as interfaces de temporização (TIMING) DAHDI e não encontrou problemas de temporização (os maiores especialista em Asterisk® SCF™, assim como o time de desenvolvimento da Sangoma Digium, recomendão usar essa, como INTERFACE TIMING.), é melhor seguir essa abordagem. Caso contrario , recomendamos que você use a INTERFACE RES_TIMING_TIMERFD.</div> </span><span style="font-family: arial;"><div style="text-align: justify;"><br /></div></span><span style="font-family: arial;"><div style="text-align: justify;">Se usar RES_TIMING_DAHDI e RES_TIMING_TIMERFD levar a erros de TIMING, é recomendado que você tente a interface RES_TIMING_PTHREAD.</div></span><span style="font-family: arial;"><div style="text-align: justify;"><br /></div></span><span style="font-family: arial;"><div style="text-align: justify;">Mas antes de fazer isto, valide se está utilizando a GLIBC correta para o Kernel (Linus) da sua Distribuição GNU/LInux e seus Forks.</div><div style="text-align: justify;"><br /></div></span><p></p><div class="separator" style="background: 0px 0px rgb(255, 255, 255); border: 0px; clear: both; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><div style="background: 0px 0px; border: 0px; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><div style="font-size: 15px; text-align: justify;"><span style="background-color: initial; font-family: arial;">Espero que isto ajude a você a ter um caminhos das pedras.</span></div><span style="background: 0px 0px; border: 0px; font-family: arial; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;"><div style="text-align: justify;"><br /></div><div style="text-align: justify;"><span style="background-color: initial;">Thats All FOLKS! (Isso é tudo, pessoal!)</span></div></span></div></div><p><span style="font-family: arial;"></span></p><div style="text-align: justify;"><div class="separator" style="background: 0px 0px rgb(255, 255, 255); border: 0px; clear: both; font-size: 15px; outline: 0px; padding: 0px; text-align: justify; transition: all 0.3s ease 0s; vertical-align: baseline;"><span style="color: black;"><span style="background: 0px 0px; border: 0px; font-family: arial; outline: 0px; padding: 0px; transition: all 0.3s ease 0s; vertical-align: baseline;">Fonte: </span><span style="background-color: initial; font-family: arial;">[Digium] Asterisk Administrator Guide v15 [2020].pdf</span></span></div></div>Angelo Delphinihttp://www.blogger.com/profile/02705805373318513551noreply@blogger.com0